FFmpeg 常用命令汇总
前言
FFmpeg 是一款强大的多媒体处理工具,支持音视频的录制、转换和流处理等操作。
在日常开发中,我们经常需要处理视频文件,例如提取视频封面、获取视频时长、格式转换等。
本文将介绍 FFmpeg 的常用命令,帮助你快速上手视频处理。
下载
下载地址
Linux上推荐下载地址
https://johnvansickle.com/ffmpeg/
在Linux上能用的有4中不同的包
1 | ffmpeg-n7.1.3-43-g5a1f107b4c-linux64-gpl-7.1.tar.xz |
它们的区别主要体现在 授权协议(GPL vs LGPL) 和 链接方式(静态 vs 动态/shared) 两个维度。
| 关键词 | 含义 |
|---|---|
gpl |
使用 GPL 协议,包含更多高级编解码器(如 libx264, libx265, libfdk_aac 等),功能最全,但商业闭源项目需谨慎使用(可能需开源你的代码)。 |
lgpl |
使用 LGPL 协议,编解码器较少(不包含 GPL 专属组件),允许在闭源商业软件中使用,适合对许可证敏感的场景。 |
shared |
提供 动态链接库(.so 文件)+ 可执行文件,体积小,适合集成到其他程序中(如用 C/C++ 调用 FFmpeg API)。 |
| 无 shared | 是 静态链接版本,所有依赖打包进 ffmpeg、ffplay、ffprobe 三个可执行文件中,开箱即用,无需配置库路径,适合普通命令行用户。 |
我只是想在 Linux 终端用 ffmpeg 命令处理视频/音频(最常见)
比如转码、剪辑、提取音频、加水印等。
推荐下载:ffmpeg-n7.1.3-43-g5a1f107b4c-linux64-gpl-7.1.tar.xz
理由:
gpl:包含 H.264(libx264)、H.265(libx265)、AAC(libfdk_aac)等常用高质量编码器。- 无 shared:解压后直接运行
./ffmpeg,无需设置LD_LIBRARY_PATH,简单省心。
下载
1 | wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz |
解压
1 | tar -xJvf ffmpeg-release-amd64-static.tar.xz |
查看版本
1 | ffmpeg -version |
获取视频信息
查看视频详细信息
使用 ffprobe 工具可以获取视频的详细信息,包括编码格式、分辨率、时长等。
1 | ffprobe -v quiet -print_format json -show_format -show_streams video.mp4 |
该命令会输出 JSON 格式的视频信息,方便程序解析处理。
获取视频时长
从视频文件中提取时长是一个常见需求。
1 | # 获取时长(秒) |
如果你需要更简洁的输出格式,可以使用以下命令。
1 | # 简洁格式输出 |
提取视频封面
提取单帧作为封面
从视频中截取某一帧作为封面图片是最常见的用法。
1 | # 从视频第1秒提取一帧作为封面 |
其中 -ss 参数指定时间偏移位置,-vframes 1 表示只提取一帧。
注意:-ss 放在 -i 前面可以加快处理速度,但精度略低。
提取多张截图
如果你需要提取多张截图作为预览图,可以使用 fps 滤镜。
1 | # 每隔10秒提取一帧图片 |
该命令会生成 thumb_0001.jpg、thumb_0002.jpg 等文件。
视频转换
转换视频格式
FFmpeg 支持几乎所有常见的视频格式转换。
1 | # MP4 转 AVI |
转换音频格式
音频格式转换同样简单。
1 | # MP3 转 WAV |
视频裁剪与合并
裁剪视频
从原视频中截取指定时间段的内容。
1 | # 裁剪从第1分钟开始,时长30秒的视频 |
使用 -c copy 参数可以快速裁剪而无需重新编码。
合并视频
将多个视频文件合并成一个。
1 | # 首先创建文件列表 |
注意:合并的视频最好使用相同的编码和分辨率。
视频压缩
压缩视频文件大小
通过调整视频比特率来减小文件体积。
1 | # 使用 CRF 方式压缩(推荐) |
其中 -crf 参数控制质量,值越大文件越小(建议 18-28)。-preset 指定编码速度,速度越快文件越大(ultrafast 到 slow)。
指定分辨率压缩
还可以通过降低分辨率来减少文件大小。
1 | # 缩放到 720p |
scale 参数中的 -2 表示自动调整为偶数,确保编码兼容。