H.264 Профили
Profiles представляют собой наборы возможностей. Если ваш черный ящик поддерживает только профиль Baseline
, он не сможет декодировать поток, используя High
.
В VLC
вы можете установить профиль H.264, который будет использоваться в x264
кодировщика, как это:
--sout="#transcode{vcodec=h264,venc=x264{profile=baseline}...
H.264 Уровни
Think уровней как ограничение/индикатор требуемой производительности декодера. Если декодер поддерживает определенный уровень для определенного профиля, он должен иметь возможность декодировать потоки на этом уровне и на любом из нижних уровней.
Прежде всего, уровень для 640x480 @ 30 fps равен 3
, а не 2.2
.
Вы можете вычислить это следующим образом:
macrobolocks = ceil(640/16) * ceil(480/16) = 1200
macroblocks/s = macroblocks * 30 = 36000
Причиной ceil
является то, что разрешение без mod16 обиты кратного 16.
Затем вы посмотрите на H.264 Levels. Вы находитесь в пределах ограничения размера кадра для 2.2
, который равен 1620
, но максимальная скорость декодирования больше 20252
, поэтому вам нужно выбрать следующий уровень, который равен 3
. Вам также нужно будет рассмотреть максимальный битрейт для профиля Baseline
в этой таблице.
Если у вас есть Android устройство, которое вы можете скачать мой H.264 Calculator app from the Amazon App Store (я могу отправить вам apk
, если вам не нравится их Орвелианские разрешения для приложений)
x264
датчика автоматически выбирает уровень на основе ваших параметров кодирования , С VLC
вы можете установить флаг самостоятельно, используя что-то вроде:
--sout="#transcode{vcodec=h264,venc=x264{profile=baseline,level=22}"...
Осторожно, это устанавливает флаг выхода кодера и фактически не производит Level 2.2
потока. Вы можете поместить любые значения, которые вы хотите, поэтому можно отметить поток Full HD со скоростью 60 кадров в секунду как Level 2.2
, даже если он нигде не ограничивает уровень.
VLC перекодирование
Если вы хотите, чтобы убедиться, что вы отправляете правильный поток вам нужно перекодировать исходный материал. Это пример для 640x480 @ 30 fps, который приводит к потоку H.264 Level 3
, как я показал вам выше. Если вы хотите Level 2.2
, вам необходимо снизить разрешение или частоту кадров или и то, и другое. В этом случае ваш битрейт видео может снизиться.
cvlc input.mp4 --sout="#transcode{vcodec=h264,venc=x264{profile=baseline},fps=30,width=640,height=480,vb=1372,acodec=mpga,ab=128,channels=2,samplerate=44100}:rtp{...}
MediaInfo
Mediainfo является отличным инструментом, чтобы получить информацию о файле медиа. Вы можете проверить спецификации ваших входных файлов, но это не поможет вам обнаружить неправильный уровень, который был вынужден или неправильно выбран кодировщиком. Самый безопасный способ - перекодировать.
Это не может быть прав. 640x480 @ 30 fps - Уровень 3 не 2.2. Максимальное значение fps для этого разрешения при 2.2 составляет ~ 16,85. Все ваши исходные файлы MP4 на 640x480 @ 30 fps? – aergistal
@aergistal - вот что говорит мне вкладка «Codec» диалогового окна Current Media Information VLC. Результат, который пришел с ними, также говорит, что они 640x480. Уровень ... Я не уверен, как бы дважды проверить это. –
Я только что получил значок «популярного вопроса» для этого 0-балльного вопроса. Позор, для этого нет лишнего значка! Я мог повесить его рядом со всеми моими «переливами». –