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
相关推荐
硅谷秋水2 小时前
EgoSteer:一种基于第一人称视角视频、实现可控灵巧操作的全栈系统
深度学习·机器学习·语言模型·机器人·音视频
波罗丁牌5 小时前
uni-app 实现视频聊天、屏幕分享,支持Android、HarmonyOS、iOS
android·uni-app·音视频
不爱记笔记8 小时前
视频转PPT工具测评:通义听悟、Ai好记、讯飞听见谁更懂画面信息?
人工智能·powerpoint·音视频
2601_9616813010 小时前
河南AI短视频哪个好
音视频
WA内核拾荒者10 小时前
WhatsApp 富媒体消息(图片/视频)的发送优化与压缩策略
php·音视频·媒体
12 小时前
使用ffmpeg将mp4视频转为m3u8格式
android·ffmpeg·音视频
音视频牛哥14 小时前
WebRTC 能解决低延迟直播吗?为什么 RTSP、RTMP、GB28181 仍然不可替代?
音视频·webrtc·低延迟rtsp播放器·音视频sdk·smartmediakit·低延迟rtmp播放器·低延迟音视频
阿童木写作1 天前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
奈斯先生Vector1 天前
把 Midjourney 二次编辑做成生产系统:customId 能力令牌、Action Graph 与 WebUI 精修工作台
数据库·人工智能·架构·aigc·音视频·midjourney
林澈在路上1 天前
2026 主流 AI 写歌 APP 全面测评|零基础原创歌曲工具选购指南
大数据·人工智能·aigc·音视频·音频