FFMpeg som perdido quando termina o vídeo de sobreposição curta

0

Estou criando um arquivo de vídeo com 36 segundos de duração. É feito de três arquivos .mp4. Um arquivo de vídeo é o fundo e os outros dois vídeos são sobreposições. Um dos vídeos de sobreposição termina cerca de 26 segundos no vídeo.

Problema: Quando a sobreposição termina em 26 segundos no vídeo, o vídeo de sobreposição permanece na tela em pausa e o áudio para os outros dois vídeos é perdido . Há 10 segundos de ar morto.

Seria preferível que o vídeo da sobreposição fosse removido quando terminasse. No entanto, o mais importante é que o final não deve interromper o áudio dos outros dois vídeos.

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

Arquivo de Entrada [0]: 4609_segment_1_remote_0.mp4
Alias: [0: v], [rem0], rotate1]
Duração: 00: 00: 35.58
Dimensões: 640x480 [SAR 1: 1 DAR 4: 3]
Começa: 0,401 segundo - Vídeo é girado 90 graus no sentido horário Vídeo de fundo

Arquivo de Entrada [1]: 4609_segment_1_remote_1.mp4
Alias: [1: v], [rem1]
Duração: 00: 00: 25.14
Dimensões: 640x480 [SAR 1: 1 DAR 4: 3]
Começa: 0.304 segundos
Sobreposição: 180 px da direita, 10 px da parte inferior

Arquivo de Entrada [2]: 4609_segment_1_local_0.mp4
Alias: [2: v], [loc0]
Duração: 00: 00: 34,98
Dimensões: 640x480 [SAR 1: 1 DAR 4: 3]
Começa: Imediatamente Overlay: 10 px da direita, 10 px da parte inferior

O resultado é um vídeo de 480x640. O vídeo dura 36 segundos. O áudio dura 26 segundos. Existem dois vídeos sobrepostos no canto inferior direito do vídeo.

    
por Daryl 22.03.2018 / 18:58

1 resposta

1

Use

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 termina com a entrada mais curta, então o remédio é estender indefinidamente todas as entradas, exceto uma, que decide a duração do áudio de saída.

eof_action=pass limpará a sobreposição quando o fluxo secundário terminar.

    
por 22.03.2018 / 19:29