HEVC Tile 編碼器-kvazaar

一、項目介紹

    Kvazaar是屢獲殊榮的學術性開源HEVC編碼器,它是用C語言從零開始開發的。Kvazaar目標是設計一種模塊化,便攜式HEVC編碼器,以最佳的編碼速度和資源獲得高編碼效率。
可以從GitHub下載Kvazaar源代碼和二進制文件,也可以通過FFmpeg或Libav使用它。 相比於x265,使用上面感覺快很多,而且支持設置tile的參數進行編碼。
項目地址:
編譯好的各個平臺的可執行文件:
 

二、命令行

    簡單的一個例子: 
 
    將一個輸入的MP4 hevc編碼的文件 編碼成 將motion vectors 限制在一個tile裏面的hevc碼流:
    kvazaar -i input.mp4 --input-res 3840x2160 -o output.hvc --tiles 3x3 --slices tiles --mv-constraint frametilemargin -q 30 --period 30 --input-fps 30
 
    將一個yuv編碼成有tile的bin:
kvazaar -i 8k.yuv --input-res 8192x4096 -o output.hvc --tiles 3x3
 

三、VS 平臺編譯

1、首先下載vsyasm
   
按照要求下載:64爲下載的是 http://yasm.tortall.net/Download.html
下載好之後解壓 將vsyasm.exe的路徑添加到系統的環境變量path裏面。否則會出現 vsyasm找不到的錯誤。
 
2、編譯
    打開kvazaar\build\kvazaar_VS2015.sln 就可以編譯調試了。
 
3、編譯過程出現錯誤:
 

    LINK : fatal error LNK1181: cannot open input file 'Win32-Debug\picture-x86-asm-sad.obj

出現這個錯誤一般都是yasm的版本不對了。這邊用的cygwin下面的vsyasm,這個之前編譯vp9的時候改過,是yasm更名的,導致編譯錯誤。

重新到yasm的網站下面下載一個新的vsyasm,加到到環境變量裏面。 重新啓動一下vs 2017 就可以編譯成功了。

 

 

完整的命令選項

Usage:
kvazaar -i <input> --input-res <width>x<height> -o <output>


Required:
 -i, --input <filename>     : Input file   
     --input-res <res>      : Input resolution [auto]
                                  - auto: Detect from file name.
                                  - <int>x<int>: width times height
 -o, --output <filename>    : Output file


Presets:
     --preset <preset>      : Set options to a preset [medium]
                                  - ultrafast, superfast, veryfast, faster,
                                    fast, medium, slow, slower, veryslow
                                    placebo


Input:
 -n, --frames <integer>     : Number of frames to code [all]
     --seek <integer>       : First frame to code [0]
     --input-fps <num>[/<denom>] : Frame rate of the input video [25]
     --source-scan-type <string> : Source scan type [progressive]
                                  - progressive: Progressive scan
                                  - tff: Top field first
                                  - bff: Bottom field first
     --input-format <string> : P420 or P400 [P420]
     --input-bitdepth <int> : 8-16 [8]
     --loop-input           : Re-read input file forever.


Options:
     --help                 : Print this help message and exit.
     --version              : Print version information and exit.
     --(no-)aud             : Use access unit delimiters. [disabled]
     --debug <filename>     : Output internal reconstruction.
     --(no-)cpuid           : Enable runtime CPU optimizations. [enabled]
     --hash <string>        : Decoded picture hash [checksum]
                                  - none: 0 bytes
                                  - checksum: 18 bytes
                                  - md5: 56 bytes
     --(no-)psnr            : Calculate PSNR for frames. [enabled]
     --(no-)info            : Add encoder info SEI. [enabled]
     --crypto <string>      : Selective encryption. Crypto support must be
                              enabled at compile-time. Can be 'on' or 'off' or
                              a list of features separated with a '+'. [off]
                                  - on: Enable all encryption features.
                                  - off: Disable selective encryption.
                                  - mvs: Motion vector magnitudes.
                                  - mv_signs: Motion vector signs.
                                  - trans_coeffs: Coefficient magnitudes.
                                  - trans_coeff_signs: Coefficient signs.
                                  - intra_pred_modes: Intra prediction modes.
     --key <string>         : Encryption key [16,213,27,56,255,127,242,112,
                                              97,126,197,204,25,59,38,30]


