首页 > 其他分享 >ffmpeg-读取媒体文件信息-avformat_open_input

ffmpeg-读取媒体文件信息-avformat_open_input

时间:2024-01-28 21:14:43浏览次数:34  
标签:ffmpeg stream int 媒体文件 avformat printf ic codecpar

实例代码

Code
int video_audio_info(int argc, char *argv[])
{
	if (argc < 2) {
		printf("Usage : %s mediaFile\n", argv[0]);
		return -1;
	}
	AVFormatContext *ic = NULL;
	char path[20] = { 0 };
	strcpy(path, argv[1]);
	// 1.打开媒体文件
	int ret = avformat_open_input(&ic, path, 0, 0);
	if (ret != 0)
	{
		printf("avformat_open_input called failed:");
		return -1;
	}
	printf("avformat_open_input called success\n");
	// 2.获取流信息
	// 获取媒体文件总时长,单位为毫秒,和流的数量
	printf("before duration :%ld, nb_stream :%d\n", ic->duration, ic->nb_streams);
	if (avformat_find_stream_info(ic, 0) >= 0) {
		printf("after duration :%ld, nb_stream :%d\n", ic->duration, ic->nb_streams);
	}
	// 3.查看视频流
	int fps = 0;
	int videoStream = 0;
	int audioStream = 1;
	for (int i = 0; i < ic->nb_streams; i++) {
		AVStream *as = ic->streams[i];
		// av_find_best_stream(AVFormatContext * ic, enum AVMediaType type, int wanted_stream_nb, 
			// int related_stream, const struct AVCodec * * decoder_ret, int flags)
		if (as->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
		///// videoStream = av_find_best_stream(ic, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);
			printf("video stream.................\n");
			videoStream = i;
			//fps = (int)_r2d(as->avg_frame_rate);
			printf("width = %d, height = %d, codecid = %d, format = %d, fps = %d\n",
				as->codecpar->width,  	//视频宽度
				as->codecpar->height, 	//视频高度
				as->codecpar->codec_id,	//视频的编解码ID
				as->codecpar->format,	//视频像素格式:AVPixelFormat
				as->avg_frame_rate.num);	//帧率
		}
		// 4.查看音频流
		// audioStream = av_find_best_stream(ic, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);
		else if (as->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
			printf("audio stream.................\n");
			audioStream = i;
			printf("sample_rate = %d, channels = %d, sample_format = %d\n",
				 as->codecpar->sample_rate,	//音频采样率
				 as->codecpar->channels,	//音频声道数
				 as->codecpar->format);		//音频采样格式:AVSampleFormat
		}
	}
	// 5.关闭并释放资源
	avformat_close_input(&ic);
	return 0;
}

结果

标签:ffmpeg,stream,int,媒体文件,avformat,printf,ic,codecpar
From: https://www.cnblogs.com/starcos/p/17993330

相关文章

  • ffmpeg提取音频
    要使用FFmpeg提取音频,你需要使用以下命令行语法:ffmpeg-i输入视频文件.mp4-vn-acodeccopy输出音频文件.aac这里是命令的解释:-i输入视频文件.mp4:指定输入视频文件的路径和名称。-vn:禁用视频流。这告诉FFmpeg不要复制视频流。-acodeccopy:指定音频编解码器为拷贝(copy),这......
  • FFmpeg安装与使用
    前言ffmpeg是十分强大的视频录制及格式转换的命令行工具安装windows教程而Mac可以直接用Homebrew来安装ffmpeg:brewinstallffmpeg视频转webp比如将input.mp4转化成output.webp,并且要求:为帧率为20帧每秒,循环播放,默认渲染预设效果,分辨率为800px宽600px高......
  • FFmpeg屏幕录制(转)
    一、FFmpeg简介    FFmpeg是领先的多媒体框架,能够解码、编码、转码、混合、解密、流媒体、过滤和播放人类和机器创造的几乎所有东西。它支持最晦涩的古老格式,直到最尖端的格式。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度的便携性。FFmpeg可以......
  • ffmpeg-打开文件-avio_open_dir-avio_read_dir
    vio_open_diravio_read_dirCode#includevoiddir_function(void){ AVIOContext*ctx=NULL; //目录操作上下文 AVIODirEntry*entry=NULL; //目录项 av_log_set_level(AV_LOG_DEBUG); //设置日志等级 intret=avio_open_dir(&ctx,"./A",NULL); if(r......
  • 详解ffmpeg avcodec_encode_video2 函数报错
    详解ffmpegavcodec_encode_video2函数报错在使用FFmpeg进行视频编码时,开发者经常会使用avcodec_encode_video2函数来进行编码操作。然而,有时候会遇到该函数报错的情况,本文将详细解析这个问题及其可能的解决方法。问题描述当调用avcodec_encode_video2函数时,可能会出现以下错误信......
  • ffmpeg常用命令
    本文介绍ffmpeg的常用命令。ffmpeg是流行的音视频处理工具,国内大部分视频播放器都是基于ffmpeg开发而来,如VLC、QQ播放器等。采集音频设备ffmpeg-fdshow-iaudio="麦克飿(RealtekHighDefinitionAu"./output.ts采集摄像头ffmpeg-fdshow-ivideo="USB2.0U......
  • FFmpeg之AVFilter
    (目录)  filter,可以翻译为过滤器,滤镜。在FFmpeg中有多种多样的滤镜,你可以把他们当成一个个小工具,专门用于处理视频和音频数据,以便实现一定的目的。如overlay这个滤镜,可以将一个图画覆盖到另一个图画上transport这个滤镜可以将图画做旋转等等。一、概述  FFMPEG除了具有强大......
  • FFmpeg之AVFormat
    (目录)一、概述  avformat中实现了目前多媒体领域中的几乎所有封装格式,可以封装,可以解封装(也叫解复用),根据需求不同,所支持的也有所不同,ffmpeg能否支持一种封装格式的视频的封装与解封装,完全取决于这个库,例如mp4、flv、mkv等容器的封装与解封装;又或者RTMP、RTSP、TCP、UDP等协议......
  • opencv,ffmpeg 和 VLC的关系
    OpenCV、FFmpeg和VLC之间有着密切的关系。OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。它可以用于处理图像和视频数据。而FFmpeg是一个用于录制、转换和流媒体处理的多媒体框架,可以用于处理音频和视频文件。VLC是一个流行的开源媒体播放器,它使用了FFmpe......
  • c# 调用 ffmpeg 获取音频时长
    vararg="-i\""+filepath+"\"2";TimeSpanduration=TimeSpan.Zero;awaitFFMpeg.Xamarin.FFmpegLibrary.Run(this.BaseContext,arg,(line)=>......