ffmpeg C API를 사용하여 라이브 렌더링 비디오를 mpg 및/또는 mp4로 인코딩합니다 (이후 비디오 사용법에 따라 다름). mp4로 인코딩하면 모든 것이 잘됩니다. 그러나 mpg로 인코딩 할 때 결과 비디오는 모든 플레이어에서 재생할 수 없습니다. ffprobe를 빠르게 호출하면 헤더가 누락되었음을 알 수 있습니다. 그러나 이것은 명시 적으로 쓰고 있기 때문에 거의 불가능합니다. 헤더를 작성할 때avformat_write_header를 사용 함에도 불구하고 mpg에서 헤더가 누락되었습니다.
이// ptr->oc is the AVFormatContext
int error = avformat_write_header(ptr->oc, NULL);
if (error < 0)
{
s_logFile << "Could not write header. Error: " << error << endl;
fprintf(stderr, "Could not write header. Error: '%i'\n", error);
return 1;
}
결코 오류가 없습니다 :
이 어떤 프레임을 인코딩하기 전에 내가 헤더를 작성하는 방법입니다.
인코딩의 경우, 나는 the official muxing.c example을 따르고 있으므로 CODEC_FLAG_GLOBAL_HEADER 플래그를 설정합니다. 나는 CODEC_ID_MPEG2VIDEO (비디오 용)와 CODEC_ID_MP2 (오디오 용)를 사용합니다.
결과 mpg로이 작업을 수행 할 때 I "인코딩"그것과 같은 외부는 FFmpeg 실행에 추가 단계 : "는 FFmpeg -i ownEncoded.mpg -sameq -y working.mpg". 는 그래서 여기
가 유일한의는 FFmpeg 전에보고입니다 ... 모든 데이터가있을 경우에만 헤더는 어떤 이유로 누락 된 것 같다/헤더 기록 할 때 :mpeg -------------------
lvl: 24
msg: VBV buffer size not set, muxing may fail
하면 해당 될 수 있을까 문제?
mp4로 인코딩 할 때 qmin, qmax, me_method 등과 같은 특별한 값을 설정하는 것을 제외하고는 mp4를 정확히 동일한 인코딩으로 인코딩 할 때 여기서 무엇이 잘못 될지 궁금합니다. ffmpeg가 실제로 헤더를 올바르게 쓰도록 특수 값을 설정해야합니까?
사용중인 형식/vcodec/acodec을 지정하십시오. "mpeg"/ "mpeg1video"/ "mp2"? – pogorskiy
그것은 mpeg2video/mp2입니다. 질문에 추가 할 것입니다. – TheSHEEEP
오 마이어! 나는 CODEC_ID_MPEG2VIDEO가 제대로 설정되지 않고 오히려 H264를 사용하는 오타가 있음을 알게되었습니다. 힌트를 주셔서 감사합니다. 다시 한 번 보았습니다. :) – TheSHEEEP