2012-11-28 6 views
3

ffmpeg를 사용하여 비디오 정보를 가져 왔습니다. 출력은컨테이너와 코덱의 타임베이스가 다른 이유는 무엇입니까?

Duration: 00:05:57.00, start: 0.000000, bitrate: 611 kb/s Stream #0:0(und): Video: h264 (High) (avc1/0x31637661), yuv420p, 808x610, 609 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc 

기본 든에 사용되는 시간이다 오른쪽 디코딩 프레임을 표시 할 때 계산 (이것은 내 또 다른 질문도)? 따라서 시간 기준이 사용되는 컨테이너 (12800) 또는 코덱 (50)입니까?

또 다른 질문은 왜 tbn = 12800이 아니라 90000입니까?

답변

6

모두 정확하다. 둘 다 다르다.

tbn은 스트림을 만드는 인코더의 함수이다. 따라서 10fps 스트림의 경우 90000이 될 수 있습니다. 이는 90000 틱 초를 의미하며 프레임 당 9000 틱을 제공합니다. 그것은 또한 10 일 수 있으며, 이것은 1 프레임 당 1 틱을 의미합니다 (동일한 10 fps 스트림의 경우). 90000은 스트리밍 레벨에서 일반적으로 사용되며 (스트리밍이 마음에 듭니다) 인코더는 이에 구애받지 않습니다. 이 (tbn)은 컨테이너 데이터를 사용하는 응용 프로그램 시스템이 아니라 디코더가 사용할 것입니다.

컨테이너가있는 경우 컨테이너의 모든 스트림에서 표준화되었으므로 컨테이너 타임베이스 및 타임 스탬프를 사용해야합니다. 코덱 디코더 내에서만 tbn과 같은 매개 변수를 사용합니다.

+0

"프레임 당 진드기"는 무엇을 의미합니까? 코덱이 사용하게 될 내용은 무엇입니까? – theateist

+2

코덱 디코더는 프레임 간의 시간 지연을 알기 위해 코덱 디코더를 사용합니다. 일부 코덱에서는 모션 벡터 스케일링에 사용됩니다. 코덱 내부에서 작업하지 않는다면 몇 초의 프레임을 추적하는 간단한 방법이라는 것을 알아야합니다. 따라서 29.97fps를 달성하려면 1 초당 틱이 30000 개이고 프레임이 1001 틱씩 떨어져 있어야합니다. 틱은 상상입니다. 따라서 프레임 당 타임 스탬프는 프레임 당 1001 씩 증가합니다. 코덱 내부에서 작업하지 않는다면 걱정할 필요가 없습니다. 시스템에 대한 컨테이너 데이터를 사용하십시오. – av501