2012-04-06 1 views
3

저는 비디오 처리 작업을하고 있는데 해결해야 할 문제 중 하나는 전체 비디오 전체에 단 하나의 정적 이미지가있는 비디오에 적합한 인코딩 알고리즘을 선택하는 것입니다.정적 이미지 및 사운드가 하나 뿐인 비디오에 사용해야하는 비디오 인코딩 알고리즘은 무엇입니까?

현재 DivX 및 XviD와 같은 여러 알고리즘을 시도했지만 1 분 길이의 비디오에 대해 3MB 비디오를 생성합니다. 오디오는 64kbit/s mp3이므로 오디오는 480KB 밖에 걸리지 않습니다. 그래서 비디오는 2.5MB입니다!

비디오의 이미지가 변경되지 않으므로 모션이 없으므로 실제로 압축 할 수 있습니다. 이미지 크기 자체 (jpg)는 단지 50KB입니다.

이상적으로이 비디오는 약 550KB - 600KB가 아닌 3MB가 될 것으로 기대합니다.

동영상을 최적화 할 수있는 방법에 대한 아이디어가 너무 많지 않으십니까?

이 질문을하는 데 올바른 스택 교환 포럼이되기를 바랍니다.

+1

아마도 초당 프레임 수나 비트 전송률을 매우 낮게 설정할 수 있습니다. 또는 키 프레임이있는 압축 체계가있을 수 있습니다.이 중 두 가지를 제외하고 모두 제거 할 수 있습니다 (시작과 끝). – ninjagecko

+0

이것은 프로그래밍 질문이 아닙니다. –

+0

@ninjagecko 비트 전송률을 매우 낮게 설정하면 비디오의 이미지도 매우 낮은 화질을 얻습니다. 나는 비디오를 위해 300kbit/s로 정했다. 초당 프레임에 대해 좋은 생각! 지금 바로 실험 해 보도록하겠습니다. (비록 그것이 어떻게 오디오와 함께 작동할지 모르겠다.) – bodacydo

답변

2

초당 프레임 수를 매우 낮게 설정하십시오. 가능한 경우 1fps보다 낮습니다. 목표는 가능한 한 두 개의 키 프레임 (처음에는 하나, 마지막에는 하나)에 가깝게하는 것입니다.

사용 여부는 사용중인 구성표/코덱 및 인코더에 따라 다릅니다.

많은 코덱에는 키 프레임 관련 옵션이 있습니다. (250) 또는 하나의 키 프레임을 10 초마다 : - :

lavc (위해 libavcodec) : 프레임 (디폴트의 키 프레임 사이의 최대 간격

keyint = < 0-300이> 예를 들어, 여기에 몇 가지 오픈 소스 인코더입니다 동영상이 25fps 인 경우

MPEG-4의 권장 기본값입니다. 대부분의 코덱은 불일치 오류의 누적을 제한하기 위해 정기적 인 키 프레임을 필요로합니다. 탐색은 키 프레임에만 가능하므로 키 프레임도 필요하지만 키 프레임에는 다른 프레임보다 많은 공간이 필요하므로 여기에서 숫자가 클수록 파일 크기는 약간 작지만 정확성은 떨어집니다. 0은 모든 프레임을 키 프레임으로 만드는 1과 같습니다. 값> 300은 디코더, 인코더 및 행운에 따라 품질이 좋지 않을 수 있으므로 권장하지 않습니다. MPEG-1/2가 값 < = 30을 사용하는 것이 일반적입니다.

xvidenc :

max_key_interval = - 키 프레임 사이의 최대 간격 (기본값 : 10 * FPS) 당신이 그렇게

는 흥미롭게도,이 솔루션은 파일 추구 할 수있는 능력을 감소시킬 수있다 그걸 시험하고 싶을거야.

+0

환상적인 ninjagecko입니다. 나는 FPS가 분수 일 수 있다는 것을 몰랐다. 나는 그들이 단지 정수 일 수 있다고 생각했다. 저는 0.1 정도의 낮은 값을 시도하고 있습니다! – bodacydo

+0

나는 비디오 당 750KB에 이른다! – bodacydo

0

이 문제는 비디오 인코딩 표준 자체가 아니라 비디오 인코더 구현과 관련이 있다고 생각합니다.

실제로 대부분의 비디오 인코더 구현은 정적 이미지의 비디오 용으로 설계되지 않았으므로 정적 이미지의 비디오가 입력되었을 때 상상했던 것처럼 완벽한 비트 스트림을 생성하지는 못합니다. 대부분의 비디오 인코더 구현은 "자연스러운"비디오를 처리하도록 설계되었습니다.

당신이 정말로 정적 이미지의 비디오를위한 더 나은 인코딩 결과를해야하는 경우, 오픈 소스 비디오 인코더에 해킹을에 2 프레임에서, "건너 뛰기"모든 매크로 블럭 '을 표시 할 수 있습니다 ...

+0

MB는 무엇입니까?() – bodacydo

+0

MB는 MacroBlock을 의미합니다. MacroBlock은 일반적으로 16x16 스퀘어입니다. 비디오 인코더는 입력 이미지를 MB로 분할 한 다음 하나씩 처리합니다. – ciphor