Принудительный вывод продолжительности видео с внешними субтитрами в ffmpeg

Принудительный вывод продолжительности видео с внешними субтитрами в ffmpeg

Я извлекаю фрагмент видеофайла длительностью 1 минута, начиная с 30-й минуты от начала, и добавляю субтитры из внешнего файла с помощью следующей команды:

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

Проблема, которую я получаю, заключается в том, что транскодированное видео имеет длительность 00:01:03.50вместо ожидаемой 00:01:00.00. И при воспроизведении такого видео с помощью VLC воспроизведение останавливается до того, как полоса прогресса достигает конца.

Длительность становится ровно 1 минутой, только если я удаляю ввод субтитров. Похоже, длительность выходного файла увеличивается, чтобы вместить последнюю фразу из субтитров, которая начинается в пределах определенного диапазона в 1 минуту.

Есть ли способ принудительно установить длительность выходного сигнала точно на значение, установленное во -dфлаге?

решение1

В зависимости от того, как ffmpeg анализирует файлы субтитров, вам доступны два варианта:

Вывод в MP4, но возможно пропуск субтитров:

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

Это должно создать 60-секундный файл, но он пропустит все субтитры, которые начинаются до 1800-х, но выходят за его пределы.

Вывод в 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

Здесь любые субтитры, начинающиеся до 1800-х и выходящие за их пределы, будут присутствовать и иметь соразмерную длину, т.е. если субтитр начинается в 1795 и заканчивается в 1802, то он будет длиться 2 секунды в выводе.

2-шаговый метод

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

и

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

При этом извлекаются субтитры, соответствующие нужному видеофрагменту, а затем они мультиплексируются с видео.

Связанный контент