ffmpeg 常用命令

admin
admin 2022年05月01日
  • 在其它设备中阅读本文章

替换视频中的音频

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 也行)