我正在研究一種將H.264和AAC格式的MP4文件轉換爲適合流式處理的MPEG-TS段的libavformat API包裝器。我只是在不進行重新編碼的情況下進行簡單的流式複製,但我生成的文件播放視頻的速度爲3600 fps而不是24 fps。使用FFmpeg的libavformat API直接流副本創建的文件在3600 fps下回放速度太快
以下是ffprobe https://gist.github.com/chrisballinger/6733678一些輸出,碎文件如下:
r_frame_rate=1/1
avg_frame_rate=0/0
time_base=1/90000
start_pts=0
start_time=0.000000
duration_ts=2999
duration=0.033322
通過的ffmpeg手動發送相同的輸入文件具有正確的時間戳信息:
r_frame_rate=24/1
avg_frame_rate=0/0
time_base=1/90000
start_pts=126000
start_time=1.400000
duration_ts=449850
duration=4.998333
我認爲問題的關鍵在於在我的libavformat設置中的某處:https://github.com/OpenWatch/FFmpegWrapper/blob/master/FFmpegWrapper/FFmpegWrapper.m#L349其中我重新使用了ffmpeg.c中直接流複製所需的一堆代碼。因爲3600看起來像是一個「幻數」(60 * 60),它可能就像我沒有正確設置時間尺度一樣簡單,但我無法弄清楚我的代碼與ffmpeg/avconv本身分離的位置。
類似的問題在這裏,但我不覺得像我一樣,他們得到儘可能:Muxing a H.264 Annex B & AAC stream using libavformat with vcopy/acopy
謝謝!我不太清楚如何正確地重新調整時間基準,但看起來這可能會幫助我指出正確的方向。我會讓你知道它是怎麼回事! –