FFMPEG去除了在多步骤过程中创建叠加视频的步骤



我有一个多步骤的过程来生成一个可下载的直播副本,其中屏幕元素被刻录到视频中。

第一个命令从文本文件中的帧列表生成透明的动画覆盖。

ffmpeg -loglevel panic -f concat -safe 0 -r 30 -vcodec png  -i /tmp/bottomThird/UNKNOWN/36000/bt_files.txt -r 30 -codec:v png /tmp/bottomThird/UNKNOWN/36000/d8d55cd61873959017ed8dce8a0dcb61.mov

文本文件包含动画的一系列帧,这些帧具有"打开帧"和循环帧,本质上是:

/tmp/bottomThird/UNKNOWN/img/00001.png
/tmp/bottomThird/UNKNOWN/img/00002.png
/tmp/bottomThird/UNKNOWN/img/00003.png
/tmp/bottomThird/UNKNOWN/img/00004.png
/tmp/bottomThird/UNKNOWN/img/00005.png
/tmp/bottomThird/UNKNOWN/img/00006.png
/tmp/bottomThird/UNKNOWN/img/00007.png
/tmp/bottomThird/UNKNOWN/img/00008.png
/tmp/bottomThird/UNKNOWN/img/00009.png
/tmp/bottomThird/UNKNOWN/img/00010.png
/tmp/bottomThird/UNKNOWN/img/00005.png
/tmp/bottomThird/UNKNOWN/img/00006.png
/tmp/bottomThird/UNKNOWN/img/00007.png
/tmp/bottomThird/UNKNOWN/img/00008.png
/tmp/bottomThird/UNKNOWN/img/00009.png
/tmp/bottomThird/UNKNOWN/img/00010.png
...

重复直到达到帧计数(在这种情况下为36000帧(。

生成的MOV文件在2gb的范围内,因为它基本上只是一个包含帧图像的容器。

使用多个覆盖生成下一步中间文件。上面的MOV,文本在40帧后显示,并保持静止直到结束,以及第二个叠加"水印"风格的图像。

ffmpeg  -i /tmp/embedGenerator/51039542/51039542.mp4  -vf "movie=/tmp/embedGenerator/51039542/bt_51039542.mov[inner];movie=/tmp/embedGenerator/51039542/bt_51039542_blank.png[overlay];movie=/tmp/embedGenerator/51039542/cover.png[cover];[in][inner] overlay=(W-w)/2:H-h-15 [out];[out][overlay] overlay=(W-w)/2:H-h-15:enable='between(n,40,36000)' [fin];[fin][cover] overlay=0:0 [final]" -shortest -b:v 5000k  -f mpegts /tmp/embedGenerator/51039542/intermediate.ts

我希望避免创建动画MOV文件的步骤,并将这两个步骤合并为一个命令,主要是为了避免临时存储这么大的文件。


我考虑过但尚未尝试的一种替代方案是生成2个MOV文件。"条目"然后是"循环"序列并循环第二个文件,而不是生成一整套帧。

您可以简单地将concat输入直接指定为第二个输入,并将其用于覆盖。其他叠加中使用的输入也是如此。

ffmpeg -i /tmp/embedGenerator/51039542/51039542.mp4 -f concat -safe 0 -r 30 -i /tmp/bottomThird/UNKNOWN/36000/bt_files.txt -i /tmp/embedGenerator/51039542/bt_51039542_blank.png -i /tmp/embedGenerator/51039542/cover.png -filter_complex "[0][1] overlay=(W-w)/2:H-h-15 [out];[out][2] overlay=(W-w)/2:H-h-15:enable='between(n,40,36000)' [fin];[fin][3] overlay=0:0" -shortest -b:v 5000k -f mpegts /tmp/embedGenerator/51039542/intermediate.ts

最新更新