Кажется, существует много недоразумений относительно того, что на самом деле представляет собой 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
Теперь у вас есть два варианта:
- Купите DTS-совместимый приемник (может, ваш телевизор тоже может это сделать?) И включите «сквозной» (последний пункт) в Xbmc (или любом другом плеере, который вы используете).
- Конвертируйте 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.mkv
AC3 и не касается видео:
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 Гц). Здесь есть два варианта:
- Глобальный Xbmc (включая сам Xbmc):
System -> Settings -> System -> Video output -> Refresh rate
- Только фильмы (определяется по видео-файлу):
System -> Settings -> Video -> Playback -> Adjust display refresh rate to match video
После снижения частоты обновления фильмы в формате 1080p также должны воспроизводиться очень хорошо.