當前位置:編程學習大全網 - 源碼下載 - FFmpeg-視頻編碼-YUV編碼出H264

FFmpeg-視頻編碼-YUV編碼出H264

編碼出來的h264數據可以直接使?ffplay播放

int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align);

函數的作?是通過指定像素格式、圖像寬、圖像?來計算所需的內存?

重點說明?個參數 align :此參數是設定內存對?的對?數,也就是按多?的字節進?內存對?:

av_image_alloc()是這樣定義的。此函數的功能是按照指定的寬、?、像素格式來 分配圖像內存

int av_image_alloc(uint8_t *pointers[4], int linesizes[4], int w, int h, enum AVPixelFormat pix_fmt, int align);

int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], const uint8_t *src, enum AVPixelFormat pix_fmt, int width, int height, int align);

av_image_fill_arrays()函數 ?身不具備內存申請的功能 ,此函數類似於格式化已經申請的內存,即通過 av_malloc()函數申請的內存空間,或者av_frame_get_buffer()函數申請的內存空間。

av_image_fill_arrays()中 參數具體說明

視頻碼率是視頻數據(包含視頻?彩量、亮度量、像素量)每秒輸出的位數。?般?的單位是kbps。

在視頻會議應用中,視頻質量和網絡帶寬占用是矛盾的,通常情況下視頻流占用的帶寬越高則視頻質量也越高;如要求高質量的視頻效果,那麽需要的網絡帶寬也越大;解決這壹矛盾的鑰匙當然是視頻編解碼技術。評判壹種視頻編解碼技術的優劣,是比較在相同的帶寬條件下,哪個視頻質量更好;在相同的視頻質量條件下,哪個占用的網絡帶寬更少。

是不是視頻碼率越高,質量越好呢?理論上是這樣的,然而在我們肉眼分辨的範圍內,當碼率高到壹定程度,感覺沒有什麽差別。所以碼率設置有它的最優值,H.264(也叫AVC或X.264)的文檔中,視頻的建議碼率如下:

鑒於x264的參數眾多,各種參數的配合復雜,為了使?者?便,x264建議如?特別需要可使 ?preset和tune設置。這套開發者推薦的參數較為合理,可在此基礎上在調整?些具體參數以符合?需要,?動設定的參數會覆蓋preset和tune?的參數。

使? ffmpeg -h encoder=libx264 命令查詢相關?持的參數

x264是?個 H.264/MPEG4 AVC 編碼器,本指南將指導新?如何創建?質量的H.264視頻。 對於普通?戶通常有兩種碼率控制模式:CRF(Constant Rate Factor)和Two pass ABR。碼率控制是?種決定為每?個視頻幀分配多少?特數的?法,它將決定?件的?和質量的分配。

如果妳在編譯和安裝libx264 ?需要幫助,請查看ffmpeg和x264編譯指南: http://ffmpeg.org/trac/ffmpeg/wiki/CompilationGuide

量化?例的範圍為0~51,其中0為?損模式, 23 為缺省值,51可能是最差的。該數字越?,圖像質量越 好。從主觀上講,18~28是?個合理的範圍。18往往被認為從視覺上看是?損的,它的輸出視頻質量和輸 ?視頻?模?樣或者說相差?。但從技術的?度來講,它依然是有損壓縮。

若CRF值加6,輸出碼率?概減少?半;若CRF值減6,輸出碼率翻倍。通常是在保證可接受視頻質量的前提下選擇?個最?的CRF值,如果輸出視頻質量很好,那就嘗試?個更?的值,如果看起來很糟,那就嘗 試?個?點值。

預設是?系列參數的集合,這個集合能夠在編碼速度和壓縮率之間做出?個權衡。?個編碼速度稍慢的預 設會提供更?的壓縮效率(壓縮效率是以?件?來衡量的)。這就是說,假如妳想得到?個指定?的? 件或者采?恒定?特率編碼模式,妳可以采?個較慢的預設來獲得更好的質量。同樣的,對於恒定質量編碼模式,妳可以通過選擇?個較慢的預設輕松地節省?特率。

如果妳很有耐?,通常的建議是使?最慢的預設。?前所有的預設按照編碼速度降序排列為:

tune是x264中重要性僅次於preset的選項,它是視覺優化的參數,tune可以理解為視頻偏好(或者視頻類型),tune不是?個單?的參數,?是由?組參數構成 -tune 來改變參數設置。當前的 tune包括:

如果妳不確定使?哪個選項或者說妳的輸?與所有的tune皆不匹配,妳可以忽略--tune 選項。 妳可以使?-tune來查看tune列表,也可以通過x264 --fullhelp來查看tune所采?的參數配置。

另外?個可選的參數是-profile:v,它可以將妳的輸出限制到?個特定的 H.264 profile。?些?常?的或者 要被淘汰的設備僅?持有限的選項,?如只?持baseline或者main。

所有的profile 包括:

查找指定的編碼器

初始化

設置編碼器參數

將codec_ctx和codec進行綁定

分配pkt和frame

計算出每壹幀的數據 像素格式 * 寬 * 高

讀取YUV數據

格式化已經申請的內存,將YUV數據,格式化放入frame中

發送YUV數據進編碼器

從編碼器中獲取encode的packet數據

encode的packet數據寫入文件

  • 上一篇:ubuntu特效
  • 下一篇:無所源代碼
  • copyright 2024編程學習大全網