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, чтобы ограничить вывод.