ffmpeg 常用命令
替换视频中的音频
ffmpeg -i input.mp4 -i input.wav -c:v copy -map 0:v:0 -map 1:a:0 output.mp4
如果音视频不一样长,则需要在输出文件名之前添加选项-shortest
自动剪掉末尾超出的音频或视频
视频片段剪辑
ffmpeg -ss 00:00:00 -t 00:01:00 -i input.mp4 -c copy output.mp4
ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4
指定剪切的时间参数最好放到输入文件之前,这样虽然剪切出来的时间不精确但是没有黑屏
- -ss:指定开始时间
- -t:指定持续时间
- -to:指定结束时间
- -c:使用原视频编码方式
截图
ffmpeg -i input.mp4 -f image2 -vf fps=fps=1 out%d.png
ffmpeg -i input.mp4 -f image2 -vf fps=fps=1/20 out%d.png
每隔 1 秒或 20 秒截一张图
视频图片互转
ffmpeg -i input.mp4 out%4d.png
ffmpeg -r 30 -i input%4d.png -c:v libx264 -crf 20 -pix_fmt yuv420p -preset slow output.mp4
- -r:指定视频帧率
- -pix_fmt:色彩格式,视频一般是 yuv420p 的,png 图片是 rgb24 的
转码
ffmpeg -i input.mp4 -c:v libx264 -profile:v high -level 5.1 -crf 20 -preset slower output.mp4
ffmpeg -i input.mp4 -c:v libx265 -x265-params level=6.2 -crf 20 -preset slow output.mp4
- -c:v:指定视频的编码格式
- -qp:固定量化值(Constant Quantizer):每一帧都是相同的画质,值为 0 -51,越小质量越好(0 是无损)
- -crf:恒定速率因子(Constant Rate Factor),在所选的画质上下波动,值为 0 -51,越小质量越好(0 是无损)
- -preset:调节编码速度和质量的平衡,可选 ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo,从快到慢。
ffmpeg 默认采用 crf 方式编码视频
关键帧无损视频分割
ffmpeg -i input.mp4 -f segment -segment_times 00:00:10,00:00:20 -c copy %02d.mp4
ffmpeg -i input.mp4 -f segment -segment_time 00:00:5 -c copy %02d.mp4
第一个命令是按照 5 秒和 10 秒的时间点进行分割,第二个命令是按照 5 秒间隔时间进行分割。%02d.mp4
表示按照序号(从 0 开始)以 2 位宽度输出文件名(结果形如 00.mp4,01.mp4,02.mp4)
- -segment_time:指定分割的间隔时间
- -segment_times:指定分割的时间点,多个时间点以逗号隔开
如果分割时间点不是关键帧,将向后进行搜索到第一个关键帧
无损视频合并
相同规格的视频片段可以进行合并,先创建 list.txt 文件,在文件中写入要合并的文件名称,例如:
file 00.mp4
file 01.mp4
file 02.mp4
再使用以下命令进行无损合并:
ffmpeg -f concat -i list.txt -c copy output.mp4
记录合并视频列表的文本文件可以是任意名称的(不是 list.txt 也行)