Força a duração do vídeo de saída com legendas externas no ffmpeg

1

Eu estou extraindo um fragmento de um minuto de um arquivo de vídeo a partir de 30 minutos do início e adicionando legendas de um arquivo externo usando o seguinte comando:

ffmpeg -ss 1800 -i input_video.m4v -ss 1800 -i input_subtitle.srt -map 1:0 -c:a aac -c:v libx264 -c:s mov_text -crf 35 -preset slow -t 60 -avoid_negative_ts 1 output_video.mp4

O problema é que o vídeo transcodificado tem duração 00:01:03.50 em vez do esperado 00:01:00.00 . E ao reproduzir esse vídeo com o VLC, a reprodução pára antes que a barra de progresso chegue ao final.

A duração se torna exatamente 1 minuto somente se eu remover a entrada da legenda. Parece que a duração do arquivo de saída é estendida para caber na última frase da legenda que começa dentro do intervalo definido de 1 minuto.

Existe uma maneira de forçar a duração da saída exatamente para o valor definido no -d flag?

    
por BartoNaz 16.01.2017 / 01:15

1 resposta

1

Devido a como o ffmpeg analisa os arquivos de legenda, há duas opções disponíveis para você:

Envie para MP4, mas possivelmente pule uma legenda :

ffmpeg -i input_video.m4v -i input_subtitle.srt -ss 1800 -c:a aac -c:v libx264 -c:s mov_text -crf 35 -preset slow -t 60 output_video.mp4

Isso deve produzir um arquivo de 60 segundos, mas ele vai pular todas as legendas que começam antes do século XIX, mas passam por ele.

Saída para MKV :

ffmpeg -i input_video.m4v -i input_subtitle.srt -ss 1800 -c:a aac -c:v libx264 -c:s ass -crf 35 -preset slow -t 60 output_video.mkv

Aqui, qualquer legenda começando antes de 1800 e estendendo-se além dela estará presente e do comprimento proporcional, ou seja, se um submarino começa em 1795 e termina em 1802, então ele terá a duração de 2 segundos na saída.

método de 2 passos

ffmpeg -i subfile -ss 1800 -t 60 sub.ass

e

ffmpeg -ss 1800 -i video.mp4 -i sub.ass -c:s mov_text out.mp4

Isso extrai os subs correspondentes ao segmento de vídeo desejado e, em seguida, é multiplicado pelo vídeo.

    
por 16.01.2017 / 16:24