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

0

Estou criando um arquivo de vídeo com 36 segundos de duração. É composto por três arquivos .mp4. Um arquivo de vídeo é o plano de 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 aos 26 segundos no vídeo, o vídeo sobreposto permanece na tela em pausa e o áudio dos 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 encerramento não interrompa 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]
Inicia: 0,401 segundos O
vídeo é girado
Vídeo de fundo no sentido horário de 90 graus

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]
Inicia: 0,304 segundos
Overlay: 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]
Inicia:
Sobreposição imediata : 10 px à direita, 10 px da parte inferior

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

Daryl
fonte
2
-strict -2não é mais necessário. (Costumava ser necessário para aaccodec de áudio, mas agora é considerado estável.)
slhck

Respostas:

1

Usar

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; portanto, 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 assim que o fluxo secundário terminar.

Gyan
fonte