FFmpeg

簡介與其他資料:
http://www.mobile01.com/topicdetail.php?f=510&t=3734550

其他範例:
http://www.mobile01.com/topicdetail.php?f=510&t=4487462


說明

Intel QSV (Quick Sync Video) 是使用 Intel CPU 與 Graphics 的硬體編/解碼技術。
要使用 QSV,Intel CPU 內建的 Graphics 必須在啟用狀態。注意 (CPU)Graphics 必須要相容 QSV 與 OpenCL。一些 (比較舊的) QSV 啟用 Graphics 與 OpenCL 不相容。
FFmpeg 對於 QSV 的支援依賴 libmfx,此為額外的函式庫,FFmpeg 的 configuration 之中必須有 --enable-libmfx 才能在 FFmpeg 上使用 OSV 編碼器。


編碼格式

AVC / H.264:
ffmpeg -i input.m2ts -c:v h264_qsv output.mp4

HEVC / H.265:
ffmpeg -i input.m2ts -c:v hevc_qsv output.mp4


列出可用選項

列出 h264_qsv 可用選項:
ffmpeg -h encoder=h264_qsv

列出 hevc_qsv 可用選項:
ffmpeg -h encoder=hevc_qsv


速率控制 (Rate control)

速率控制是指決定多少位元將被用於每個畫格的方法。這將決定檔案大小且品質如何分布。以品質為基礎 (quality-based) 的模式允許編碼器自動分配位元速率來試著讓每個畫格得到它需要的位元數來保持所需的品質等級。以位元速率為基礎 (bitrate-based) 的模式允許使用者手動指定一個平均位元速率為輸出目標。quality-based 的優點是能得到更合理的分配位元率,讓每個畫格得到它需要的位元數來達到所需的品質等級,所以通常建議使用 quality-based 的模式,若是對位元率或檔案大小有嚴格要求的應用,例如網路直播或是光碟的媒體內容等等....則建議使用 bitrate-based 的模式。

以品質為基礎 (quality-based) 的模式

-global_quality 設定值
設定目標品質,設定值可用範圍 1-51 預設為 23,數值越小輸出品質越佳。
可用模式 CQP, ICQ. LA_ICQ. ※不同的 QSV 版本支援的模式與預設模式不同。
推薦: LA_ICQ > ICQ > CQP

以下示範如何設定速率控制模式:

LA_ICQ (啟用 look_ahead):
-global_quality:v 20 -look_ahead 1

ICQ (禁用 look_ahead):
-global_quality:v 20 -look_ahead 0

CQP (使用 qscale 旗標):
-flag:v qscale -global_quality:v 20

CQP (與上面的範例相同意義):
-q:v 20


以位元速率為基礎 (bitrate-based) 的模式

-b 位元率
設定目標平均位元率。
可用模式 CBR, VBR, LA_VBR/LA, AVBR, VCM. ※不同的 QSV 版本支援的模式與預設模式不同。

以下示範如何設定速率控制模式:

LA_VBR / LA (啟用 look_ahead 選項):
-b:v 2000k -look_ahead 1

VBR (使用 maxrate 選項指定最大值位元率):
-b:v 2000k -maxrate:v 4000k -look_ahead 0

CBR (使用 maxrate 選項指定最大值位元率與平均位元率相同):
-b:v 2000k -maxrate:v 4000k -look_ahead 0

VCM (啟用 vcm):
-b:v 2000k -look_ahead 0 -vcm 1


顯示詳細編碼器訊息

注意: 根據你的系統,編碼器可能選擇與你指定的模式不同的模式。將 loglevel 設定為 verbose 或更高來檢視 QSV 編碼器執行時實際使用的模式與設定值。

例如:
ffmpeg -i input.mkv -loglevel verbose -c:v h264_qsv -global_quality 20 -look_ahead 0 output.mp4

輸出訊息:
[h264_qsv @ 0000000002530dc0] Initialized an internal MFX session using hardware accelerated implementation
[h264_qsv @ 0000000002530dc0] Using the intelligent constant quality (ICQ) ratecontrol method
[h264_qsv @ 0000000002530dc0] profile: high; level: 31
[h264_qsv @ 0000000002530dc0] GopPicSize: 250; GopRefDist: 4; GopOptFlag: closed ; IdrInterval: 0
[h264_qsv @ 0000000002530dc0] TargetUsage: 4; RateControlMethod: ICQ
[h264_qsv @ 0000000002530dc0] ICQQuality: 20
[h264_qsv @ 0000000002530dc0] NumSlice: 1; NumRefFrame: 2
[h264_qsv @ 0000000002530dc0] RateDistortionOpt: OFF
[h264_qsv @ 0000000002530dc0] RecoveryPointSEI: OFF IntRefType: 0; IntRefCycleSize: 0; IntRefQPDelta: 0
[h264_qsv @ 0000000002530dc0] MaxFrameSize: 261120; MaxSliceSize: 0;
[h264_qsv @ 0000000002530dc0] BitrateLimit: ON; MBBRC: ON; ExtBRC: unknown
[h264_qsv @ 0000000002530dc0] Trellis: auto
[h264_qsv @ 0000000002530dc0] RepeatPPS: ON; NumMbPerSlice: 0; LookAheadDS: 2x
[h264_qsv @ 0000000002530dc0] AdaptiveI: unknown; AdaptiveB: unknown; BRefType: off
[h264_qsv @ 0000000002530dc0] MinQPI: 0; MaxQPI: 0; MinQPP: 0; MaxQPP: 0; MinQPB: 0; MaxQPB: 0
[h264_qsv @ 0000000002530dc0] Entropy coding: CABAC; MaxDecFrameBuffering: 2
[h264_qsv @ 0000000002530dc0] NalHrdConformance: OFF; SingleSeiNalUnit: ON; VuiVclHrdParameters: OFF VuiNalHrdParameters: OFF


FFmpeg (libavcodec) 選項映射到 MSDK 選項

libavcodec                      -> MSDK
-g <integer> -> GopPicSize
-bf <integer> -> GopRefDist
-rc_init_occupancy <integer> -> InitialDelayInKB
-slices <integer> -> NumSlice
-refs <integer> -> NumRefFrame
-b_strategy <integer> -> BRefType
-flags cgop -> GopOptFlag
-i_qfactor <float> -> QP factor between P and I frames.
-b_qfactor <float> -> QP factor between P and B frames.
-i_qoffset <float> -> QP offset between P and I frames.
-b_qoffset <float> -> QP offset between P and B frames.
-coder vlc -> CAVLC (H.264 encoder)


文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!