为什么sendcmd
ffmpeg 可以与drawtext
, 和其他过滤器一起使用,但不能与scale
,rotation
和其他过滤器一起使用?
示例(此代码有效)
ffmpeg -i testIN.mp4 -filter_complex "[0:v]sendcmd=f=testTXT.cmd,drawtext=fontfile=PF.ttf:text='': fontcolor=white:fontsize=150" testOUT.mp4
Run Code Online (Sandbox Code Playgroud)
测试TXT.cmd
0 drawtext reinit 'text=111';
1 drawtext reinit 'text=222';
2 drawtext reinit 'text=333';
Run Code Online (Sandbox Code Playgroud)
示例(此代码不起作用)
ffmpeg -i testIN.mp4 -filter_complex "[0:v]sendcmd=f=testTXT.cmd,drawbox=x=10:y=10:w=100:h=100" testOUT.mp4
Run Code Online (Sandbox Code Playgroud)
测试TXT.cmd
0 drawbox reinit 'x=20:y=20:w=200:h=200';
1 drawbox reinit 'x=30:y=30:w=300:h=300';
2 drawbox reinit 'x=40:y=40:w=400:h=400';
Run Code Online (Sandbox Code Playgroud)
您遇到了几个问题:
并非所有过滤器都支持sendcmd。您可以查看哪些过滤器支持 sendcmd ffmpeg -filters
。查找C
过滤器名称左侧的“ ”。此外,只有某些过滤器选项(也称为 sendcmd“命令”)可以与 sendcmd 一起使用。请参阅FFmpeg 过滤器文档,或参阅,并查看每个过滤器的“命令”man ffmpeg-filters
部分下的可用选项。
每个过滤器命令必须在 sendcmd 文件中声明。文档示例中显示reinit
的似乎仅限于绘图文本过滤器,但文档中没有对此进行解释。
sendcmd 文本文件示例:
0 rotate angle '45*PI/180';
1 rotate angle '90*PI/180';
2 rotate angle '180*PI/180';
Run Code Online (Sandbox Code Playgroud)
命令示例ffmpeg
:
ffmpeg -i input.mp4 -filter_complex "[0:v]sendcmd=f=test.cmd,rotate" output.mp4
Run Code Online (Sandbox Code Playgroud)
上面的示例将在持续时间0
、1
和 上旋转2
。
sendcmd 文本文件示例:
0
overlay@1 x 10,
overlay@1 y 10,
overlay@2 x W-w-10,
overlay@2 y H-h-10,
overlay@3 x (W-w)/2,
overlay@3 y (H-h)/2;
# overlay@1 does not move at this duration so it needs no new entry here
2.25
overlay@2 x 10,
overlay@2 y H-h-10,
overlay@3 x (W-w)/2,
overlay@3 y H-h-10;
Run Code Online (Sandbox Code Playgroud)
命令示例ffmpeg
:
ffmpeg -i video.mp4 -i overlay1.png -i overlay2.jpg -i overlay3.png -filter_complex "[0:v]sendcmd=f=test.cmd,nullsink;[0:v][1:v]overlay@1[bg1];[bg1][2:v]overlay@2[bg2];[bg2][3:v]overlay[v]" -map "[v]" -map 0:a? -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)