FFmpeg 与 FFprobe 使用指南:从基础操作到工程实践
- 约 6 分钟读完 - 全文 2086 字FFmpeg 与 FFprobe 使用指南:从基础操作到工程实践
FFmpeg 是音视频领域最强大的开源工具之一,几乎所有与视频转码、剪辑、合并、分析相关的需求都能用它解决。这篇文章整理了我平时最常用的 FFmpeg 与 FFprobe 命令,覆盖基础操作和工程场景,并补充一些现代工作流中容易被忽略的技巧。
一、基础转码与压缩
1. 最简单的格式转换
ffmpeg -i input.ogv -c:v libx264 output.mp4
ffmpeg -i input.mp4 -c:v libxvid output.avi
ffmpeg -i input.mp4 -c:v wmv2 output.wmv2. 同时指定分辨率、码率、帧率和音频参数
ffmpeg -i input.ogv \
-s 640x480 \
-b:v 500k \
-r 29.97 \
-c:v libx264 \
-c:a aac \
-b:a 48k \
-ac 2 \
output.mp43. 缩放为 720p(保持宽高比)
# scale=-2:720 表示高度固定为 720,宽度按原始比例自适应(必须为偶数)
ffmpeg -i input.mp4 -c:v libx264 -vf "scale=-2:720" output.mp44. 修改分辨率(强制指定尺寸)
ffmpeg -i input.mp4 -strict -2 -s 640x480 output.mp45. 设置目标码率
ffmpeg -i input.mp4 -b:v 2000k output.mp46. CRF 模式(推荐用于存档/上传)
# CRF 值越小质量越高,常用 18-28,默认 23
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac output.mp47. 二压控制:限制最大码率和缓冲区
ffmpeg -i input.mp4 -c:v libx264 -b:v 2000k -maxrate 2500k -bufsize 5000k output.mp4二、视频裁剪与截取
1. 从第 30 秒开始截取 10 秒
ffmpeg -i input.wmv -ss 30 -c copy -t 10 output.wmv
ffmpeg -i input.wmv -ss 00:00:30.0 -c copy -t 00:00:10.0 output.wmv2. 截取到指定结束时间
ffmpeg -i input.wmv -ss 30 -c copy -to 40 output.wmv3. 关键帧与时间戳
FFmpeg 为了加速会使用关键帧技术,把 -ss 放在 -i 之前会使用关键帧,放在 -i 之后则不使用。如果要保留时间戳,加上 -copyts:
ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp44. 精确裁剪(重新编码)
ffmpeg -i input.mp4 -ss 00:00:10.500 -to 00:00:20.500 -c:v libx264 -c:a aac output.mp4三、视频与音频分离/合并
1. 分离视频流(去掉音频)
ffmpeg -i input.mp4 -vcodec copy -an output_video.mp42. 分离音频流
ffmpeg -i input.mp4 -acodec copy -vn output_audio.aac3. 提取音频为 MP3 / WAV
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3
ffmpeg -i input.mp4 -vn -c:a pcm_s16le -ar 44100 -ac 2 output.wav4. 去除指定音轨
ffmpeg -i input.mp4 -map 0 -map -0:a:0 -c copy output.mp45. 替换音频轨道
ffmpeg -i video.mp4 -i audio.aac -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 -shortest output.mp46. 合并多个视频
准备一个 mylist.txt:
file 'clip1.mp4'
file 'clip2.mp4'
file 'clip3.mp4'然后执行:
ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp4如果输入文件格式不统一,先转码为中间格式再合并:
ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg
ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg
cat intermediate1.mpg intermediate2.mpg > intermediate_all.mpg
ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi四、截图与缩略图
1. 每秒截取一张图片
ffmpeg -i input.mp4 -r 1 image_%04d.jpg2. 指定时间点截图
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 output.jpg3. 生成视频缩略图网格
ffmpeg -i input.mp4 -vf "fps=1/10,scale=320:-1,tile=4x4" -frames:v 1 grid.jpg这会在 40 秒的视频里每 10 秒取一帧,拼成 4x4 的缩略图网格。
五、水印、字幕与画面处理
1. 添加图片水印
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=5:5" output.mp42. 添加文字水印
ffmpeg -i input.mp4 -vf "drawtext=text='Sample':x=10:y=10:fontsize=24:fontcolor=white" output.mp43. 添加字幕(软字幕 / 硬字幕)
# 硬字幕:烧录到画面
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" output.mp4
# 软字幕:封装进容器
ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s mov_text output.mp44. 旋转 / 翻转视频
# 顺时针旋转 90 度
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
# 水平翻转
ffmpeg -i input.mp4 -vf "hflip" output.mp4
# 垂直翻转
ffmpeg -i input.mp4 -vf "vflip" output.mp45. 裁剪去黑边
ffmpeg -i input.mp4 -vf "crop=iw:ih-100:0:50" output.mp46. 检测并自动裁剪黑边
ffmpeg -i input.mp4 -vf "cropdetect=24:16:0" -f null -根据输出中的 crop=... 结果,再执行正式裁剪。
六、倍速、帧率与画面调整
1. 视频加速 / 减速
# 加速 4 倍
ffmpeg -i input.mp4 -vf "setpts=0.25*PTS" -af "atempo=2.0,atempo=2.0" output.mp4注意:atempo 每次最大只能到 2.0 或最小 0.5,需要叠加多个 filter。
2. 修改帧率
ffmpeg -i input.mp4 -vf "fps=30" -c:a copy output.mp43. 统一输出规格(分辨率 + 帧率 + 黑边填充)
ffmpeg -y -i input.mp4 \
-ss 8.620667 -to 221.749666 \
-vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1:color=black,fps=50" \
output.mp4七、直播与录制
1. 录制 HLS 直播流
ffmpeg -i https://example.com/live/playlist.m3u8 -c:a copy -c:v copy output.mp42. 录制 RTMP 流
ffmpeg -i rtmp://example.com/live/stream -c copy output.flv3. 录制指定时长
ffmpeg -i https://example.com/live.m3u8 -t 60 -c copy output.mp44. 生成 HLS 切片
ffmpeg -i input.mp4 \
-c:v libx264 -c:a aac \
-hls_time 10 -hls_list_size 0 \
-f hls output/playlist.m3e8八、FFprobe 媒体信息分析
FFprobe 是 FFmpeg 套件中的分析工具,用于查看媒体文件的元数据、流信息、关键帧、GOP 结构等。
1. 查看视频基础信息
ffprobe -i input.mp42. JSON 格式输出格式与流信息
ffprobe -print_format json -show_format -show_streams -show_error input.mp43. 只看视频流的指定字段
ffprobe -select_streams v \
-show_entries format=duration,size,bit_rate,filename \
-show_streams \
-v quiet \
-of json \
input.mp44. 查看 GOP 结构
ffprobe -show_packets -of xml input.mp4 > packets.xml然后查找 flags="K_" 标记,相邻两个 K 帧之间的 dts_time 间隔就是 GOP 长度。
5. 快速查看关键帧位置
ffprobe -select_streams v -show_frames -show_entries frame=pkt_pts_time,frame_type -of csv input.mp4 | grep I6. 查看视频编码、分辨率、帧率
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,width,height,r_frame_rate,bit_rate -of default=noprint_wrappers=1 input.mp47. 检测静音段落
ffmpeg -i input.mp4 -af "silencedetect=noise=-50dB:d=0.5" -f null -九、工程实践中的实用技巧
1. 只复制流,不重新编码
ffmpeg -i input.mp4 -c copy output.mp4这种方式速度最快,也不会损失画质,但无法修改画面内容(如裁剪、加水印)。
2. 快速预览(低质量、高速度)
ffmpeg -i input.mp4 -vf "scale=480:-1" -crf 35 -preset ultrafast preview.mp43. 关键帧提取
ffmpeg -i input.mp4 -vf "select=eq(pict_type\,I)" -vsync vfr keyframe_%04d.jpg4. 查看 SAR / PAR / DAR
ffprobe -v error -select_streams v:0 -show_entries stream=sample_aspect_ratio,display_aspect_ratio -of default=noprint_wrappers=1 input.mp4三者关系:PAR = DAR / SAR。理解它们对处理异形像素、防止画面被拉伸非常重要。
5. 多路输出
ffmpeg -i input.mp4 \
-c:v libx264 -s 1920x1080 -b:v 5000k output_1080p.mp4 \
-c:v libx264 -s 1280x720 -b:v 2500k output_720p.mp4 \
-c:v libx264 -s 854x480 -b:v 1000k output_480p.mp46. 硬件加速(NVIDIA NVENC)
ffmpeg -i input.mp4 -c:v h264_nvenc -b:v 5000k output.mp4macOS 可用 VideoToolbox:
ffmpeg -i input.mp4 -c:v h264_videotoolbox -b:v 5000k output.mp47. 音量调整
# 提升 5dB
ffmpeg -i input.mp4 -af "volume=5dB" output.mp4
# 归一化音量
ffmpeg -i input.mp4 -af "loudnorm" output.mp48. 生成静音视频或测试图
# 10 秒 1280x720 蓝色测试视频
ffmpeg -f lavfi -i "color=c=blue:s=1280x720:d=10" -c:v libx264 output.mp4
# 生成正弦波音频
ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" output.wav十、常用参数速查表
| 参数 | 说明 |
|---|---|
-i |
指定输入文件 |
-c:v / -vcodec |
视频编码器 |
-c:a / -acodec |
音频编码器 |
-s |
分辨率,如 640x480 |
-r |
帧率 |
-b:v / -b:a |
视频/音频码率 |
-crf |
恒定质量因子,常用于 x264/x265 |
-preset |
编码速度与压缩率平衡,如 ultrafast、slow |
-ss |
起始时间 |
-t |
持续时间 |
-to |
结束时间 |
-vf |
视频滤镜 |
-af |
音频滤镜 |
-an |
去除音频 |
-vn |
去除视频 |
-c copy |
直接复制流,不重新编码 |
-map |
选择输入流 |
-shortest |
以最短输入流为准结束输出 |
总结
FFmpeg 的能力非常广泛,几乎覆盖了音视频处理的全部场景。本文从日常最常用的操作出发,整理了转码、裁剪、合并、截图、水印、直播录制、FFprobe 分析等命令,并补充了 CRF 压缩、HLS 切片、硬件加速、静音检测、关键帧提取等工程技巧。
建议把自己常用的命令整理成脚本或 alias,配合 FFprobe 的分析能力,可以大幅提升音视频处理的工作效率。
参考:
本文阅读量 次