FFmpeg создает выходной файл короче, чем его самый длинный поток

Если предположить, pipe:0 3-секундный WAV-файл
Если предположить, input2.mp4 такое файл MP4 за 1 секунду

С помощью этой команды:

ffmpeg -f f32le -ar 44100 -channels 2 -i pipe:0 -t 5 -itsoffset 4 -i input2.mp4 -y -f mp4 -c:v copy -map 0:a -map 1:v output.mp4

Я ожидаю, что output.mp4 имеет продолжительность 5 секунд, потому что самый длинный поток, видео поток, длится так долго.

Однако выходной файл длится всего 3 секунды, продолжительность аудиопотока. Если я играю output.mp4 в QuickTime действительно только 3 секунды аудио.

Интересно, когда я анализирую вывод с ffprobeЯ вижу, что видеопоток имеет продолжительность 5 секунд и время начала 4 секунды, как и должно быть.

Как я могу сделать вывод, пока это самый длинный поток? Я почти уверен, что смогу перекодировать видеопоток (вместо того, чтобы копировать его), но я хочу этого избежать. Я просто не понимаю, почему это было бы невозможно без перекодирования.

Почему не ffmpeg принять во внимание, что есть метки времени, идущие дальше, чем 3 секунды?

1 ответ

Решение

FFmpeg не будет продлевать конкретный поток на основе продолжительности других потоков. Если вы хотите расширить поток, используйте фильтры - apad для аудио и tpad для видео. Затем добавьте -shortest или -t duration, чтобы ограничить вывод.

Другие вопросы по тегам