热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ffmpeg编程查看视频文件信息

效果如下执行效果打印日志zhzh-lpc:~projectffmpeg$.frmitest.mp4opentest.mp4success.Input#0,mov,mp4,m4a

效果如下

在这里插入图片描述


执行效果打印日志

zh@zh-lpc:~/project/ffmpeg$ ./frmi test.mp4
open test.mp4 success.Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41title : BigBuckBunny_115k.movencoder : Lavf58.76.100Duration: 00:05:52.96, bitrate: N/AStream #0:0(und): Video: h264 (avc1 / 0x31637661), none, 240x160, 87 kb/s, 23.88 fps, 24 tbr, 90k tbn (default)Metadata:handler_name : VideoHandlerStream #0:1(und): Audio: aac (mp4a / 0x6134706D), 12000 Hz, 2 channels, 32 kb/s (default)Metadata:handler_name : SoundHandler
zh@zh-lpc:~/project/ffmpeg$

简单分析


在真正实操之前,我们先来分析一下,我们正常使用C语言读取一个文件都需要哪些步骤:

  • 1、打开文件;
  • 2、读取文件信息;
  • 3、关闭文件。

一般就是:open --> read --> close三步走。那么在ffmpeg中至少也需要这三步。



Linux中原始读取文件的小实验

1、创建一个文件

zh@zh-lpc:~/project/unixapi$ echo "aaaaa三生三世十里桃花123456" > info.txt

2、创建C语言编程文件

#include
#include #define BUFFSIZE 1024int main()
{int ret = 0;FILE *file;char buf[BUFFSIZE];char *fileName = "./info.txt";//open filefile = fopen(fileName,"r");//read filefread(buf, BUFFSIZE+1, 1, file);printf("%s\n", buf);//close filefclose(file);return 0;
}

3、编译

zh@zh-lpc:~/project/unixapi$ make unix_file
cc unix_file.c -o unix_file
zh@zh-lpc:~/project/unixapi$

4、执行

zh@zh-lpc:~/project/unixapi$ ./unix_file
aaaaa三生三世十里桃花123456zh@zh-lpc:~/project/unixapi$

ffmpeg读取视频文件信息—代码

ffmpeg_read_media_info.c:

/*** use ffmpeg codeing read flow file info**/
#include
#include
#include int main(int argc, char *argv[])
{int ret &#61; 0;const char* fileName &#61; "";AVFormatContext *ac &#61; NULL;//set log levelav_log_set_level(AV_LOG_INFO);//diff params &#61; 2 is params !&#61; 2if(argc !&#61; 2){av_log(NULL,AV_LOG_WARNING,"params not enough. \n\n");return -1;}//file name fileName &#61; argv[1];//open video fileret &#61; avformat_open_input(&ac,fileName,NULL,NULL);//diff open success or errorif(ret < 0){av_log(NULL,AV_LOG_ERROR,"open %s error. \n\n",fileName);return -1;}else{av_log(NULL,AV_LOG_INFO,"open %s success. \n\n",fileName);}av_dump_format(ac,0,fileName,0);//close file flowavformat_close_input(&ac);return 0;
}

编译&#xff1a;

gcc -g -o frmi ffmpeg_read_media_info.c -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavutil

执行

zh&#64;zh-lpc:~/project/ffmpeg$ ls -l test.mp4
-rwx------ 1 zh zh 5431627 910 23:05 test.mp4
zh&#64;zh-lpc:~/project/ffmpeg$
zh&#64;zh-lpc:~/project/ffmpeg$ ls -l frmi
-rwxrwxr-x 1 zh zh 65152 916 22:00 frmi
zh&#64;zh-lpc:~/project/ffmpeg$
zh&#64;zh-lpc:~/project/ffmpeg$ ls -l ffmpeg_read_media_info.c
-rwx------ 1 zh zh 955 916 22:02 ffmpeg_read_media_info.c
zh&#64;zh-lpc:~/project/ffmpeg$
zh&#64;zh-lpc:~/project/ffmpeg$
zh&#64;zh-lpc:~/project/ffmpeg$ ./frmi test.mp4
open test.mp4 success.Input #0, mov,mp4,m4a,3gp,3g2,mj2, from &#39;test.mp4&#39;:Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41title : BigBuckBunny_115k.movencoder : Lavf58.76.100Duration: 00:05:52.96, bitrate: N/AStream #0:0(und): Video: h264 (avc1 / 0x31637661), none, 240x160, 87 kb/s, 23.88 fps, 24 tbr, 90k tbn (default)Metadata:handler_name : VideoHandlerStream #0:1(und): Audio: aac (mp4a / 0x6134706D), 12000 Hz, 2 channels, 32 kb/s (default)Metadata:handler_name : SoundHandler
zh&#64;zh-lpc:~/project/ffmpeg$

推荐阅读
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 在分析Android的Audio系统时,我们对mpAudioPolicy->get_input进行了详细探讨,发现其背后涉及的机制相当复杂。本文将详细介绍这一过程及其背后的实现细节。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 在Kubernetes上部署多个Mitmproxy代理服务器以实现高效流量管理 ... [详细]
  • 深入RTOS实践,面对原子操作提问竟感困惑
    在实时操作系统(RTOS)的实践中,尽管已经积累了丰富的经验,但在面对原子操作的具体问题时,仍感到困惑。本文将深入探讨RTOS中的原子操作机制,分析其在多任务环境下的重要性和实现方式,并结合实际案例解析常见的问题及解决方案,帮助读者更好地理解和应用这一关键技术。 ... [详细]
  • 思科IOS XE与ISE集成实现TACACS认证配置
    本文详细介绍了如何在思科IOS XE设备上配置TACACS认证,并通过ISE(Identity Services Engine)进行用户管理和授权。配置包括网络拓扑、设备设置和ISE端的具体步骤。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 本文介绍了如何利用摄像头捕捉图像,并将捕获的图像数据保存为文件。通过详细的代码示例,展示了摄像头调用的具体实现方法,适用于多种应用场景,如安全监控、图像处理等。 ... [详细]
  • kubernetes 下实现socket.io 的集群模式
    2019独角兽企业重金招聘Python工程师标准socket.io单节点模式是很容易部署的,但是往往在生产环境一个节点不能满足业务需求,况且还要保 ... [详细]
  • prometheus09-k8s部署grafana
    1.部署grafana?apiVersion:?appsv1?kind:?StatefulSet?metadata:??name:?grafana??namespace:?kube-systemspec:??serviceName:?grafana??repl ... [详细]
  • CephPool资源池管理#查看ceph资源池cephosdlspools#创建资源池osdpoolcreate{}{rep ... [详细]
  • 开始仔细学习WPF了说是动画不流畅,可以通过设置帧率解决,查了很多,都说设置Timeline.DesiredFrameRateProperty,但都没说加到哪里,在代码很多地方加上 ... [详细]
author-avatar
I_amkaiman
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有