启用参数的 ffmpeg 覆盖滤镜有两帧的滞后

启用参数的 ffmpeg 覆盖滤镜有两帧的滞后

我想将一个视频叠加在另一个视频上,并且希望非常准确地做到这一点(因为我需要稍后从那时开始修剪它)我正在使用一个函数来确定视频启用参数的值,它看起来像:

# dummy code
def get_visible():
 some_numeric_value = "between(t, y, z) + between(t, a, b)"
 return f"between(t, x, y) * if(gt(some_numeric_value,1), 0, 1)"

我通常在 ffmpeg 命令中使用返回值,如下所示:

ffmpeg \
-i /tmp/11906114-8505-45a0-a9ad-5a0ff96657f1.mp4 \
-loop 1 -i /tmp/55e06ba9-c032-432a-8618-a4a53ce6ed7e_scaled.png \
-loop 1 -i /tmp/553ba58a-fb9d-4cde-8087-f5cb7c181928_output.jpg \
-vcodec libvpx-vp9 -i /tmp/transparent_02099107-9e3e-4fe4-a678-2c76ac8d137b_final.webm \
-vcodec libvpx -i /tmp/a4c2c0c1-83fe-4741-8208-111dab7da860_output.webm \
-filter_complex "[0:v]scale=size=1920\\\\:1080[s0];\
[1:v]setpts=PTS+0/TB[s1];\
[s0][s1]overlay=enable=between(t\\,0\\, 3.5004583333333334):eof_action=pass:format=auto:x=0:y=0[s2];\
[2:v]setpts=PTS+3.5504583333333333/TB[s3];\
[s2][s3]overlay=enable=between(t\\,3.5504583333333333\\, 8.130458333333333):eof_action=pass:format=auto:x=0:y=0[s4];\
[3:v]tpad=start_duration=0:start_mode=clone:stop_duration=0:stop_mode=clone[s5];\
[s5]setpts=PTS+0/TB[s6];\
[s4][s6]overlay=enable=between(t\\,0\\, 3.5004583333333334):eof_action=repeat:format=auto:x=56:y=544[s7];\
[4:v]tpad=start_duration=0:start_mode=clone:stop_duration=0:stop_mode=clone[s8];\
[s8]setpts=PTS+3.5004583333333334/TB[s9];\
[s7][s9]overlay=enable=between(t\\, 3.5004583333333334\\, 8.200958333333332) * if(gt(1+between(t\\, 4.970458333333333\\, 6.810458333333333)+between(t\\, 7.120458333333334\\, 8.130458333333333)\\, 1)\\, 0\\, 1):eof_action=repeat:format=auto:x=-346:y=216[s10];\
[3:a]adelay=0|0[s11];[s11]apad=pad_dur=4.700499999999999[s12];\
[4:a]adelay=3500.4583333333335|3500.4583333333335[s13];\
[s13]apad=pad_dur=0.001[s14]\
;[s12][s14]amix=inputs=2[s15];\
[s15]volume=2[s16]" \
-map [s10] -map [s16] -acodec flac \
-crf 18 -g 1 -map_chapters -1 \
-vcodec libx264 -vprofile baseline \
-shortest -strict -2 \
-pix_fmt yuv420p -sample_fmt s16 \
/tmp/video.mp4

我希望叠加层能够准确放置,并且不会出现上述两帧的延迟。我还应该做什么才能实现这一点?

相关内容