X264學習筆記(1)

X264學習筆記(1)



X264編碼流程

參數的初始化

1.opt,param根據輸入的參數和標準的規定,進行初始化設置。

Opt的說明如下:

Opt->hin用于給出讀入的yuv文件的指針地址

Opt->hout給出了輸出的文件的指針地址

Opt->i_seek給出了起始編碼幀的幀數,是由編碼時的seek命令參數決定的

如:

X264 -seek 10 -o foreman.cif test.264 352x288

i_seek 設為10,表示起始編碼的幀為元序列的第十幀

Opt->qpfile按照說明,為qp值文件輸入進行定義這種方式的接口,可以通過讀入標準的文件格式,對編碼時的qp值進行定義。

Param的說明:

typedef struct

{

??? /* CPU flags */

??? unsigned int cpu;

??? int???????? i_threads;? /* divide each frame into multiple slices, encode in parallel */線程數,用于多線程并行編碼

?

??? /* Video Properties */

??? int???????? i_width; ????????????????????????????? 圖像的寬度

??? int???????? i_height;?????????????????????????????? 圖像的高度

??? int???????? i_csp;? /* CSP of encoded bitstream, only i420 supported */ ?? 色彩空間的設置

??? int???????? i_level_idc; ????????????level 值的設置

??? int???????? i_frame_total; /* number of frames to encode if known, else 0 */? 總共需要編碼的幀數,由--frames設置

Vui參數集

??? struct

??? {

??????? /* they will be reduced to be 0 < x <= 65535 and prime */

??????? int???????? i_sar_height;

??????? int???????? i_sar_width;

?

??????? int???????? i_overscan;??? /* 0=undef, 1=no overscan, 2=overscan */

???????

??????? /* see h264 annex E for the values of the following */

??????? int???????? i_vidformat;

??????? int???????? b_fullrange;

??????? int???????? i_colorprim;

??????? int???????? i_transfer;

??????? int???????? i_colmatrix;

??????? int? ???????i_chroma_loc;??? /* both top & bottom */

??? } vui;

?

??? int???????? i_fps_num;

??? int???????? i_fps_den;

這兩個參數是由fps幀率確定的,賦值的過程見下:

??? {

??????? float fps;

??????? if( sscanf( value, "%d/%d", &p->i_fps_num, &p->i_fps_den ) == 2 )

??????????? ;

??? ????else if( sscanf( value, "%f", &fps ) )

??????? {

??????????? p->i_fps_num = (int)(fps * 1000 + .5);

??????????? p->i_fps_den = 1000;

??????? }

??????? else

??????????? b_error = 1;

??? }

Value的值就是fps。

?

??? /* Bitstream parameters */

??? int???????? i_frame_reference;? /* Maximum number of reference frames */

??? int???????? i_keyint_max;?????? /* Force an IDR keyframe at this interval */

??? int???????? i_keyint_min;?????? /* Scenecuts closer together than this are coded as I, not IDR. */

??? int?????? ??i_scenecut_threshold; /* how aggressively to insert extra I frames */

??? int???????? i_bframe;?? /* how many b-frame between 2 references pictures */

??? int???????? b_bframe_adaptive;

??? int???????? i_bframe_bias;

??? int???????? b_bframe_pyramid;?? /* Keep some B-frames as references */

?

?

去塊濾波器需要的參數

??? int???????? b_deblocking_filter;

??? int???????? i_deblocking_filter_alphac0;??? /* [-6, 6] -6 light filter, 6 strong */

??? int???????? i_deblocking_filter_beta;?????? /* [-6, 6]? idem */

?

熵編碼

??? int???????? b_cabac;

??? int???????? i_cabac_init_idc;

量化

??? int???????? i_cqm_preset;

??? char??????? *psz_cqm_file;????? /* JM format */

??? uint8_t???? cqm_4iy[16];??????? /* used only if i_cqm_preset == X264_CQM_CUSTOM */

??? uint8_t???? cqm_4ic[16];

?? ?uint8_t???? cqm_4py[16];

??? uint8_t???? cqm_4pc[16];

??? uint8_t???? cqm_8iy[64];

??? uint8_t???? cqm_8py[64];

?

??? /* Log */

??? void??????? (*pf_log)( void *, int i_level, const char *psz, va_list );

??? void??????? *p_log_private;

??? int???????? i_log_level;

??? int???????? b_visualize;

?

??? /* Encoder analyser parameters */

??? struct

??? {

??????? unsigned int intra;???? /* intra partitions */

??????? unsigned int inter;???? /* inter partitions */

?

??????? int????????? b_transform_8x8;

??????? int? ????????b_weighted_bipred; /* implicit weighting for B-frames */

??????? int????????? i_direct_mv_pred; /* spatial vs temporal mv prediction */

??????? int????????? i_chroma_qp_offset;

?

??????? int????????? i_me_method; /* motion estimation algorithm to use (X264_ME_*) */

??????? int????????? i_me_range; /* integer pixel motion estimation search range (from predicted mv) */

??????? int????????? i_mv_range; /* maximum length of a mv (in pixels) */

??????? int????????? i_subpel_refine; /* subpixel motion estimation quality */

??????? int????????? b_bidir_me; /* jointly optimize both MVs in B-frames */

??????? int????????? b_chroma_me; /* chroma ME for subpel and mode decision in P-frames */

??????? int????????? b_bframe_rdo; /* RD based mode decision for B-frames */

??????? int????????? b_mixed_references; /* allow each mb partition in P-frames to have it's own reference number */

??????? int????????? i_trellis;? /* trellis RD quantization */

??????? int????????? b_fast_pskip; /* early SKIP detection on P-frames */

??????? int????????? b_dct_decimate; /* transform coefficient thresholding on P-frames */

??????? int????????? i_noise_reduction; /* adaptive pseudo-deadzone */

?

??????? int????????? b_psnr;??? /* Do we compute PSNR stats (save a few % of cpu) */

??? } analyse;

?

??? /* Rate control parameters */

??? struct

??? {

??????? int???????? i_rc_method;??? /* X264_RC_* */

?

??????? int???????? i_qp_constant;? /* 0-51 */

??????? int???????? i_qp_min;?????? /* min allowed QP value */

??????? int???????? i_qp_max; ??????/* max allowed QP value */

??????? int???????? i_qp_step;????? /* max QP step between frames */

?

??????? int???????? i_bitrate;????????????? 比特率 --bitrate控制

??????? int???????? i_rf_constant;? /* 1pass VBR, nominal QP */

??????? float?????? f_rate_tolerance;

?? ?????int???????? i_vbv_max_bitrate;

??????? int???????? i_vbv_buffer_size;

??????? float?????? f_vbv_buffer_init;

??????? float?????? f_ip_factor;

??????? float?????? f_pb_factor;

?

??????? /* 2pass */

??????? int???????? b_stat_write;?? /* Enable stat writing in psz_stat_out */

??????? char??????? *psz_stat_out;

??????? int???????? b_stat_read;??? /* Read stat from psz_stat_in and use it */

??????? char??????? *psz_stat_in;

?

??????? /* 2pass params (same as ffmpeg ones) */

??????? char??????? *psz_rc_eq;?? ??/* 2 pass rate control equation */

??????? float?????? f_qcompress;??? /* 0.0 => cbr, 1.0 => constant qp */

??????? float?????? f_qblur;??????? /* temporally blur quants */

??????? float?????? f_complexity_blur; /* temporally blur complexity */

??????? x264_zone_t *zones;???????? /* ratecontrol overrides */

??????? int???????? i_zones;??????? /* sumber of zone_t's */

??????? char??????? *psz_zones;???? /* alternate method of specifying zones */

??? } rc;

?

??? /* Muxing parameters */

??? int b_aud;??????? ??????????/* generate access unit delimiters */

??? int b_repeat_headers;?????? /* put SPS/PPS before each keyframe */

??? int i_sps_id;?????????????? /* SPS and PPS id number */

} x264_param_t;

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455215.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455215.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455215.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 數字轉化excel行列_Python實現excel的列名稱轉數字、26進制(A-Z)與10進制互相轉換...

