ffmpeg filter_complex 复杂多滤镜叠加

目录

使用选项 -filter_complex

滤镜语法:
filtername=option1=value1:option2=value2:option3=value3...

完整命令语法:
ffmpeg -i 输入0 -i 输入1 -i 输入N -filter_complex "多滤镜组合表达式" output.mp4

其中多滤镜组合表达式语法思路是:[输入]滤镜[输出];[输入]滤镜[输出];

举例,
滤镜1:使用 overlay 给视频添加图片水印,
滤镜2:使用 subtitles 给视频加字幕
ffmpeg -y -i v.mp4 -i logo.png -filter_complex "[0][1]overlay=(W-w)/2:(H-h)/2[i];[i]subtitles=s.srt:force_style='FontName=PingFang SC,Fontsize=16'" o.mp4

注意其中字幕文件是直接写到 subtitles里,不是用 -i参数统一输入的。

多滤镜组合表达式中,使用 ; 分号分隔一次输入输出(一个管道)。使用 : 冒号分隔一个管道中的多个设置项。

  • [0] 表示第一个输入 ,即 v.mp4
  • [i] 表示自定义的输出变量,也可以是一个词
  • [0:v] 表示第一个输入源的视频轨
  • [0:a] 表示第一个输入的音频轨
  • [0:s] 表示第一个输入的字幕轨
  • [0:a:1] 表示第一个输入源的音频轨的第2轨

还可以更复杂:

以下内容摘录自: https://superuser.com/a/1730579

Testing:

Build synthetic pattern for testing (apply low resolution 192x108 for example):

ffmpeg -y -f lavfi -i testsrc=size=192x108:rate=10:duration=10 -vcodec libx264 -pix_fmt yuv420p -f h264 input.264

Build rot_text.png image:

ffmpeg -y -f h264 -hwaccel nvdec -i input.264 -filter_complex "color=black@0:100x100,format=rgba[c];[c]scale2ref[ct][mv];[ct]setsar=1,drawtext=text='WATERMARK WATERMARK WATERMARK':x=(W-tw)/2:y=(H-th)/2:fontfile=arial.ttf:fontsize=(w+h)/18:[email protected],split[txt][alpha],[txt][alpha]alphamerge,rotate=(-27*PI)/180:ow=iw:oh=ih:c=black@0,drawtext=text='Bottom Center':x=(W-tw)/2:y=H-th-3:fontfile=arial.ttf:fontsize=12:[email protected]:box=1:[email protected]:boxborderw=5,drawtext=text='Top Center':x=(W-tw)/2:y=3:fontfile=arial.ttf:fontsize=7:fontcolor=4F81BD@1:box=1:boxcolor=C0504D@1:boxborderw=5[fin];[mv]nullsink" -frames:v 1 -map "[fin]" rot_text.png

https://i.stack.imgur.com/9zjvN.png

Overlay the image on input.264:

ffmpeg -y -r 25 -f h264 -hwaccel nvdec -i input.264 -i rot_text.png -filter_complex "[0][1]overlay=x=(W-w)/2:y=(H-h)/2" -c:v h264_nvenc output.mp4

Sample output frame:
https://i.stack.imgur.com/DIWR6.png


参考:
https://stackoverflow.com/questions/49028551/ffmpeg-multiple-commands-using-filter-complex
https://stackoverflow.com/questions/34221046/ffmpeg-filter-complex-wih-speedup-and-subtitles-and-scaling