Parece haver muitos mal-entendidos sobre o que realmente é o H.264 (com um ponto). Então, citando da Wikipedia :
H.264 / MPEG-4 Part 10 ou AVC (Advanced Video Coding) é um padrão para compactação de vídeo e atualmente é um dos formatos mais usados [...]
A parte importante a ser destacada aqui é que é apenas um padrão . Isso significa que os vídeos não são realmente codificados com o H.264, mas com um codec que atenda ao padrão H.264. Um dos mais comuns é x264 (x minúsculo, sem ponto):
x264 é uma biblioteca de software livre para codificação de fluxos de vídeo no formato AVC H.264 / MPEG-4.
[...]
x264 implementa um grande número de recursos em comparação com outros codificadores H.264.
Portanto, o H.264 é uma espécie de interface e x264 é uma implementação (com a funcionalidade real) dessa interface.
Portanto, o Pi reproduzirá arquivos codificados x264 muito bem.
Então por que alguns arquivos x264 codificado não jogar sem problemas, mas parar a cada 4-6 segundos (dependendo da quantidade de GPU-Ram)?
Na maioria das vezes, é o som . Como o x264 é um codificador para arquivos de vídeo HD, a maioria desses arquivos vem com uma trilha sonora digital de alta qualidade, que usa o codec DTS .
O Pi (no momento) não é capaz de decodificar por hardware a trilha DTS e sua CPU não é poderosa o suficiente. Há uma discussão sobre isso nos fóruns oficiais, que vale a pena examinar.
Para descobrir se esse é o seu caso, você pode usar a mediainfo
ferramenta - (deve ser instalada, os nomes dos pacotes dependem da sua distribuição):
[tv@raspberry]$ mediainfo some_random_movie.mkv
# Shortened output!
Audio #2
ID : 3
Format : DTS
Format/Info : Digital Theater Systems
Codec ID : A_DTS
Agora você tem duas opções:
- Compre um receptor compatível com DTS (talvez sua TV também faça isso?) E ative o "pass-through" (último ponto) no Xbmc (ou qualquer outro player que você esteja usando).
- Converta as trilhas DTS em AC3, que podem ser passadas (mais rapidamente) ou decodificadas pela CPU.
Para descobrir do que o seu receptor (o que você conectou no cabo HDMI) é capaz, use a tvservice
ferramenta-(que não está no CAMINHO, para que você precise do caminho completo):
[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.
Como você pode ver, meu receptor atual é capaz de decodificar PCM e AC3 (não DTS).
Minha solução para esse problema é converter as trilhas de áudio DTS para AC3. Aqui está um pequeno liner que converte todos os fluxos de áudio no infile.mkv
AC3 e não toca no vídeo:
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
Nota: O comando acima também define a taxa de bits para o fluxo de áudio codificado em AC3 resultante (o que é necessário, ao que parece). Embora 256kbps seja razoavelmente bom (a maioria dos DVDs usa 192kbps), você pode querer aumentar / diminuir.
Felizmente, isso leva apenas cerca de 5 minutos (dependendo do seu hardware, é claro). Como um pequeno bônus, seu arquivo fica menor e, se você não for um audiófilo , não ouvirá diferença.
Ainda assim, os filmes em FullHD 1080p são gagos , a tela fica preta por alguns segundos sem som, mas a reprodução do vídeo parece continuar. O filme é codificado em H.264 em um contêiner MKV com faixas AC3. Qual é o problema?
Provavelmente, não há nada de errado com o arquivo de filme, mas com as configurações do Xbmc. No meu caso, o problema era a "taxa de atualização" do Xbmc . Isso é definido como 60Hz por padrão. Para 720p e quaisquer outros arquivos de vídeo pequenos, isso parece não ser um problema para o Pi, mas os arquivos 1080p resultam no problema acima.
Reduza a taxa de atualização para algo abaixo de 60Hz (pelo menos 24Hz são suficientes para filmes). Existem duas opções aqui:
- Xbmc global (incluindo o próprio Xbmc):
System -> Settings -> System -> Video output -> Refresh rate
- Somente filmes (determinados pelo arquivo de vídeo):
System -> Settings -> Video -> Playback -> Adjust display refresh rate to match video
Depois de diminuir a taxa de atualização, os filmes em 1080p também devem ser reproduzidos corretamente.