Python實現excel的列名稱轉數字、26進制(A-Z)與10進制互相轉換sequence list( map( lambda x: chr( x ), range( ord( A ), ord( Z ) 1 ) ) )##-----字母轉數字(python實現 1-26A-Z, then AA-AZ)def ten2TwentySix(num):L []numnum-1; #實現從1對應Aif num > 25:while Tr…

錯誤提示:'……' is not assignable to Android.app.Activity Manifest XML

1 問題描述&#xff1a; 針對這段代碼&#xff1a; <activity android:name".fragament.fragment_bulter" /> <activity android:name".fragament.fragment_girl" /> <activity android:name".fragament.fragment_user" />…

關于Lambda和匿名內部類

先上代碼&#xff1a; //gcache(f)public <T,R> Function<T,R> cache(Function<T,R> f){final Map<T,R> cachenew HashMap<>();Function<T,R> gt->{if(cache.containsKey(t)){System.out.println("cached t:"t);return cache…

H26L encoder.cfg參數分析

H264 encoder.cfg參數分析 收藏 (1) 文件操作參數:#Files InputFile "silent.yuv" #輸入序列,YUV 4:2:0 StartFrame 0 # 從視頻流的第幾幀開始編碼 FramesToBeEncoded 30 #編碼圖象幀數,指明了除去 B幀后將要被編碼的幀數(應該再實驗一下&#x…

