Правильная команда для ремуксирования mpeg-ts в mp4 с помощью FFmpeg?

Должен ли я просто использовать простую команду, например:

ffmpeg -i C:\video_input.ts -c:v copy -c:a copy -bsf:a aac_adtstoasc C:\video_output.mp4

но я видел, как многие используют -copytsего, зачем это нужно, я не совсем понимаю его документацию?

ffmpeg -i C:\video_input.ts -c:v copy -c:a copy -bsf:a aac_adtstoasc -copyts C:\video_output.mp4

а также каждый раз, когда я использую -copyts, появляется дополнительная задержка перед началом первого кадра, поэтому, чтобы исправить это, безопасно ли использовать -start_at_zeroили это в какой-то степени нарушает смысл копий (если это имеет смысл)?

ffmpeg -i C:\video_input.ts -c:v copy -c:a copy -bsf:a aac_adtstoasc -copyts -start_at_zero C:\video_output.mp4

Спасибо!

Ответы (1)

Если вы не знаете, что у вас есть особая потребность в сохранении временных меток, нет необходимости использовать -copyts. MPEG-TS, будучи форматом, используемым для удаленного просмотра, по умолчанию будет иметь некоторое смещение времени начала, чтобы обеспечить буферизацию на стороне проигрывателя. MP4 для локального воспроизведения не нужен, copytsсохранит.

но в чем разница между нет -copytsи -copyts+ -start_at_zero? Нужна ли она, зачем она существует?
start_at_zeroимеет значение, если вы ищете входные данные, т.е. -ss 10обычно первый искомый кадр имеет TS, сбрасываемый на ноль. С s_a_0 его TS теперь будет 10. Если используется с copyts, этот TS будет передан на выход.
Я думал, вы имели в виду, что если я -ss 10использую файл .ts, он на самом деле будет ss @ 11,4 (задержка 1,4 от ts), но если я использую -ss 10 с s_a_0, он действительно начнется с 10? Когда я проверил, это не имеет смысла, поскольку это не то, что происходит. Исходный файл .ts имел start: 1.4, при переходе под -ss 10, у того же самого было начало 0,0480, то же самое, если бы я добавил к нему start_at_zero или обе копии и start_at_zero.
Допустим, ваш MPEG-TS имеет время начала 15 и продолжительность 10 с, а ваш кодек имеет внутреннее кодирование, поэтому нам не нужно беспокоиться о GOP. При -ss 3 -i in.ts -c copy out.mp4первом искомом кадре после этапа демультиплексора значение PTS равно 0, а время начала out.mp4 равно 0. При -ss 3 -copyts -i in.ts -c copy out.mp4первом искомом кадре значение PTS после демультиплексора равно 18, которое переносится во время мультиплексирования в out.mp4. При -ss 3 -start_at_zero -copyts -i in.ts -c copy out.mp4, первый искомый кадр имеет PTS 3 после демультиплексора, который переносится во время мультиплексирования в out.mp4.
спасибо за дальнейшее разъяснение. Теперь, чтобы завершить его, следуя вашему первоначальному ответу. В каком именно случае, когда я просто хочу повторно преобразовать файл из .ts в контейнер .mp4 без потери качества, потребуется включить -copyts? И если мне это нужно в определенных ситуациях, не всегда ли лучше включать s_a_0, если я не хочу иметь эту «буферизацию» для моего нового вывода .mp4?
Вам никогда не понадобятся копии при копировании в MP4. Пусть ffmpeg сгенерирует новые метки времени. Временные метки не влияют на качество видео/аудио.
как насчет синхронизации аудио/видео? Или это (iirc) только после отметки 26 час: что-то: что-то?
Обычно это не проблема, но я не знаю текущего состояния того, как ffmpeg обрабатывает перенос PTS на отметке 26 часов. Обновление: видимо, не очень .
поэтому, принимая во внимание то, что один из людей сказал в комментариях к вашей ссылке, вернемся к одному из моих вопросов: есть ли что-то неправильное или что-то негативное в использовании обоих -copytsи -start_at_zeroв любом файле .ts всегда при работе с ремуксом .ts to . мп4? Извините за то, что так раздражаю вопросами, но большое спасибо за то, что вы еще более последовательны во всех ответах, правда.
Все копии + sa0 добьются того, что время начала MP4 будет представлять смещение обрезанной части в исходном файле, но идентификатор исходного файла или команда, использованная для его создания, не будут сохранены. Если вы не знаете, что вам это нужно, зачем беспокоиться?
ну, я не был уверен, у меня есть записи стримов, twitch.tv в основном в формате .ts, поэтому я не был уверен, что это вызовет какие-то проблемы, но да, если вы так говорите, я просто ремиксирую их все из . ts в mp4 -c:v copy -c:a copy -bsf:a aac_adtstoascбез -copytsили sa0. Меня очень интересовал закулисный аспект, не генерирует ли использование копий новый соответствующий новый TS, может ли он рассинхронизироваться до 26 часов, и все те вещи, о которых я понятия не имел!