Разница между H.264 и x264 и как в нее играть

23

Отказ от ответственности : это не актуальный вопрос, а скорее "поделиться своими знаниями, стиль Q & A"

Итак, я использую Xbmc на своем Raspberry Pi, и у меня возникают проблемы с пониманием, что я могу на самом деле играть с ним, а что нет.

Я читал, что RPi может воспроизводить видео в кодировке H.264 , но я могу найти только видео в кодировке x264 . Это тоже сработает? И если так, почему некоторые файлы не будут работать, вероятно?

Лукас Кнут
источник

Ответы:

41

Кажется, существует много недоразумений относительно того, что на самом деле представляет собой H.264 (с точкой). Итак, цитата из Википедии :

H.264 / MPEG-4 Part 10 или AVC (Advanced Video Coding) является стандартом для сжатия видео , и в настоящее время один из наиболее часто используемых форматов [...]

Здесь важно отметить, что это только стандарт . Это означает, что видео фактически кодируется не с помощью H.264, а с помощью кодека, соответствующего стандарту H.264. Одним из наиболее распространенных является x264 ( строчный x, без точки):

x264 - это бесплатная программная библиотека для кодирования видеопотоков в формат H.264 / MPEG-4 AVC.
[...]
x264 реализует большое количество функций по сравнению с другими кодерами H.264.

Итак, H.264 является своего рода интерфейсом, а x264 является реализацией (с реальной функциональностью) этого интерфейса.

Таким образом, Pi будет нормально воспроизводить файлы в формате x264.


Тогда почему некоторые файлы в кодировке x264 не воспроизводятся плавно, а останавливаются каждые 4-6 секунд (в зависимости от количества GPU-Ram)?

В большинстве случаев это звук . Поскольку x264 является кодировщиком для видеофайлов HD, большинство этих файлов снабжены цифровой высококачественной звуковой дорожкой, в которой используется кодек DTS .

Pi (на данный момент) не способен аппаратно декодировать DTS-трек, и его процессор недостаточно мощный. На официальных форумах обсуждается этот вопрос, который стоит посмотреть.

Чтобы узнать, так ли это для вас, вы можете использовать mediainfo-tool (должен быть установлен, имена пакетов зависят от вашего дистрибутива):

[tv@raspberry]$ mediainfo some_random_movie.mkv 
# Shortened output!
Audio #2
ID                                       : 3
Format                                   : DTS
Format/Info                              : Digital Theater Systems
Codec ID                                 : A_DTS

Теперь у вас есть два варианта:

  1. Купите DTS-совместимый приемник (может, ваш телевизор тоже может это сделать?) И включите «сквозной» (последний пункт) в Xbmc (или любом другом плеере, который вы используете).
  2. Конвертируйте DTS-треки в AC3, который можно передавать (быстрее) или декодировать ЦП.

Чтобы выяснить, на что способен ваш ресивер (то, к чему вы подключили HDMI-кабель), используйте параметр tvservice-tool (которого нет в PATH, поэтому вам потребуется полный путь):

[tv@raspberry ~]$ /opt/vc/bin/tvservice -a
     PCM supported: Max channels: 2, Max samplerate:  48kHz, Max samplesize 24 bits.
     AC3 supported: Max channels: 6, Max samplerate:  48kHz, Max rate  640 kb/s.

Как вы можете видеть, мой текущий приемник способен декодировать PCM и AC3 (не DTS).

Мое решение этой проблемы состоит в том, чтобы преобразовать Аудио-Треки, которые являются DTS к AC3. Вот небольшая строчка, которая преобразует все аудиопотоки в infile.mkvAC3 и не касается видео:

ffmpeg :

ffmpeg -i infile.mkv -map 0 -codec:v copy -codec:s copy -codec:a ac3 outfile.mkv

avconv :

avconv -i infile.mkv -map 0 -vcodec copy -acodec ac3 -ab 256k outfile.mkv

Примечание. Приведенная выше команда также устанавливает битрейт для результирующего AC3-кодированного аудиопотока (что кажется необходимым). Хотя 256 кбит / с достаточно хороши (большинство DVD используют 192 кбит / с), вы можете захотеть увеличить или уменьшить его.

К счастью, это займет всего около 5 минут (конечно, в зависимости от вашего оборудования). В качестве небольшого бонуса, ваш файл становится меньше, и если вы не аудиофил , вы не услышите разницу.


Тем не менее, фильмы 1080p FullHD заикаются , экран гаснет на несколько секунд без звука, но воспроизведение видео продолжается. Фильм H.264, закодированный в контейнере MKV с дорожками AC3. В чем проблема?

Скорее всего, нет ничего плохого в файле фильма, но с вашими настройками Xbmc. В моем случае проблема заключалась в «частоте обновления» Xbmc . Это установлено на 60 Гц по умолчанию. Для 720p и любых других небольших видеофайлов это, похоже, не проблема для Pi, но файлы 1080p приводят к вышеуказанной проблеме.

Уменьшите частоту обновления до значения менее 60 Гц (для фильмов достаточно 24 Гц). Здесь есть два варианта:

  1. Глобальный Xbmc (включая сам Xbmc): System -> Settings -> System -> Video output -> Refresh rate
  2. Только фильмы (определяется по видео-файлу): System -> Settings -> Video -> Playback -> Adjust display refresh rate to match video

После снижения частоты обновления фильмы в формате 1080p также должны воспроизводиться очень хорошо.

Лукас Кнут
источник
7
Очень возможно лучший ответ на RaspberryPi.stackexchange.com.
Винсент П
О, также я вижу, что ffmpeg даже доступен для RPI. sudo apt-get install ffmpeg, Вы пробовали это на RPI? Это хорошо работает?
Винсент П
3
@ Рафаэль нет, это не так: stackoverflow.com/a/9477756/717341
Лукас Кнут
1
@ Рафаэль, это зависит от твоего дистрибутива. В ArchLinux я не вижу этой проблемы.
Лукас Кнут
1
@LukasKnuth хороший ответ, кроме ffmpegкак не умаляется. avconvэто вилка.
17