FFmpeg 常用命令汇总

前言

FFmpeg 是一款强大的多媒体处理工具,支持音视频的录制、转换和流处理等操作。
在日常开发中,我们经常需要处理视频文件,例如提取视频封面、获取视频时长、格式转换等。
本文将介绍 FFmpeg 的常用命令,帮助你快速上手视频处理。

下载

下载地址

Download FFmpeg

Releases · BtbN/FFmpeg-Builds

Linux上推荐下载地址

https://johnvansickle.com/ffmpeg/

在Linux上能用的有4中不同的包

1
2
3
4
ffmpeg-n7.1.3-43-g5a1f107b4c-linux64-gpl-7.1.tar.xz
ffmpeg-n7.1.3-43-g5a1f107b4c-linux64-gpl-shared-7.1.tar.xz
ffmpeg-n7.1.3-43-g5a1f107b4c-linux64-lgpl-7.1.tar.xz
ffmpeg-n7.1.3-43-g5a1f107b4c-linux64-lgpl-shared-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 是 静态链接版本,所有依赖打包进 ffmpegffplayffprobe 三个可执行文件中,开箱即用,无需配置库路径,适合普通命令行用户。

我只是想在 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
2
# 获取时长(秒)
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 video.mp4

如果你需要更简洁的输出格式,可以使用以下命令。

1
2
# 简洁格式输出
ffprobe -v error -show_entries format=duration -of csv=p=0 input.mp4

提取视频封面

提取单帧作为封面

从视频中截取某一帧作为封面图片是最常见的用法。

1
2
# 从视频第1秒提取一帧作为封面
ffmpeg -i video.mp4 -ss 00:00:01 -vframes 1 cover.jpg

其中 -ss 参数指定时间偏移位置,-vframes 1 表示只提取一帧。
注意:-ss 放在 -i 前面可以加快处理速度,但精度略低。

提取多张截图

如果你需要提取多张截图作为预览图,可以使用 fps 滤镜。

1
2
# 每隔10秒提取一帧图片
ffmpeg -i video.mp4 -vf "fps=1/10" thumb_%04d.jpg

该命令会生成 thumb_0001.jpg、thumb_0002.jpg 等文件。

视频转换

转换视频格式

FFmpeg 支持几乎所有常见的视频格式转换。

1
2
3
4
5
6
7
8
# MP4 转 AVI
ffmpeg -i input.mp4 output.avi

# MP4 转 WebM(Web通用格式)
ffmpeg -i input.mp4 -c:v libvpx -c:a libvorbis output.webm

# 转换为 H.264 编码的 MP4
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4

转换音频格式

音频格式转换同样简单。

1
2
3
4
5
6
7
8
# MP3 转 WAV
ffmpeg -i input.mp3 output.wav

# WAV 转 MP3
ffmpeg -i input.wav -acodec libmp3lame output.mp3

# 提取视频中的音频
ffmpeg -i input.mp4 -vn -acodec copy output.aac

视频裁剪与合并

裁剪视频

从原视频中截取指定时间段的内容。

1
2
# 裁剪从第1分钟开始,时长30秒的视频
ffmpeg -i input.mp4 -ss 00:01:00 -t 00:00:30 -c copy output.mp4

使用 -c copy 参数可以快速裁剪而无需重新编码。

合并视频

将多个视频文件合并成一个。

1
2
3
4
5
6
7
# 首先创建文件列表
# file 'input1.mp4'
# file 'input2.mp4'
# file 'input3.mp4'

# 然后执行合并
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

注意:合并的视频最好使用相同的编码和分辨率。

视频压缩

压缩视频文件大小

通过调整视频比特率来减小文件体积。

1
2
# 使用 CRF 方式压缩(推荐)
ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset veryfast output.mp4

其中 -crf 参数控制质量,值越大文件越小(建议 18-28)。
-preset 指定编码速度,速度越快文件越大(ultrafast 到 slow)。

指定分辨率压缩

还可以通过降低分辨率来减少文件大小。

1
2
3
4
5
# 缩放到 720p
ffmpeg -i input.mp4 -vf scale=-2:720 output.mp4

# 缩放到 480p
ffmpeg -i input.mp4 -vf scale=-2:480 output.mp4

scale 参数中的 -2 表示自动调整为偶数,确保编码兼容。