Video structure:
 -q, --qp <integer>         : Quantization parameter [22]
 -p, --period <integer>     : Period of intra pictures [64]
                                  - 0: Only first picture is intra.
                                  - 1: All pictures are intra.
                                  - N: Every Nth picture is intra.
     --vps-period <integer> : How often the video parameter set is re-sent [0]
                                  - 0: Only send VPS with the first frame.
                                  - N: Send VPS with every Nth intra frame.
 -r, --ref <integer>        : Number of reference frames, in range 1..15 [4]
     --gop <string>         : GOP structure [lp-g4d3t1]
                                  -  0: Disabled
                                  -  8: B-frame pyramid of length 8
                                  - 16: B-frame pyramid of length 16
                                  - lp-<string>: Low-delay P/B-frame GOP
                                    (e.g. lp-g8d4t2, see README)
     --intra-qp-offset <int>: QP offset for intra frames [-51..51] [auto]
                                  - N: Set QP offset to N.
                                  - auto: Select offset automatically based
                                    on GOP length.
     --(no-)open-gop        : Use open GOP configuration. [enabled]
     --cqmfile <filename>   : Read custom quantization matrices from a file.
     --scaling-list <string>: Set scaling list mode. [off]
                                  - off: Disable scaling lists.
                                  - custom: use custom list (with --cqmfile).
                                  - default: Use default lists.
     --bitrate <integer>    : Target bitrate [0]
                                  - 0: Disable rate control.
                                  - N: Target N bits per second.
     --rc-algorithm <string>: Select used rc-algorithm. [lambda]
                                  - lambda: rate control from:
                                    DOI: 10.1109/TIP.2014.2336550
                                  - oba: DOI: 10.1109/TCSVT.2016.2589878
     --(no-)intra-bits      : Use Hadamard cost based allocation for intra
                              frames. Default on for gop 8 and off for lp-gop
     --(no-)clip-neighbour  : On oba based rate control whether to clip
                              lambda values to same frame's ctus or previous'.
                              Default on for RA GOPS and disabled for LP.
     --(no-)lossless        : Use lossless coding. [disabled]
     --mv-constraint <string> : Constrain movement vectors. [none]
                                  - none: No constraint
                                  - frametile: Constrain within the tile.
                                  - frametilemargin: Constrain even more.
     --roi <filename>       : Use a delta QP map for region of interest.
                              Reads an array of delta QP values from a text
                              file. The file format is: width and height of
                              the QP delta map followed by width*height delta
                              QP values in raster order. The map can be of any
                              size and will be scaled to the video size.
     --set-qp-in-cu         : Set QP at CU level keeping pic_init_qp_minus26.
                              in PPS and slice_qp_delta in slize header zero.
     --(no-)erp-aqp         : Use adaptive QP for 360 degree video with
                              equirectangular projection. [disabled]
     --level <number>       : Use the given HEVC level in the output and give
                              an error if level limits are exceeded. [6.2]
                                  - 1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 5.2, 6,
                                    6.1, 6.2
     --force-level <number> : Same as --level but warnings instead of errors.
     --high-tier            : Used with --level. Use high tier bitrate limits
                              instead of the main tier limits during encoding.
                              High tier requires level 4 or higher.
     --(no-)vaq <integer>   : Enable variance adaptive quantization with given
                              strength, in range 1..20. Recommended: 5.
                              [disabled]


