2013-05-20 70 views
5

直到現在,我正在使用固定幀(編程)使用ffmpeg完成所有編碼。現在我需要支持可變幀頻。我剛剛開始評論我設置幀頻的代碼部分。 但它不工作。我的功能在avcodec_open2失敗。請有人建議我如何去支持可變幀頻。 另外我也知道不是所有編解碼器都支持可變的幀速率。所以當使用可變幀頻編碼時,通常使用哪些編解碼器。請建議。ffmpeg中的可變幀頻編碼

感謝 普拉迪普

+0

你知道如何做到這一點嗎?我也對此感興趣。 @ praks411 – GangstaGraham

回答

4

我知道後很老了,但是我希望能夠幫助有同樣的問題(我只是做了)一些人...

使用fps filterframerate filter 。作爲一個ffpmeg n00b以及,100%的正確性不能保證,但至少這對我有效:

我創建了一個篩選器圖,就像在filtering_video.c示例中一樣。例如,對於filters參數avfilter_graph_parse_ptr,我指定fps=fps=30:round=near。然後我喂幀到每當FilterGraph動態我得到了一些,計算PTS作爲

float fps = (float)(codecContext->time_base.num)/codecContext->time_base.den; 
this->frame->pts = (__int64)((timestamp - timestamp0)/fps); 

timestamp其中是幀的時間,以秒和timestamp0是被記錄在第一幀的時間。兩者都是浮點值,並且是我自定義的定時器的結果。當您使用提供時間戳的庫(如DirectShow)時,您當然應該使用這些。