热门标签 | 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$

推荐阅读
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • Google排名优化-面向Google(Search Engine Friendly)的URL设计 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 在Ubuntu 18.04上使用Nginx搭建RTMP流媒体服务器
    本文详细介绍了如何在Ubuntu 18.04上使用Nginx和nginx-rtmp-module模块搭建RTMP流媒体服务器,包括环境搭建、配置文件修改和推流拉流操作。适用于需要搭建流媒体服务器的技术人员。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • CentOS 7 磁盘与文件系统管理指南
    本文详细介绍了磁盘的基本结构、接口类型、分区管理以及文件系统格式化等内容,并提供了实际操作步骤,帮助读者更好地理解和掌握 CentOS 7 中的磁盘与文件系统管理。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文详细介绍了MicroATX(也称Mini ATX)和MATX主板规格,探讨了它们的结构特点、应用场景及对电脑系统成本和性能的影响。同时,文章还涵盖了相关操作系统的实用技巧,如蓝牙设备图标删除、磁盘管理等。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 本文详细介绍了Java中的输入输出(IO)流,包括其基本概念、分类及应用。IO流是用于在程序和外部资源之间传输数据的一套API。根据数据流动的方向,可以分为输入流(从外部流向程序)和输出流(从程序流向外部)。此外,还涵盖了字节流和字符流的区别及其具体实现。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 树莓派摄像头配置与应用指南
    本文详细介绍了如何在树莓派上配置和使用摄像头,包括启用摄像头接口、简单的图片和视频捕捉方法以及如何通过网络实时传输视频流。 ... [详细]
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社区 版权所有