123

dlsghl92·2019년 10월 2일
0

#pragma comment(lib, "avutil.lib" )
#pragma comment(lib, "avcodec.lib" )
#pragma comment(lib, "avformat.lib" )
#pragma comment(lib, "swscale.lib" )
#pragma comment(lib, "swresample.lib" )
#pragma comment(lib, "postproc.lib" )
#pragma comment(lib, "avfilter.lib" )

extern "C" {
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libswresample/swresample.h>
#include <libswscale/swscale.h>
#include <libavutil/opt.h>
}
#include

int main()
{
av_log_set_level(AV_LOG_DEBUG);
av_log(NULL, AV_LOG_INFO, "데이터를 추출할 동영상 파일의 경로를 입력하십시오.\n");

AVFormatContext* context = NULL;

char input_data[300];
std::cin.getline(input_data, 300, '\n');
int ret = avformat_open_input(&context, input_data, NULL, NULL);

while (ret != 0)
{
	av_log(NULL, AV_LOG_ERROR, "해당 경로에 파일이 존재하지 않습니다. 다시 입력해주세요.\n");
	std::cin.getline(input_data, 300, '\n');
	ret = avformat_open_input(&context, input_data, NULL, NULL);

}

ret = avformat_find_stream_info(context, NULL);
if (ret < 0) {
	av_log(NULL, AV_LOG_ERROR, "Fail to get Stream Inform\n");
	exit(-1);
}

AVCodec* vCodec, * aCodec;
AVCodecContext* vCodecContext, * aCodecContext;
int vIndex = av_find_best_stream(context, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);
int aIndex = av_find_best_stream(context, AVMEDIA_TYPE_AUDIO, -1, vIndex, NULL, 0);

if (vIndex >= 0) {
	vCodec = avcodec_find_decoder(context->streams[vIndex]->codecpar->codec_id);
	if (vCodec == NULL)
	{
		av_log(NULL, AV_LOG_ERROR, "avcodec_find_decoder(vcodec) failed.\n");
		exit(-1);
	}

	vCodecContext = avcodec_alloc_context3(vCodec);
	if (avcodec_open2(vCodecContext, vCodec, NULL) < 0)
	{
		av_log(NULL, AV_LOG_ERROR, "avcodec_open2(vcodec) failed.\n");
		exit(-1);
	}
}

if (aIndex >= 0) {
	aCodec = avcodec_find_decoder(context->streams[aIndex]->codecpar->codec_id);
	if (aCodec == NULL)
	{
		av_log(NULL, AV_LOG_ERROR, "avcodec_find_decoder(acodec) failed.\n");
		exit(-1);
	}
	aCodecContext = avcodec_alloc_context3(aCodec);

	if (avcodec_open2(aCodecContext, aCodec, NULL) < 0)
	{
		av_log(NULL, AV_LOG_ERROR, "avcodec_open2(acodec) failed.\n");
		exit(-1);
	}
}

avformat_close_input(&context);
system("pause");
return 0;

}

profile
안녕하세요. 잘부탁드립니다.

0개의 댓글