ffmpeg编程查看视频文件信息

简介: ffmpeg编程查看视频文件信息

效果如下

执行效果打印日志

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     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    title           : BigBuckBunny_115k.mov
    encoder         : Lavf58.76.100
  Duration: 00:05:52.96, bitrate: N/A
    Stream #0:0(und): Video: h264 (avc1 / 0x31637661), none, 240x160, 87 kb/s, 23.88 fps, 24 tbr, 90k tbn (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #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 <stdio.h>
#include <fcntl.h>
#define BUFFSIZE 1024
int main()
{
    int ret = 0;
    FILE *file;
    char buf[BUFFSIZE];
    char *fileName = "./info.txt";
    //open file
    file = fopen(fileName,"r");
    //read file
    fread(buf, BUFFSIZE+1, 1, file);
    printf("%s\n", buf);
    //close file
    fclose(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三生三世十里桃花123456
zh@zh-lpc:~/project/unixapi$

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

ffmpeg_read_media_info.c:

/**
 * use ffmpeg codeing read flow file info
 **/
#include <stdio.h>
#include <libavutil/log.h>
#include <libavformat/avformat.h>
int main(int argc, char *argv[])
{
    int ret = 0;
    const char* fileName = "";
    AVFormatContext *ac =  NULL;
    //set log level
    av_log_set_level(AV_LOG_INFO);
    //diff params = 2 is params != 2
    if(argc != 2)
    {
        av_log(NULL,AV_LOG_WARNING,"params not enough. \n\n");
        return -1;
    }
    //file name 
    fileName = argv[1];
    //open video file
    ret = avformat_open_input(&ac,fileName,NULL,NULL);
    //diff open success or error
    if(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 flow
    avformat_close_input(&ac);
    return 0;    
}

编译:

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

执行

zh@zh-lpc:~/project/ffmpeg$ ls -l test.mp4
-rwx------ 1 zh zh 5431627 9月  10 23:05 test.mp4
zh@zh-lpc:~/project/ffmpeg$
zh@zh-lpc:~/project/ffmpeg$ ls -l frmi
-rwxrwxr-x 1 zh zh 65152 9月  16 22:00 frmi
zh@zh-lpc:~/project/ffmpeg$
zh@zh-lpc:~/project/ffmpeg$ ls -l ffmpeg_read_media_info.c
-rwx------ 1 zh zh 955 9月  16 22:02 ffmpeg_read_media_info.c
zh@zh-lpc:~/project/ffmpeg$
zh@zh-lpc:~/project/ffmpeg$
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     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    title           : BigBuckBunny_115k.mov
    encoder         : Lavf58.76.100
  Duration: 00:05:52.96, bitrate: N/A
    Stream #0:0(und): Video: h264 (avc1 / 0x31637661), none, 240x160, 87 kb/s, 23.88 fps, 24 tbr, 90k tbn (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 12000 Hz, 2 channels, 32 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
zh@zh-lpc:~/project/ffmpeg$
目录
相关文章
|
1月前
|
缓存 监控 计算机视觉
视频监控笔记(三):opencv结合ffmpeg获取rtsp摄像头相关信息
本文介绍了如何使用OpenCV结合FFmpeg获取RTSP摄像头信息,包括网络架构、视频监控系统组成、以及如何读取和显示网络摄像头视频流。
41 1
|
1月前
|
Android开发 开发者
FFmpeg开发笔记(五十七)使用Media3的Transformer加工视频文件
谷歌推出的Transformer,作为Jetpack Media3架构的一部分,助力开发者实现音视频格式转换与编辑。Media3简化了媒体处理流程,提升了定制性和可靠性。Transformer可用于剪辑、添加滤镜等操作,其示例代码可在指定GitHub仓库中找到。要使用Transformer,需在`build.gradle`中添加相关依赖,并按文档编写处理逻辑,最终完成音视频转换任务。具体步骤包括配置剪辑参数、设置空间效果以及监听转换事件等。
51 0
FFmpeg开发笔记(五十七)使用Media3的Transformer加工视频文件
|
6月前
|
存储 编解码 缓存
FFmpeg编程入门
FFmpeg编程入门
82 1
|
6月前
|
编解码 API 开发工具
FFmpeg获取音视频流信息
FFmpeg获取音视频流信息
137 1
FFmpeg获取音视频流信息
|
6月前
|
编解码 算法 计算机视觉
轻松掌握FFmpeg编程:从架构到实践
轻松掌握FFmpeg编程:从架构到实践
656 1
|
6月前
|
存储 算法 前端开发
深入理解FFmpeg音视频编程:处理封装、解码、播放 队列与回放策略
深入理解FFmpeg音视频编程:处理封装、解码、播放 队列与回放策略
252 0
|
6月前
|
存储 编解码 索引
FFmpeg代码编程获取视频信息
FFmpeg代码编程获取视频信息
379 0
|
6月前
|
C语言 C++
ffmpeg解码之使用C语言打印音视频信息
ffmpeg解码之使用C语言打印音视频信息
104 0
|
存储 编解码
ffmpeg解码提取帧RGB格式信息
使用ffmpeg和qt实现播放视频功能
309 0