Как преобразовать анаморфотное видео hdv в обычное видео h.264 с помощью ffmpeg? Как обеспечить квадратные пиксели на выходе?

У меня есть следующий код для преобразования HDV-видео в готовый к сети mp4:

ffmpeg -i hdv-input.m2t -crf 28 -c:a aac -b:a 80k -ac 1 -strict -2 -movflags +faststart h-264-out.mp4

Проблема в том, что в этой команде нигде не указывается пропорция пикселя. Если вы не в курсе, видеофайлы HDV имеют разрешение 1440x1080, но пиксели не квадратные. При декодировании для отображения пиксели растягиваются до полного разрешения 1920x1080. Это называется анаморфотным видео, и этого следует избегать при создании видео для конечных пользователей.

Честно говоря, я не знаю, создаются ли mp4-файлы, которые я создаю с помощью приведенной выше команды, с квадратными пикселями, но я хочу убедиться, что это так. Какие правильные параметры мне нужно добавить к этой команде, чтобы обеспечить квадратные пиксели в моем выходе mp4? Должен ли я также установить разрешение, и как мне это сделать? Кажется, должна быть и -c:vкоманда, но я действительно не знаю.

Ответы (1)

Вы можете использовать комбинацию фильтров Scale и Setsar.

ffmpeg -i hdv-input.m2t -vf "scale=iw*sar:ih,setsar=1" -crf 28 -c:a aac -b:a 80k -ac 1 -movflags +faststart h-264-out.mp4

Ширина масштабатора, которую необходимо установить в current width x sample/pixel aspect. Если он уже равен 1, он равен new width = old width. После этого я добавил setsar, чтобы убедиться, что выходной SAR равен 1.

Для формата MP4 видеокодеком по умолчанию является H.264. Если это то, что вы хотите, не нужно явно устанавливать c:v.

(Для битрейта < 128k libfdk_aacэто лучше, чем собственный кодировщик AAC.)

-strict -2не требуется для использования собственного кодировщика AAC, если ваш ffmpeg выпущен после декабря 2015 года.

Итак, эта команда выводит квадратные пиксели, но с тем же разрешением, что и на входе?
При том же разрешении экрана, что и на входе.
Я думаю, вам нужно "... setsar=1:1,setdar=16:9..." - См.: video.stackexchange.com/questions/9947/… .
Все, что делает setdar, — это изменяет SAR, чтобы результирующее видео при отображении имело расширение width = DAR x height. Для варианта использования OP setdar будет избыточным. Для других видео это будет принудительно отображать 16: 9,
Нужно ли мне что-то делать (загружать и т. д.), чтобы использовать libfdk_aac? Я перешел -c:a aacна -c:a libfdk_aacи получаю сообщение об ошибке «неизвестный кодировщик« libfdk_aac »».
Из-за несовместимости лицензий двоичные файлы не могут распространяться вместе с этой библиотекой. Вам придется самостоятельно скомпилировать ffmpeg с этой библиотекой. Я использую этот скрипт для автокомпиляции ffmpeg. Первый запуск займет 4-5 часов на i7. Дальнейшие пробеги, 2 часа или около того.
@Gyan, что если при запуске этой команды вы получите ошибку «Ширина не делится на 2»?