Як я можу встановити рівень профілю h.264 за допомогою ffmpeg?


16

У мене є фільм (m4v / h.264 / AAC), який чудово грає на моєму Mac, але я нещодавно виявив, що він не буде грати на моєму Apple TV3. Переглянувши властивості цього фільмового файлу, я бачу, що він має профіль High@4.1, але Apple TV3 підтримує лише високий показник High4.4. Я думаю, що єдиною властивістю, яка робить це відео несумісним, є максимальна швидкість передачі бітів, всі інші властивості виглядають так, як вони підтримуються у 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- як це визначено в Додатку А до стандарту Н.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 вважаються здоровими. Нижня означає кращу якість. Якщо ваш вхід має швидкість передачі даних до 65000 кбіт / с, швидше за все, він все одно буде виглядати досить добре після конверсії.


1
Це добре спрацювало. На жаль, він втратив частину метаданих, але фактичне відео не змінило якості. З інтересу, чи би наступна команда досягла того самого? ffmpeg -i input.mp4 -vcodec x264 -vprofile high -vlevel 4.0 -acodec copy output.mp4
Сем

Так, -vваріанти - це псевдоніми :v. Які метадані ви втратили?
slhck

Я думаю, що це могла бути просто втрачена художня робота. Я не знаю, чи це технічно вважається метаданими ... Чи справді зображення міститься у файлі? Я не перевіряв все інше, перш ніж знову додав ціле.
Сем

Зараз у мене інший файл із подібною проблемою. Це неправильний рівень профілю, але інші характеристики здаються сумісними з необхідним рівнем (4,0). Якщо я використовую команди, які ви подали вище, чи залишать вони дані недоторканими, якщо вони не сумісні із введеним рівнем профілю? В основному, я не хочу, щоб ffmpeg торкався будь-яких даних, окрім тега, який говорить про те, який профіль і рівень це. Це можливо чи збирається встановити всі значення (нітрат, рамка тощо) на задані значення?
Сем

2
Я просто натрапив на спосіб досягти цього. Під час вибору відеопотоку в Subler є можливість змінити профіль і рівень, щоб зробити його сумісним з певними пристроями. Він говорить про те, щоб переконатися, що відео сумісне з профілем, який ви встановили, тому я не думаю, що він не здійснює повторного кодування, він повинен просто змінити метадані.
Сем

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

Ура


0

Хоча я читав інакше (тобто різні формати введення), я використовував "-movflags use_metadata_flag" під час перекодування з x265 на x264, і він працював!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.