2016-06-28 11 views
0

표준 ffmpeg 트랜스 코더 예제를 기반으로 ffmpeg 라이브러리를 사용하여 프로그램을 작성합니다. 필자의 목표는 적합한 비디오 (즉, 어떤 ffmpeg를 읽을 수 있는지)를 WEBM 형식으로 인코딩하는 비디오 트랜스 코더를 만드는 것입니다. 문제는 출력 비디오 품질 및 기타 매개 변수를 제어하기 위해 VP8 인코더에 옵션을 전달하는 방법입니다. C++ 코드를 통해 이러한 옵션을 전달하는 것을 의미합니다.ffmpeg 기반 프로그램에서 프로그래밍 방식으로 VP8 인코더 옵션을 전달하는 방법

답변

1

다음 코드를 사용합니다

AVDictionary *options = NULL; 
AVCodec *codec = avcodec_find_encoder(AVCODEC_ID_VP8); 
AVCodecContext *ctx = avcodec_alloc_context3(codec); 

av_dict_set(&options, "option", "value", 0); 

int res = avcodec_open2(ctx, codec, &options); 
if (res < 0) 
    error(); 

while (..) { 
    res = avcodec_encode_video2(ctx, ..); 
    if (res < 0) 
     error(); 
} 

avcodec_close(ctx); 
avcodec_free_context(ctx); 

관련 "옵션을"/ "값"쌍은 예로부터 VP8 인코딩 가이드에서 얻을 것이 무엇 있습니다 FFmpeg 위키. 예를 들어, 사용, 1 Mbps의 비트 레이트 (위키 첫 번째 예)를 설정 :

av_dict_set_int(&options, "b", 1024 * 1024, 0); 

또는

av_dict_set(&options, "b", "1M", 0); 

내가 대신 VP8의 VP9을 사용하는 것이 좋습니다, 당신은 좋은 품질을받지 않습니다 VP8과 함께,하지만 그것은 분명히 당신의 선택입니다.

+0

감사합니다.이 도움이되었습니다. –