django-ckeditor表情包修改

一、版本 Django1.11django-ckeditor5.2.2 二、關鍵步驟 1.刪除舊的ckeditor靜態文件 所在目錄&#xff1a;項目目錄下的static文件夾下的ckditor文件夾 rm ckeditor -rf 原因&#xff1a;在安裝ckeditor后需要執行collectstatic命令&#xff0c;這個過程中的查找靜態文件會去…

python中最難的是什么_python什么的最難了

學的人很少的,如果你沒有學過編程,建議學c語言.因為python中文資料很少的.你可以先了解一下phthonpython的歷史python的創始人為guido van rossum。1989年圣誕節期間&#xff0c;在阿姆斯特丹&#xff0c;guido為了打發圣誕節的無趣&#xff0c;決心開發一個新的腳本解釋程序&a…

Python3生成腳本實現重置鍵盤鍵位

個人博客點這里 #!/usr/bin/env python # -*- coding:utf-8 -*- # Created by 秋葉夏風# 本模塊的功能:<重置鍵盤鍵位>import sys import ossave_format "bat" # 這個值可以修改&#xff0c;有兩個選項(bat和reg)&#xff0c;可選擇生成bat批處理文件或者re…

《Java核心技術 卷Ⅱ 高級特性(原書第10版)》一2.2.2 如何讀入文本輸入

2.2.2 如何讀入文本輸入 最簡單的處理任意文本的方式就是使用在卷Ⅰ中我們廣泛使用的Scanner類。我們可以從任何輸入流中構建Scanner對象。或者&#xff0c;我們也可以將短小的文本文件像下面這樣讀入到一個字符串中&#xff1a; 在早期的Java版本中&#xff0c;處理文本輸入的…

leetcode add Two Numbers

部分 conditional operators ?:寫的statements 在有的編譯器下能通過&#xff0c;有的可能通不過 base operand of -> has non-pointer type ListNode轉載于:https://www.cnblogs.com/liyongguo/p/7152365.html

amap不同樣式marker點_想出一手漂亮的圖,CAD打印樣式表你必須會!

好課推薦&#xff1a;1.CAD2014&#xff1a;點擊查看2.室內CAD&#xff1a;點擊查看3.CAD2019&#xff1a;點擊查看4.CAD2018&#xff1a;點擊查看5.【bim】revit&#xff1a;點擊查看6.室內手繪&#xff1a;點擊查看7.CAD三維&#xff1a;點擊查看8.全屋定制&#xff1a;點擊查…

JM8.5中的7種宏塊模式問題

