ffmpegの簡単なエントリコード

#include <stdio.h>
#include <libavutil/log.h>  //Log系统
#include <libavformat/avformat.h>  //文件的删除和重命名

 

int main(int argc,char* argv[])
{

	//FFmpeg开发Log系统
	av_log_set_level(AV_LOG_DEBUG);
	av_log(NULL,AV_LOG_INFO,"hello\n");
	av_log(NULL,AV_LOG_INFO,"hello %s","world\n");


	// 文件的删除
	int ret;
	ret = avpriv_io_delete("./mytest.txt"); //参数是一个url 字符串
	if(ret<0)
	{
		av_log(NULL,AV_LOG_ERROR,"delete file failed.\n");
	}else if(ret==0)
	{
			av_log(NULL,AV_LOG_INFO,"delete file success.\n");
	}

	//重命名文件
	ret = avpriv_io_move("11.txt","22.txt");
	if(ret<0)
	{
		av_log(NULL,AV_LOG_ERROR," rename file failed.\n");
	}

	//操作目录
	/*
	函数
	avio_open_dir
	avio_read_dir
	avio_close_dir

	结构体
	AVIODirContext   操作目录的上下文
	AVIODirEntry    目录项,用于存放文件名 文件大小 等信息
	*/
// 	AVIODirContext *ctx=NULL;
// 	AVIODirEntry* entry=NULL;
// 	// 注意Windows下会返回-40,也就是Function not implement,方法未实现,也就是说windows下不支持此方法
// 	ret = avio_open_dir(&ctx,"./udp",NULL); // 上下文,访问的目录(./是当前目录)
// 	if(ret<0)
// 	{
// 		av_log(NULL,AV_LOG_ERROR," open dir failed. %s \n",av_err2str(ret)); //av_err2str 错误码整形转为字符串
// 		goto __fail;
// 	}else{
// 		//访问目录的每一项
// 		while(1)
// 		{
// 			ret = avio_read_dir(ctx,&entry);
// 			if(ret<0)
// 			{
// 				av_log(NULL,AV_LOG_ERROR," avio_read_dir failed. %s \n",av_err2str(ret));
// 			}
// 			if(!entry)  //entry为空,就是到了末尾
// 			{
// 				break;
// 			}
// 			//				PRId64 代表64位数字
// 			av_log(NULL,AV_LOG_INFO,"size=%12"PRId64" name=%s \n",entry->size,entry->name);
// 			avio_free_directory_entry(&entry);
// 		}
// 	}

// __fail:	
// 	avio_close_dir(&ctx);


	// 打印 音/视频信息
	/*
	av_register_all()   将ffmpeg所定义的编解码、协议全部注册到程序里面来
	avformat_open_input()/avformat_close_input()
	av_dump_format()     将多媒体文件中的media信息打印出来

	*/

	AVFormatContext *fmt_ctx=NULL;

	av_register_all();    //一般所有的ffmpeg程序开始都要调用
	 //第三个参数 是输入文件的格式,不填的话会根据文件格式来解析
	 //第四个参数 是通过命令行来输入参数 ,一般是NULL
	ret = avformat_open_input(&fmt_ctx,"./1.mp4",NULL,NULL);  
	if(ret<0)
	{
		av_log(NULL,AV_LOG_ERROR," open avformat failed : %s \n",av_err2str(ret));
		return -1;
	}else{
		//第二个参数是流的索引值,一般为0
		// 第四个参数指的是输入流 (0) 还是输出流( 1)
		av_dump_format(fmt_ctx,0,"./1.mp4",0);  

	}
	avformat_close_input(&fmt_ctx);


	return 0;
}

//在msys2中,要msys2_shell.cmd -mingw64 这命令打开才只可以执行程序
//gcc -g -o ffmpeglog  ffmpeglog.c -lavutil -lavformat -I/usr/local/include -L/usr/local/lib

 

おすすめ

転載: blog.csdn.net/m0_37981386/article/details/115315565