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

  

Отказ от ответственности . Это не реальный вопрос, а скорее " поделиться своими знаниями, Q & A-style "

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

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

23 голоса | спросил Lukas Knuth 6 Jpm1000000pmSun, 06 Jan 2013 21:42:29 +040013 2013, 21:42:29

1 ответ


41

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

  

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

Важная часть для растягивания здесь заключается в том, что это только стандарт . Это означает, что видео на самом деле не закодировано с 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 (должен быть установлен, имена пакетов зависят от вашего дистрибутива):

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

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

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

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

[[email protected] ~]$ /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).

Мое решение этой проблемы состоит в том, чтобы преобразовать Audio-Tracks, которые являются 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 минут (в зависимости от вашего оборудования, конечно). В качестве небольшого бонуса ваш файл становится меньше, и если вы не Audiophile , вы не услышите разницы.


Тем не менее, 1080p FullHD Movies заикаются , экран становится черным в течение нескольких секунд без звука, но воспроизведение видео продолжается. Фильм 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 также должны воспроизводиться отлично.

ответил Lukas Knuth 6 Jpm1000000pmSun, 06 Jan 2013 21:42:29 +040013 2013, 21:42:29

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132