JM8.5中的7種宏塊模式問題 收藏 Outline: 1、 CFG文件中有關可變尺寸宏塊模式的相關選項2、 7種宏塊模式對應的數值常量3、 7種宏塊模式被分成宏塊和亞宏塊4、 如何對宏塊和亞宏塊的運動估計&#xff0c;采用一個共同的函數來處理5、 遺留問題1、CFG文件中有關可變尺寸宏塊…

python高級編程技巧

個人博客點這里 如何在列表,字典,集合中根據條件篩選數據 方法1:通過迭代來進行判斷篩選 解決方案 函數式編程: 如何統計序列中元素的出現頻度 解決方案:使用collections.Counter對象 將序列傳入Counter的構造器,得到Counter對象是元素頻度的字典 Counter.most_common(n)…

2016年安全身份識別主流趨勢

安全身份識別解決方案商HID Global通過從不同行業市場的重要客戶那里所獲得的深刻洞察&#xff0c;以及公司最新解決方案在前瞻性合作伙伴和全球各地的終端用戶中進行的試點項目與正式部署情況&#xff0c;確定了2016年最值得業界關注的安全趨勢。HID Global 廣闊的行業視角&am…

列出一個目錄中所有文件及大小

package com.test.tree;import java.io.File;/*** 列出一個目錄中所有的文件和他們的大小* author wyl**/ public class FileList {public void list(File f){ //文件根目錄&#xff0c;深度為0list(f,0);}/*** * param f* param depth 為了顯示文件的層級形式*/public void li…

多媒體音頻格式解析WMA WAV OGG AAC APE FLAC

無論是MP3還是MP4&#xff0c;甚至手機和多媒體DC&#xff0c;產品所支持的各種格式往往讓人眼花繚亂。特別是對于剛上手的新手玩家來說&#xff0c;各種格式都有哪些特性&#xff0c;在實際 使用當中有多少格式實用或者必須&#xff0c;其實有很多方面需要我們來系統的了解。這…

數據分析之pandas筆記

Pandas 一個用于表示表格類型的內容 課時4&#xff1a;jupyter21 分22 秒課時5&#xff1a;pandas的內容24 分31 秒課時6&#xff1a;series內容38 分19 秒課時7&#xff1a;dataframe25 分50 秒 # 載入pandas庫 import pandas as pd import numpy as nps pd.Series([2,4,6…

Apache日志記錄組件Log4j出現反序列化漏洞 黑客可以執行任意代碼 所有2.x版本均受影響...

開源的東西用的人多了&#xff0c;自然漏洞就多。Apache用于日志記錄的組件Log4j使用非常靈活&#xff0c;在相當多的開源項目中都有使用&#xff0c;此次漏洞影響所有Apache Log4j 2.*系列版本&#xff1a; Apache Log4j 2.0-alpha1 – Apache Log4j 2.8.1&#xff0c;使用Jav…

react接收后端文件_React獲取Java后臺文件流并下載Excel文件流程解析

記錄使用blob對象接收java后臺文件流并下載為xlsx格式的詳細過程&#xff0c;關鍵部分代碼如下。首先在java后臺中設置response中的參數&#xff1a;public void exportExcel(HttpServletResponse response, String fileName, String sheetName,List titleRow, List> dataRo…

Python常見的170道面試題全解析答案

個人博客點這里 語言特性 1. 談談對 Python 和其他語言的區別 答&#xff1a;Python 是一門語法簡潔優美,功能強大無比,應用領域非常廣泛,具有強大完備的第三方庫&#xff0c;他是一門強類型的可移植、可擴展&#xff0c;可嵌入的解釋型編程語言&#xff0c;屬于動態語言。 …

WMA文件信息格式分析及代碼

WMA文件信息格式分析及代碼 收藏 ASF文件和WMA文件格式差不多。具體請看下面我寫的代碼。文件分析根據mplayer其中的asfhead.c提供的代碼進行分析。mplayer只解除出了標準的wma頭信息&#xff0c;其擴展信息并沒有解析出來。代碼如下. /*每一個WMA文件&#xff0c;它的頭16個字…