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.
-strict -2
não é mais necessário. (Costumava ser necessário paraaac
codec de áudio, mas agora é considerado estável.)Respostas:
Usar
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.fonte