近日學習騰訊學院有關“FFmpeg 介紹與開發”的課程,裏面講到近兩年新引入的“Bitstream Fillter”功能很有用。下面簡單記錄一下課程內容,再結合網絡查詢到的相關資料,小結一下。
相關鏈接:
http://www.ffmpeg.org/ffmpeg-bitstream-filters.html
FFmpeg 官網介紹:
A bitstream filter operates on the encoded stream data, and performs bitstream level modifications without performing decoding.
- 比特流濾波器對編碼後的數據進行操作(壓縮碼流)。
- 不進行解碼操作,但是支持比特流級別的修改。
模版操作:
ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT
示例操作1:mp4 轉 ts 格式(annexb字節流格式)
ffmpeg -i input.mp4 -codec copy -bsf:v h264_mp4toannexb output.ts
annexb 和 mp4的區別可以參考:
https://www.jianshu.com/p/909071e8f8c6
H.264碼流分Annex-B和AVCC兩種格式。
> 1別名
AVCC格式 也叫AVC1格式,MPEG-4格式,字節對齊,因此也叫Byte-Stream Format。用於mp4/flv/mkv,
Annex-B格式 也叫MPEG-2 transport stream format格式(ts格式),
Annex-B 附錄B, 指ITU-T的 Recommendation(h.264和h.265)在附錄B中規定碼流格式。
> 2 結構區別:
區別有兩點:一個是參數集(SPS, PPS)組織格式;一個是分隔。
Annex-B:使用start code分隔NAL(start code爲三字節或四字節,0x000001或0x00000001,一般是四字節);SPS和PPS按流的方式寫在頭部。
AVCC:使用NALU長度(固定字節,通常爲4字節)分隔NAL;在頭部包含extradata(或sequence header)的結構體。
示例操作2:不解碼的情況下,跟蹤標頭語法元素
ffmpeg -i in.264 -c copy -bsf:v trace_headers -f null - 2> NALUS.txt
用於日誌跟蹤輸出,NALUS.txt 內可以包含編碼流標頭中的所有語法元素(高於單個編碼塊的水平)。 對於調試底層流問題很有效。
比如,可以查看SPS
可以查看Slice Header等等。