4
我有一個視頻在.3gp
h.264
編碼的,我希望得到它在C.幀率和持續時間這裏是我打開的文件,並找到合適的編解碼器後,使用代碼:libavcodec的視頻獲得持續時間和幀率
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
從我的理解是時間,就是要「持續時間/基time_base」這給了我6594490/180000 = 36.6
的文檔。我的視頻文件的持續時間是6 seconds
,我不知道6
的這個因子會來自哪裏。
此外,framerate似乎完全關閉。
現在很難找到幫助,因爲很多教程使用不推薦使用的方法,文檔沒有給出示例。
任何幫助,將不勝感激。
感謝
編輯: 多虧了評論下面我設法打印以下
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.000006
得到30
與上述數字)
感謝
謝謝我已糾正並編輯上述文章 – tishu
@Tishu,如果您對文件執行ffprobe或ffmpeg -i文件沒有其他任何操作,您會得到什麼結果。在控制檯上,你會得到ffmpeg認爲的幀速率等。 – av501