Я попробовал каждую возможную команду, чтобы вырезать часть (1-3 минуты) видео MP4 H.264, но это выходит хорошо и плохо. Мое видео имеет скорость 29,97 кадров в секунду, 1080p, ~ 80 минут, ~ 3,5 ГБ и скорость передачи данных ~ 6200 КБ / с. Проблема в том, что мой вывод начинается без видео в течение 1-2 секунд, затем продолжается нормально, но звук начинается через 0 секунд. Он хорошо воспроизводится (аудио и видео) в любом медиапроигрывателе, но при использовании его в другом месте (рендеринг для производственных целей), например в Adobe AE, Media Encoder или конвертере видео, отрендеренное видео в формате FINAL начинается в 0 секунд, когда аудио началось. Поэтому звук заканчивается на 1-2 секунды вперед, а я этого не хочу. Это также происходит при обрезке видео на YouTube в Интернете по адресу http://clipconverter.cc.

Моя команда выглядит следующим образом:

ffmpeg -ss 01:19:22.000 -t 00:1:43.000 -i "in.mp4" -acodec copy -vcodec copy out.mp4

Я даже пытался поставить -ss после -i, но получаю те же результаты. Кроме того, если у меня уже есть видео с этой проблемой, что я могу сделать, чтобы исправить это? Что я мог бы сделать для этого в Adobe AE? Этот сайт: https://ubuntuforums.org/showthread.php?t=1824250 говорит о том, что его нужно вырезать на "ключевых кадрах". Если да, то как мне сделать это в FFmpeg? Как мне их найти? Кто они такие? Я не собираюсь НИКОГДА перекодировать (с -c: v x264), это занимает слишком много времени и повторно сжимает видео с артефактами.

Я использовал как статические, так и общие сборки FFmpeg. Также используется стабильный 3.2.2 и ffmpeg-20170112-6596b34-win64-static, не повезло.

TLDR: в моем видео, которое я вырезал в FFMPEG, в начале отсутствуют кадры (даже черные или пустые), что приводит к несинхронизированному аудио / видео при окончательном рендеринге в любом программном обеспечении для рендеринга видео.

1 ответ1

3

использование

ffmpeg -ss 01:19:22 -t 00:1:43 -i "in.mp4" -c copy -avoid_negative_ts make_zero out.mp4

Большая часть сжатого видео использует временное сжатие, поэтому кадры полагаются на другие кадры для полного декодирования. Если вы обрезаете видео, используя режим copy , некоторые кадры после вашей inpoint могут зависеть от кадров до inpoint для декодирования. Если так, то эти кадры должны быть включены. Этим кадрам присваиваются отрицательные временные метки, поэтому хорошие видеопроигрыватели используют их для декодирования, а не для представления. Видео показывается с самого начала. Поскольку все аудиокадры являются ключевыми, обрезка звука выполняется точно, и аудио / видео синхронизация сохраняется.

Очевидно, что видеоредакторы не обращают внимания на PTS, поэтому они показывают все кадры, хранящиеся в файле. Моя команда выше принудительно устанавливает положительный TS для всех сохраненных кадров, поэтому видео / аудио будут синхронизированы *.

* Не совсем верно. Для аудиокодеков на основе MDCT, таких как MP3/AAC, предыдущий кадр включен с отрицательным PTS, поскольку он необходим для декодирования. Возможно, ваш NLE будет декодировать этот кадр, что приведет к асинхронности 21 - 23 мс. Обходной путь - перекодировать аудио.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .