2011-06-11 3 views
3

ffmpeg를 사용하여 비디오 파일에서 키 프레임을 읽는 C++ 프로그램을 작성하려고합니다. 지금까지 나는 av_read_frame을 사용하여 모든 프레임을 가져 왔는데 여기서 을 프레임 단위로 읽습니다.FFMPEG 키 프레임 읽기

그러나 나는 (올바른 경우) av_seek_frame을 사용하여 몇 가지 문제점을 겪고 있습니다.이 문제는 키 프레임에 대한 트릭을 수행해야합니다.

int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags); 

나는 FormatContext 가지고 있지만 모든 키 프레임을 얻을 순차적으로 다른 올바른 주장은 무엇인가?

대신 다른 기능을 사용할 수 있습니까?

감사

편집

는 : av_read_frame에서 나는 어떤 I 프레임 데이터를 얻을하는 데 사용할 수있는, AVPacket을 얻고 있지만, 어떻게 av_seek_frame를 사용하여 패킷을받을 수 있나요?

해결 방법 : AVFrame-> key_frame에는 간단한 부울 값이 있습니다. 키 프레임 일 경우 true

+0

'av_seek_frame()'에서 정확히 어떤 문제가 있습니까? – karlphillip

답변

2

av_seek_frame은 비디오 파일의 특정 타임 스탬프를 검색 할 수 있습니다. 그것은 4 개 매개 변수를 취합니다 AVFormatContext하는 스트림 인덱스타임 스탬프에 대한 포인터를 추구하고 플래그는 방향과 원하는 모드를 선택합니다.

함수는 주어진 타임 스탬프보다 먼저 첫 번째 키 프레임을 찾습니다.

Check the documentation of that function for more information.

+1

내 경험에 의하면 주어진 시간 스탬프가 지난 후 첫 번째 키 프레임을 찾습니다. 그리고 libav는 PTS가 아니라 DTS를 찾는다는 것을 명심해야합니다. –