100 줄 코드 는 ffmpeg 에서 파일 프레임 을 읽 습 니 다.
2163 단어 ffmpeg
#include
#include
using namespace std;
extern "C"
{
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
};
int main(int argc, char* argv[])
{
av_register_all();
char szfilePath[100] = {"F:\\test\\ts.ts"};
AVFormatContext *pavFormatContext = avformat_alloc_context();
int lRet = avformat_open_input(&pavFormatContext, szfilePath, NULL, NULL);
if (lRet < 0)
{
cout << "avformat_open_input fail!!!" << endl;
return 0;
}
lRet = avformat_find_stream_info(pavFormatContext, NULL);
if (lRet < 0)
{
cout << "avformat_find_stream_info fail!!!" << endl;
return 0;
}
int lVidepId = -1;
for (int i =0 ;i<= pavFormatContext->nb_streams; i++)
{
if (AVMEDIA_TYPE_VIDEO == pavFormatContext->streams[i]->codec->codec_type)
{
lVidepId = i;
if (AV_CODEC_ID_H264 == pavFormatContext->streams[i]->codec->codec_id)
{
cout << "code id is AV_CODEC_ID_H264"<< endl;
}
break;
}
}
AVCodecContext *pavCodecContest = pavFormatContext->streams[lVidepId]->codec;
AVCodec *pavCodec = avcodec_find_decoder(pavCodecContest->codec_id);
if (NULL == pavCodec)
{
cout << "avcodec_find_decoder fail!!!" << endl;
return 0;
}
lRet = avcodec_open2(pavCodecContest, pavCodec, NULL);
if (lRet < 0)
{
cout << "avformat_find_stream_info fail!!!" << endl;
return 0;
}
AVFrame *pavFrame = av_frame_alloc();
AVPacket *pavPacket = (AVPacket *)av_malloc(sizeof(AVPacket));
int count = 1;
while(1)
{
if (av_read_frame(pavFormatContext, pavPacket) < 0)
{
break;
}
else
{
if (lVidepId == pavPacket->stream_index)
{
cout<< "Write " << count <data,1, pavPacket->size, pfile);
fclose(pfile);
count ++;
}
}
}
system("pause");
return 0;
}
참고 자료:https://blog.csdn.net/leixiaohua1020/article/details/8652605
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ffmpeg로 PNG 연속 이미지를 MP4 동영상으로 변환텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.