gpt4 book ai didi

video - libavcodec 获取视频时长和帧率

转载 作者:行者123 更新时间:2023-11-28 21:41:52 26 4
gpt4 key购买 nike

我有一个用 .3gp h.264 编码的视频,我希望在 C 中获得它的帧率和持续时间。这是我在打开后使用的代码文件并找到合适的编解码器:

AVRational rational = gVideoCodecCtx->time_base;

LOGI(10, "numerator is %i", rational.num);
LOGI(10, "denominator is %i", rational.den);
LOGI(10, "duration is %d", gFormatCtx->duration);
LOGI(10, "fps is %d", (double)av_q2d(rational));

这是输出:

12-02 12:30:19.819: I/FFmpegTest(23903): numerator is 1
12-02 12:30:19.819: I/FFmpegTest(23903): denominator is 180000
12-02 12:30:19.819: I/FFmpegTest(23903): duration is 6594490
12-02 12:30:19.819: I/FFmpegTest(23903): fps is 1692926992

从文档中我了解到持续时间是“duration/time_base”,这给了我 6594490/180000 = 36.6。我的视频文件的持续时间是 6 秒,我不知道 6 这个因素从何而来。

而且帧速率似乎完全关闭。

目前很难找到帮助,因为很多教程使用过时的方法,而且文档没有给出示例。

如有任何帮助,我们将不胜感激。

谢谢

编辑:感谢下面的评论,我设法打印了以下内容

12-02 18:59:36.279: I/FFmpegTest(435): numerator is 1
12-02 18:59:36.279: I/FFmpegTest(435): denominator is 180000
12-02 18:59:36.279: I/FFmpegTest(435): duration is 6594490
12-02 18:59:36.279: I/FFmpegTest(435): fps is 0.000006

我还设法在 msec 中找到帧的时间戳:

int msec = 1000*(packet.pts * timeBase * gVideoCodecCtx->ticks_per_frame);

这会返回大约 33fps 的值(我预计 30)。但我无法弄清楚如何检索持续时间。文档说“流的持续时间,以 AV_TIME_BASE 小数秒为单位”,但 6594490 * 0.000006 = 39.5 - 正确的持续时间是 6.3 秒)。此外,确切的 fps 是 30,但不确定如何使用上述数字从 0.00000630)

谢谢

最佳答案

FPS可以这样获取:

const double FPS = (double)videoStream->r_frame_rate.num / (double)videoStream->r_frame_rate.den;

videoStream 是:

AVFormatContext * format = NULL;
if ( avformat_open_input( & format, "my_video.mkv", NULL, NULL ) != 0 ) ) on_error();
if ( avformat_find_stream_info( format, NULL ) < 0) on_error();
//av_dump_format( format, 0, "my_video.mkv", false );
AVCodec * video_dec = (AVCodec*)1;
const auto video_stream_index = av_find_best_stream( format, AVMEDIA_TYPE_VIDEO, -1, -1, & video_dec, 0 );
if ( video_stream_index < 0 ) on_error();
const auto videoStream = format->streams[ video_stream_index ];

关于video - libavcodec 获取视频时长和帧率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13669346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com