2012-12-02 62 views
4

我有一個視頻在.3gph.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與上述數字)

感謝

回答

0

你的FPS印刷是垃圾,因爲它應該是%LF不是%d。 爲什麼不檢查其他參數類型也一次。

+0

謝謝我已糾正並編輯上述文章 – tishu

+1

@Tishu,如果您對文件執行ffprobe或ffmpeg -i文件沒有其他任何操作,您會得到什麼結果。在控制檯上,你會得到ffmpeg認爲的幀速率等。 – av501

相關問題