Я создаю видеофайл длиной 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 пикселей снизу

В результате получается видео 480х640. Видео длится 36 секунд. Аудио длится 26 секунд. В правом нижнем углу есть два наложенных видео.

1 ответ1

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 очистит оверлей после завершения вторичного потока.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .