gcg*_*ant 5 c++ ffmpeg webm libavformat
我正在尝试使用FFMPEG和libavformat从WebM文件中检索持续时间和帧数.我正在调整一些最初编写的代码用于MP4s,并且当通过MP4时,它似乎工作正常.
我有使用vp8解析器和解码器以及matroska demuxer编译的FFMPEG 2.1.
我有一个AVStream指向视频流的指针*video_st.代码查找的帧数video_st->nb_frames和持续时间video_st->duration.这两者似乎都是0.
用于video_st->duration(https://ffmpeg.org/doxygen/trunk/structAVStream.html#a4e04af7a5a4d8298649850df798dd0b)的API文档说"如果源文件未指定持续时间,但指定比特率,则将根据比特率估计此值和文件大小." 我可以确认这个文件确实指定了持续时间和比特率(因为我在桌面上测试了它ffmpeg -i).所以这似乎很奇怪,这是返回0.也许我的FFMPEG构建配置不正确?
至于nb_frames,文档说"此流中的帧数(如果已知或0)".如果返回0,我能做什么吗?再次,ffmpeg -i确实返回fps的估计值; 这将足够好,因为我可以估计具有该帧数和持续时间的帧数.
谢谢!
Ron*_*tje 10
为什么nb_frames为0?
Mp4文件可以包含流中所有帧的完整索引,这使您可以准确地知道帧数.AVI也这样做.WebM只允许感兴趣的帧的索引,例如关键帧,这意味着索引更小(即更小的文件),但它也意味着除非你解析整个文件,否则你不知道帧的数量.
如何获得持续时间?
AVStream.持续时间是每个流的持续时间.对于许多文件类型(包括WebM),仅在标头中指定整个文件的持续时间,而不是每个流的持续时间.因此,使用AVFormatContext.duration,以AV_TIME_BASE为单位(微秒).要获得近似FPS,请使用AVStream.avg_frame_rate,然后nb_frames可以从那里近似.
| 归档时间: |
|
| 查看次数: |
2464 次 |
| 最近记录: |