FFmpeg获取媒体文件的视频信息

视频包标志位

代码

c 复制代码
printf("index:%d\n", in_stream->index);

结果

复制代码
index:0

视频帧率

c 复制代码
// avg_frame_rate: 视频帧率,单位为fps,表示每秒出现多少帧
printf("fps:%lffps\n", av_q2d(in_stream->avg_frame_rate));

结果

复制代码
fps:29.970070fps

视频编解码器

代码

c 复制代码
if (AV_CODEC_ID_MPEG4 == in_stream->codecpar->codec_id) //视频压缩编码格式
{
    printf("video codec:MPEG4\n");
}
else if (AV_CODEC_ID_H264 == in_stream->codecpar->codec_id) //视频压缩编码格式
{
    printf("video codec:H264\n");
}
else
{
    printf("video codec_id:%d\n", in_stream->codecpar->codec_id);
}

结果

复制代码
video codec:H264

视频帧宽高

代码

c 复制代码
// 视频帧宽度和帧高度
printf("width:%d height:%d\n", in_stream->codecpar->width,
in_stream->codecpar->height);

结果

复制代码
width:852 height:480

视频长度

代码

c 复制代码
//视频总时长,单位为秒。注意如果把单位放大为毫秒或者微妙,音频总时长跟视频总时长不一定相等的
if(in_stream->duration != AV_NOPTS_VALUE)
{
    int duration_video = (in_stream->duration) * av_q2d(in_stream->time_base);
    printf("video duration: %02d:%02d:%02d\n",
           duration_video / 3600,
           (duration_video % 3600) / 60,
           (duration_video % 60)); //将视频总时长转换为时分秒的格式打印到控制台上
}
else
{
    printf("video duration unknown\n");
}

结果

复制代码
video duration: 00:05:17

完整代码

c 复制代码
for (uint32_t i = 0; i < ifmt_ctx->nb_streams; i++)
{
    AVStream *in_stream = ifmt_ctx->streams[i];// 音频流、视频流、字幕流
    //如果是音频流,则打印音频的信息
    if (AVMEDIA_TYPE_AUDIO == in_stream->codecpar->codec_type)
    {...}
    else if (AVMEDIA_TYPE_VIDEO == in_stream->codecpar->codec_type)  //如果是视频流,则打印视频的信息
    {
        printf("----- Video info:\n");
        printf("index:%d\n", in_stream->index);
        // avg_frame_rate: 视频帧率,单位为fps,表示每秒出现多少帧
        printf("fps:%lffps\n", av_q2d(in_stream->avg_frame_rate));
        if (AV_CODEC_ID_MPEG4 == in_stream->codecpar->codec_id) //视频压缩编码格式
        {
            printf("video codec:MPEG4\n");
        }
        else if (AV_CODEC_ID_H264 == in_stream->codecpar->codec_id) //视频压缩编码格式
        {
            printf("video codec:H264\n");
        }
        else
        {
            printf("video codec_id:%d\n", in_stream->codecpar->codec_id);
        }
        // 视频帧宽度和帧高度
        printf("width:%d height:%d\n", in_stream->codecpar->width,
               in_stream->codecpar->height);
        //视频总时长,单位为秒。注意如果把单位放大为毫秒或者微妙,音频总时长跟视频总时长不一定相等的
        if(in_stream->duration != AV_NOPTS_VALUE)
        {
            int duration_video = (in_stream->duration) * av_q2d(in_stream->time_base);
            printf("video duration: %02d:%02d:%02d\n",
                   duration_video / 3600,
                   (duration_video % 3600) / 60,
                   (duration_video % 60)); //将视频总时长转换为时分秒的格式打印到控制台上
        }
        else
        {
            printf("video duration unknown");
        }

        printf("\n");
        videoindex = i;
    }
}

结果

复制代码
----- Video info:
index:0
fps:29.970070fps
video codec:H264
width:852 height:480
video duration: 00:05:17
相关推荐
hjjdebug1 小时前
ffplay6 播放器关键技术点分析 1/2
c++·ffmpeg·音视频
_pengliang3 小时前
WebRTC 双向视频通话
音视频·webrtc
开开心心_Every4 小时前
全能视频处理工具介绍说明
开发语言·人工智能·django·pdf·flask·c#·音视频
沐尘而生10 小时前
【AI智能体】智能音视频-硬件设备基于 WebSocket 实现语音交互
大数据·人工智能·websocket·机器学习·ai作画·音视频·娱乐
nightunderblackcat12 小时前
进阶向:Python音频录制与分析系统详解,从原理到实践
开发语言·python·音视频
Antonio9151 天前
【音视频】HLS简介与服务器搭建
运维·服务器·音视频
开发者工具分享1 天前
文本音频违规识别工具排行榜(12选)
人工智能·音视频
开开心心_Every1 天前
便捷的Office批量转PDF工具
开发语言·人工智能·r语言·pdf·c#·音视频·symfony
karmueo462 天前
视频序列和射频信号多模态融合算法Fusion-Vital解读
算法·音视频·多模态
昨日之日20062 天前
Video Background Remover V3版 - AI视频一键抠像/视频换背景 支持50系显卡 一键整合包下载
人工智能·音视频