ffmpeg中mp4轉h264、h264_mp4toannexb、bsf使用說明及注意事項


h264有兩種封裝,一種是annexb模式,傳統模式,有startcode(0x000001或0x0000001)分割NALU,在mpegts流媒體中使用,vlc里打開編碼器信息中顯示h264;

一種是AVCC模式,一般用mp4、mkv、flv容器封裝,以長度信息分割NALU, vlc里打開編碼器信息中顯示avc1。

很多場景需要進行這兩種格式之間的轉換,FFmpeg提供了名稱為h264_mp4toannexb的Bitstream Filter(bsf)來實現這個功能。

例如將mp4轉換成h264可使用如下指令:

mp4->h264:sudo ffmpeg -i test.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 test.h264

很多博客介紹的方法也對,但是轉碼之后碼率會過高,慎用。

Bitstream Filter

(1)主要目的是對數據進行格式轉換,使它能夠被解碼器處理(比如HEVC QSV的解碼器)。

(2)Bitstream Filter對已編碼的碼流進行操作,不涉及解碼過程。

(3)使用ffmpeg -bsfs命令可以查看ffmpeg工具支持的Bitstream Filter類型。

(4)使用ff*工具的 -bsf 選項來指定對具體流的Bitstream Filter,使用逗號分割的多個filter,如果filter有參數, 參數名和參數值跟在filter名稱后面。

bsf的使用方法:

(1)使用查詢函數av_bsf_get_by_name 根據名稱查找對應的AVBitstreamFilter。

(2)使用av_bsf_alloc為AVBSFContext和他的一些內部變量分配內存。

(3)設置AVBSFContext可能需要使用一些變解碼參數和time_base[2].

(4)在設置好參數之后使用av_bsf_init來初始化bsf.

(5)使用av_bsf_send_packet函數輸入數據,並使用av_bsf_receive_packet獲得處理后的輸出數據。

(6)處理結束后,av_bsf_free清理用於上下文和內部緩沖區的內存。

該接口官網介紹:

ffmpeg視頻轉碼基礎操作可參考:http://www.ruanyifeng.com/blog/2020/01/ffmpeg.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM