H.264와 x264의 차이점과 재생 방법


23

면책 조항 : 이것은 실제 질문이 아니라 "지식을 공유하십시오, Q & A 스타일"

그래서, 나는 내 Raspberry Pi에서 Xbmc를 실행 중이며 실제로 재생할 수있는 것과 그렇지 않은 것을 이해하는 데 어려움을 겪고 있습니다.

RPi가 H.264로 인코딩 된 비디오를 재생할 수 있지만 x264로 인코딩 된 비디오 만 찾을 수 있다고 읽었습니다 . 저것도 작동할까요? 그렇다면 왜 일부 파일이 작동 하지 않습니까?

답변:


41

H.264 (도트 포함)가 실제로 무엇인지에 대해 많은 오해가있는 것 같습니다. 따라서 Wikipedia 에서 인용하면 :

H.264 / MPEG-4 파트 10 AVC는 (고급 비디오 코딩)이다 표준 비디오 압축을위한 , 현재 가장 일반적으로 사용되는 포맷 중 하나 인 [...]

여기서 늘리는 중요한 부분은 단지 표준 이라는 입니다. 즉, 비디오는 실제로 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 트랙을 하드웨어 디코딩 할 수 없으며 CPU가 충분히 강력하지 않습니다. 공식 포럼에서 이에 대한 토론이 있습니다.

이 경우에 해당하는지 확인하려면 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 가능 수신기 (TV도 가능할까요? )를 구입하고 Xbmc (또는 사용중인 플레이어)에서 "통과" (마지막 지점)를 활성화하십시오.
  2. DTS- 트랙을 AC3으로 변환하십시오. AC3는 통과 (보다 빠름) 또는 CPU 디코딩이 가능합니다.

수신기 (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 인코딩 오디오 스트림 비트 전송률 도 설정합니다(필요한 것 같습니다). 256kbps가 적당하지만 (대부분의 DVD는 192kbps를 사용합니다), 증가 / 감소를 원할 수 있습니다.

운 좋게도 하드웨어에 따라 5 분 정도 걸립니다 (물론 하드웨어에 따라 다름). 약간의 보너스로 파일이 작아지고 Audiophile 가 아닌 경우 차이를 듣지 못합니다.


여전히 1080p FullHD 동영상이 끊기고 소리가 들리지 않고 화면이 몇 초 동안 검게 변하지 만 비디오 재생은 계속되는 것 같습니다. 영화는 AC3 트랙이있는 MKV 컨테이너에 H.264로 인코딩되어 있습니다. 무엇이 문제입니까?

영화 파일에는 문제가 없지만 Xbmc 설정에는 문제가 없을 수 있습니다. 필자의 경우 문제는 Xbmc의 "새로 고침 빈도"였습니다 . 기본적으로 60Hz로 설정되어 있습니다. 720p 및 기타 작은 비디오 파일의 경우 Pi에 문제가없는 것으로 보이지만 1080p 파일로 인해 위의 문제가 발생합니다.

화면 주사율을 60Hz 미만으로 낮추십시오 (동영상에는 24Hz 이상이면 충분합니다). 여기에는 두 가지 옵션이 있습니다.

  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에 대한 최상의 답변입니다.
Vincent P

또한 ffmpeg는 RPI에서도 사용할 수 있습니다. sudo apt-get install ffmpeg. RPI에서 이것을 시도 했습니까? 잘 작동합니까?
Vincent P

3
@Raphael 아니오, 아닙니다 : stackoverflow.com/a/9477756/717341
Lukas Knuth

1
@Raphael 그것은 당신의 배포판에 달려 있습니다. ArchLinux에서는이 문제가 보이지 않습니다.
루카스 크 누스

1
@LukasKnuth 좋은 답변을 제외하고 ffmpeg는 deprected되지 않습니다. avconv포크입니다.
aergistal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.