Как установить уровень профиля h.264 с помощью ffmpeg?

16

У меня есть фильм (m4v / h.264 / AAC), который отлично воспроизводится на моем Mac, но недавно я обнаружил, что он не будет воспроизводиться на моем Apple TV3. После просмотра свойств этого файла фильма я вижу, что у него есть профиль High@4.1, но Apple TV3 поддерживает только High@4.0. Я думаю, что единственное свойство, которое делает это видео несовместимым, это максимальная скорость передачи видео, все остальные свойства выглядят так, как будто они поддерживаются в High@4.0.

Как я могу использовать ffmpeg, чтобы понизить это видео до High@4.0?

Или я должен вместо этого изменить фактическое свойство (максимальная скорость передачи), которое делает это видео 4.1 вместо 4.0? Я обеспокоен тем, что если я просто изменю скорость передачи данных, хотя файл будет совместим с High@4.0, он все равно будет «помечен» как High@4.1 и, следовательно, все равно не будет воспроизводиться на моем Apple TV3.

Сэм
источник

Ответы:

22

При кодировании с помощью libx264вы можете установить профиль и уровень H.264 с помощью:

  • -profile:v- один из high, mainили baseline(и другие, но здесь это не имеет значения)
  • -level:v- как определено в Приложении A стандарта H.264, например 4.0.

Например:

ffmpeg -i input.mp4 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy output.mp4

Здесь мы только что скопировали аудиопоток, поскольку он не будет затронут.

Выходные данные будут иметь правильный профиль и уровень, установленные в его метаданных. Вы можете проверить это во время кодирования, где x264говорится что-то вроде:

[libx264 @ 0x7fb26103a000] profile High, level 4.0

MediaInfo также может помочь вам проанализировать детали контейнера и кодека.

Конечно, перекодирование видео в некоторой степени ухудшит его качество, учитывая, что вы снова применяете преобразование с потерями. Попробуйте установить -crfпараметр, чтобы повлиять на параметр постоянного качества. Значение по умолчанию здесь составляет 23, а значения между 18 и 28 считаются нормальными. Чем ниже, тем лучше качество. Если ваш ввод имеет скорость передачи до 65 000 кбит / с, скорее всего, он все равно будет выглядеть довольно хорошо после преобразования.

slhck
источник
1
Это сработало хорошо. К сожалению, некоторые метаданные были утеряны, но качество видео не изменилось. Из интереса, достигла ли следующая команда того же самого? ffmpeg -i input.mp4 -vcodec x264 -vprofile high -vlevel 4.0 -acodec copy output.mp4
Сэм
Да, -vварианты являются псевдонимами :v. Какие метаданные вы потеряли?
slhck
Я думаю, что это могло быть просто произведение искусства, которое было потеряно. Я не знаю, технически ли это считается метаданными ... На самом деле художественные работы содержатся в файле? Я не проверял все остальное, прежде чем снова добавил все к нему.
Сэм
У меня сейчас другой файл с похожей проблемой. Это неправильный уровень профиля, но остальные спецификации кажутся совместимыми с моим требуемым уровнем (4.0). Если я воспользуюсь командами, которые вы дали выше, останутся ли данные нетронутыми, если они не будут несовместимы с введенным уровнем профиля? По сути, я не хочу, чтобы ffmpeg касался каких-либо данных, кроме тега, который говорит, что это за профиль и уровень. Это возможно, или это собирается установить все значения (нитрат, частота кадров и т. Д.) На заданные значения?
Сэм
2
Я просто наткнулся на способ добиться этого. На самом деле у Сублера есть возможность при выборе видеопотока изменить профиль и уровень, чтобы сделать его совместимым с определенными устройствами. Он говорит вам, чтобы убедиться, что видео совместимо с профилем, который вы устанавливаете, так что я не думаю, что оно перекодирует, просто нужно изменить метаданные.
Сэм
1

Ссылаясь на ваш комментарий , попробуйте эту команду:

ffmpeg -i input.mp4 -map 1 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy \
# copies all global metadata from input.mp4 to output.mp4
-map_metadata 0 \
# copies video stream metadata from input.mp4 to output.mp4
-map_metadata:s:v 0:s:v \
# copies audio stream metadata from input.mp4 to output.mp4
-map_metadata:s:a 0:s:a \
output.mp4

ура

Риккардо Вольпе
источник