[SOS]ffmpeg的问题

小菜_默 2009-12-25 09:27:00
大家好,小弟是刚接触ffmpeg的新手,有问题想请教各位:
我想通过ffmpeg得到视频文件的总帧数,文件的总时间以及码率,通过网上查找的资料写了段代码,但是没有成功,代码如下:

av_register_all();

err = av_open_input_file(&fctx, "s", NULL, 0, NULL);
if (err < 0) {
fprintf(stderr, "av_open_input_file: error %d\n", err);
return 1;
}

err = av_find_stream_info(fctx);
if (err < 0) {
fprintf(stderr, "av_find_stream_info: error %d\n", err);
return 1;
}

dump_format(fctx, 0, "s", 0);


dump_format(fctx, 0, "s", 0);
这个函数得到的内容如下:
Input #0, h264, from 's':
Duration: N/A, bitrate: N/A
Stream #0.0: Video: h264, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 25 tbr, 1200k tbn, 50 tbc

fctx->bit_rate 结果是 0
pkt.duration 结果是一个超大的数;

还有就是想知道 25 tbr, 1200k tbn, 50 tbc 这是什么意思?
谢谢大家,给各位添加麻烦了!
...全文
843 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lucerfu1 2012-05-07
  • 打赏
  • 举报
回复
很好,正需要
小菜_默 2009-12-26
  • 打赏
  • 举报
回复
哈哈,没有办法,我用av_read_frame循环了一遍,得到总的帧数除以真率得到时间,麻烦大家了。谢谢、、、
小菜_默 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 peterb 的回复:]
ffmpeg的使用
[/Quote]
谢谢 你的网址
小菜_默 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 macrojj 的回复:]
ffmpeg的AVFormatCtx是一步一步填充值的 你应该往下继续
[/Quote]
我用了一个MP4格式的就可以得到详细全面的东西了,没有继续往下阿,而我播放的是通过live555存储的文件,那些我想要的信息都没有得到。不知道是为什么~~~
小菜_默 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tufaqing 的回复:]
不是所有参数都能得到的,有的文件没有这些信息,要看解析层而定。
楼主都有代码了,查查就知道了。
    if(st->codec->codec_type == CODEC_TYPE_VIDEO){
        if(st->r_frame_rate.den && st->r_frame_rate.num)
            print_fps(av_q2d(st->r_frame_rate), "tbr");
        if(st->time_base.den && st->time_base.num)
            print_fps(1/av_q2d(st->time_base), "tbn");
        if(st->codec->time_base.den && st->codec->time_base.num)
            print_fps(1/av_q2d(st->codec->time_base), "tbc");
    }
25 tbr代表帧率;1200k tbn代表文件层(st)的时间精度,即1S=1200k,和duration相关;50 tbc代表视频层(st->codec)的时间精度,即1S=50,和strem->duration和时间戳相关。
[/Quote]
谢谢您的回答,同样的文件我用影音风暴或者暴风影音可以播放,他们可以得到总时间等,不知道他们是怎么实现的。
macrojj 2009-12-25
  • 打赏
  • 举报
回复
ffmpeg的AVFormatCtx是一步一步填充值的 你应该往下继续
peterb 2009-12-25
  • 打赏
  • 举报
回复
tufaqing 2009-12-25
  • 打赏
  • 举报
回复
不是所有参数都能得到的,有的文件没有这些信息,要看解析层而定。
楼主都有代码了,查查就知道了。
if(st->codec->codec_type == CODEC_TYPE_VIDEO){
if(st->r_frame_rate.den && st->r_frame_rate.num)
print_fps(av_q2d(st->r_frame_rate), "tbr");
if(st->time_base.den && st->time_base.num)
print_fps(1/av_q2d(st->time_base), "tbn");
if(st->codec->time_base.den && st->codec->time_base.num)
print_fps(1/av_q2d(st->codec->time_base), "tbc");
}
25 tbr代表帧率;1200k tbn代表文件层(st)的时间精度,即1S=1200k,和duration相关;50 tbc代表视频层(st->codec)的时间精度,即1S=50,和strem->duration和时间戳相关。
小菜_默 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bsr2009 的回复:]
建议看下:
如何基于FFMPEG和SDL写一个少于1000行代码的视频播放器
http://www.zixundao.com/thread-1519-1-1.html
[/Quote]
您好,这个我看过了,我要得到信息的文件是用live555保存的H264的文件,不知道是我在保存的时候漏了什么选项还是怎么的,时间和码率就是 没有,查看其他的电影文件就有,还有就是,我把我的文件用ffmpeg 转换成MP4格式后,就可以。
bsr2009 2009-12-25
  • 打赏
  • 举报
回复
建议看下:
如何基于FFMPEG和SDL写一个少于1000行代码的视频播放器
http://www.zixundao.com/thread-1519-1-1.html

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