短覆盖视频结束时 FFMpeg 声音丢失

短覆盖视频结束时 FFMpeg 声音丢失

我正在制作一个时长为 36 秒的视频文件。它由三个 .mp4 文件组成。一个视频文件是背景,另外两个视频是叠加视频。其中一个叠加视频在视频开始约 26 秒时结束。

问题:当叠加在视频的第 26 秒结束时,叠加视频仍暂停在屏幕上,并且声音的为了其他两个视频丢失空气寂静了10秒。

如果在结束时移除覆盖的视频,那就更好了。但是,最重要的是,结束时不应停止其他两个视频的音频。

ffmpeg -loglevel fatal \
    -itsoffset 0.401 -i 4609_segment_1_remote_0.mp4 \
    -itsoffset 0.304 -i 4609_segment_1_remote_1.mp4 \
    -i 4609_segment_1_local_0.mp4 \
    -filter_complex " \
        [1:v]scale=iw/4:-1:flags=lanczos[rem1]; \
        [2:v]scale=iw/4:-1:flags=lanczos[loc0]; \
        [0:v]transpose=1[rotate1]; \
        [rotate1][loc0]overlay=main_w-overlay_w-10:main_h-overlay_h-10[rem0]; \
        [rem0][rem1]overlay=main_w-overlay_w-180:main_h-overlay_h-10[rem1]; \
        [0:a][1:a][2:a]amerge=inputs=3[a]" \
    -map "[rem1]" -map "[a]" -ac 3 -vcodec libx264 \
    -ar 44100 -strict -2 -acodec aac 4609_segment_1.mp4

输入文件 [0]:4609_segment_1_remote_0.mp4
别名:[0:v],[rem0],rotate1]
持续时间:00:00:35.58
尺寸:640x480 [SAR 1:1 DAR 4:3]
开始时间:0.401 秒
视频顺时针旋转 90 度
背景视频

输入文件 [1]:4609_segment_1_remote_1.mp4
别名:[1:v],[rem1]
持续时间:00:00:25.14
尺寸:640x480 [SAR 1:1 DAR 4:3]
开始时间:0.304 秒
覆盖:距右侧 180 像素,距底部 10 像素

输入文件 [2]:4609_segment_1_local_0.mp4
别名:[2:v],[loc0]
持续时间:00:00:34.98
尺寸:640x480 [SAR 1:1 DAR 4:3]
开始时间:立即
叠加:距右侧 10 像素,距底部 10 像素

结果是 480x640 的视频。视频时长 36 秒。音频时长 26 秒。视频右下角有两个叠加的视频。

答案1

使用

ffmpeg -loglevel fatal \
    -itsoffset 0.401 -i 4609_segment_1_remote_0.mp4 \
    -itsoffset 0.304 -i 4609_segment_1_remote_1.mp4 \
    -i 4609_segment_1_local_0.mp4 \
    -filter_complex " \
        [1:v]scale=iw/4:-1:flags=lanczos[rem1]; \
        [2:v]scale=iw/4:-1:flags=lanczos[loc0]; \
        [0:v]transpose=1[rotate1]; \
        [rotate1][loc0]overlay=main_w-overlay_w-10:main_h-overlay_h-10[rem0]; \
        [rem0][rem1]overlay=main_w-overlay_w-180:main_h-overlay_h-10:eof_action=pass[rem1]; \
        [1:a]apad[1a];[2:a]apad[2a]; \
        [0:a][1a][2a]amerge=inputs=3[a]" \
    -map "[rem1]" -map "[a]" -ac 3 -vcodec libx264 \
    -ar 44100 -strict -2 -acodec aac 4609_segment_1.mp4

amerge以最短的输入终止,因此补救措施是无限期地延长除决定输出音频长度的输入之外的所有输入。

eof_action=pass一旦辅助流结束,就会清除覆盖。

相关内容