Compression tools:
     --(no-)deblock <beta:tc> : Deblocking filter. [0:0]
                                  - beta: Between -6 and 6
                                  - tc: Between -6 and 6
     --sao <string>         : Sample Adaptive Offset [full]
                                  - off: SAO disabled
                                  - band: Band offset only
                                  - edge: Edge offset only
                                  - full: Full SAO
     --(no-)rdoq            : Rate-distortion optimized quantization [enabled]
     --(no-)rdoq-skip       : Skip RDOQ for 4x4 blocks. [disabled]
     --(no-)signhide        : Sign hiding [disabled]
     --(no-)smp             : Symmetric motion partition [disabled]
     --(no-)amp             : Asymmetric motion partition [disabled]
     --rd <integer>         : Intra mode search complexity [0]
                                  - 0: Skip intra if inter is good enough.
                                  - 1: Rough intra mode search with SATD.
                                  - 2: Refine intra mode search with SSE.
                                  - 3: Try all intra modes and enable intra
                                       chroma mode search.
     --(no-)mv-rdo          : Rate-distortion optimized motion vector costs
                              [disabled]
     --(no-)zero-coeff-rdo  : If a CU is set inter, check if forcing zero
                              residual improves the RD cost. [enabled]
     --(no-)full-intra-search : Try all intra modes during rough search.
                              [disabled]
     --(no-)transform-skip  : Try transform skip [disabled]
     --me <string>          : Integer motion estimation algorithm [hexbs]
                                  - hexbs: Hexagon Based Search
                                  - tz:    Test Zone Search
                                  - full:  Full Search
                                  - full8, full16, full32, full64
                                  - dia:   Diamond Search
     --me-steps <integer>   : Motion estimation search step limit. Only
                              affects 'hexbs' and 'dia'. [-1]
     --subme <integer>      : Fractional pixel motion estimation level [4]
                                  - 0: Integer motion estimation only
                                  - 1: + 1/2-pixel horizontal and vertical
                                  - 2: + 1/2-pixel diagonal
                                  - 3: + 1/4-pixel horizontal and vertical
                                  - 4: + 1/4-pixel diagonal
     --pu-depth-inter <int>-<int> : Inter prediction units sizes [0-3]
                                  - 0, 1, 2, 3: from 64x64 to 8x8
                                  - Accepts a list of values separated by ','
                                    for setting separate depths per GOP layer
                                    (values can be omitted to use the first
                                    value for the respective layer).
     --pu-depth-intra <int>-<int> : Intra prediction units sizes [1-4]
                                  - 0, 1, 2, 3, 4: from 64x64 to 4x4
                                  - Accepts a list of values separated by ','
                                    for setting separate depths per GOP layer
                                    (values can be omitted to use the first
                                    value for the respective layer).
     --ml-pu-depth-intra    : Predict the pu-depth-intra using machine
                               learning trees, overrides the
                               --pu-depth-intra parameter. [disabled]
     --tr-depth-intra <int> : Transform split depth for intra blocks [0]
     --(no-)bipred          : Bi-prediction [disabled]
     --cu-split-termination <string> : CU split search termination [zero]
                                  - off: Don't terminate early.
                                  - zero: Terminate when residual is zero.
     --me-early-termination <string> : Motion estimation termination [on]
                                  - off: Don't terminate early.
                                  - on: Terminate early.
                                  - sensitive: Terminate even earlier.
     --fast-residual-cost <int> : Skip CABAC cost for residual coefficients
                                  when QP is below the limit. [0]
     --(no-)intra-rdo-et    : Check intra modes in rdo stage only until
                              a zero coefficient CU is found. [disabled]
     --(no-)early-skip      : Try to find skip cu from merge candidates.
                              Perform no further search if skip is found.
                              For rd=0..1: Try the first candidate.
                              For rd=2.. : Try the best candidate based
                                           on luma satd cost. [enabled]
     --max-merge <integer>  : Maximum number of merge candidates, 1..5 [5]
     --(no-)implicit-rdpcm  : Implicit residual DPCM. Currently only supported
                              with lossless coding. [disabled]
     --(no-)tmvp            : Temporal motion vector prediction [enabled]


Parallel processing:
     --threads <integer>    : Number of threads to use [auto]
                                  - 0: Process everything with main thread.
                                  - N: Use N threads for encoding.
                                  - auto: Select automatically.
     --owf <integer>        : Frame-level parallelism [auto]
                                  - N: Process N+1 frames at a time.
                                  - auto: Select automatically.
     --(no-)wpp             : Wavefront parallel processing. [enabled]
                              Enabling tiles automatically disables WPP.
                              To enable WPP with tiles, re-enable it after
                              enabling tiles. Enabling wpp with tiles is,
                              however, an experimental feature since it is
                              not supported in any HEVC profile.
     --tiles <int>x<int>    : Split picture into width x height uniform tiles.
     --tiles-width-split <string>|u<int> :
                                  - <string>: A comma-separated list of tile
                                              column pixel coordinates.
                                  - u<int>: Number of tile columns of uniform
                                            width.
     --tiles-height-split <string>|u<int> :
                                  - <string>: A comma-separated list of tile row
                                              column pixel coordinates.
                                  - u<int>: Number of tile rows of uniform
                                            height.
     --slices <string>      : Control how slices are used.
                                  - tiles: Put tiles in independent slices.
                                  - wpp: Put rows in dependent slices.
                                  - tiles+wpp: Do both.
     --partial-coding <x-offset>!<y-offset>!<slice-width>!<slice-height>
                            : Encode partial frame.
                              Parts must be merged to form a valid bitstream.
                              X and Y are CTU offsets.
                              Slice width and height must be divisible by CTU
                              in pixels unless it is the last CTU row/column.
                              This parameter is used by kvaShare.


Video Usability Information:
     --sar <width:height>   : Specify sample aspect ratio
     --overscan <string>    : Specify crop overscan setting [undef]
                                  - undef, show, crop
     --videoformat <string> : Specify video format [undef]
                                  - undef, component, pal, ntsc, secam, mac
     --range <string>       : Specify color range [tv]
                                  - tv, pc
     --colorprim <string>   : Specify color primaries [undef]
                                  - undef, bt709, bt470m, bt470bg,
                                    smpte170m, smpte240m, film, bt2020
     --transfer <string>    : Specify transfer characteristics [undef]
                                  - undef, bt709, bt470m, bt470bg,
                                    smpte170m, smpte240m, linear, log100,
                                    log316, iec61966-2-4, bt1361e,
                                    iec61966-2-1, bt2020-10, bt2020-12
     --colormatrix <string> : Specify color matrix setting [undef]
                                  - undef, bt709, fcc, bt470bg, smpte170m,
                                    smpte240m, GBR, YCgCo, bt2020nc, bt2020c
     --chromaloc <integer>  : Specify chroma sample location (0 to 5) [0]

 

 

 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章