差異的視頻文件的部分我都建立在libav頂部的工作程序(或者ffmpeg - 專業知識或者是在這裏很有用)。Remux的和段只沒有輸出
它需要一個mp4視頻,與H264視頻/ AAC音頻編碼,並且它remuxes到MPEG TS和段成X第二塊。它類似於下面的ffmpeg的命令:
ffmpeg -y -i video.mp4 -c:a copy -bsf:a aac_adtstoasc -c:v copy -bsf:v h264_mp4toannexb -flags -global_header -map 0 -f segment -segment_time 10 -segment_list playlist.m3u8 -segment_format mpegts chunk_%03d.ts
我不使用命令行的原因,是希望只生成段的一個子集。因此,如果一個視頻產生8到12秒之間的10個分段(由於關鍵幀,分段永遠不會是所需的長度),我可能希望稍後生成分段3-7。
我的程序的完整代碼可以發現here。
我使用av_read_frame
讀取從源文件中的每個幀,REMUX(包括bitfilter處理)和寫入輸出文件。一旦自上一次輸出變爲接近/大於所需段長度後,我刷新輸出文件,關閉它,打開下一個段並繼續。
我已經嘗試改變代碼做av_seek_frame
到第一個段的末尾,並從那裏開始(我也試圖從第二和第三段的末尾開始)。新的段的長度是相同的(以秒和點爲單位),但是與完全runthrough(幾千字節內)的可比段相比,其大小不同 - 起始段(無論是第二,第三還是其他)也顯示爲比以前的可比分段少2個分組。
我認爲av_seek_frame
會給我一個精確的匹配,就好像我手動完成了一個到av_read_frame
的循環,但看起來情況並非如此。
我希望的東西:
- 的一種方式,以「快進」的文件中,以一個特定的文件中(不近似值)點。
- 要從該點開始寫入並且輸出與完整運行提供的完全相同(相同的大小,相同的長度,相同的確切字節)。
我正在尋找關鍵幀,所以我儘管這將是確切的。 FFMS2聽起來很有意思,並且由於缺乏libav的文檔,這可能是我的優點。謝謝! –
FFMS2看起來不錯,但它似乎只是閱讀 - 不寫/多路複用。該API是更好的工作,雖然:) –