簡介與其他資料:
- http://www.5i01.cn/topicdetail.php?f=510&t=3734550
FFmpeg 常用選項功能說明
由於 FFmpe 功能太龐大了,
所以以下只節錄一些常用選項的說明,
如果需要更詳細的說明,請查詢 ffmpeg Documentation。
基本用法
取得輸入檔案資訊
如果你要取得輸入檔案資訊,可以使用以下命令:
ffmpeg -hide_banner -i 輸入檔案
※-hide_banner 可以隱藏不必要的多余訊息
輸入/輸出設定
基本規則:
ffmpeg [選項] [[輸入選項] -i 輸入檔案]... {[輸出選項] 輸出檔案}...
部分選項可以用來作為輸入設定,也可以作為輸出設定
位於 -i 輸入檔案 之前則為 輸入檔案 的輸入設定,位於 輸出檔案 之前則為輸出設定
-c[:串流說明符] 編解碼器 (輸入/輸出)
-f 多工(解訊)器 (輸入/輸出)
所在位置會影響它們的功能:
ffmpeg -hide_banner -c:v 視訊解碼器 -c:a 音訊解碼器 -f 多工解訊器 -i 輸入檔 -c:v 視訊編碼器 -c:a 音訊編碼器 -f 多工器 輸出檔
通常不需要手動指定 解碼器 (Decoder)、多工解訊器 (Demuxer),因為 ffmpeg 會依輸入自動判斷
也不需要手動指定 多工器 (Muxer),ffmpeg 會依輸出副檔名自動判斷
額外的函式庫 (External Libraries)
如果你需要的 Codec 名稱是 lib 開頭
必須確認 ffmpeg 是否有所需的 lib,以 FDK AAC 為例
ffmpeg -version
檢查 configuration 里是否有 --enable-libfdk-aac
依此類推, x264 編碼器,就是 --enable-libx264
串流選取 (Stream selection)
如果你需要挑選輸入串流,你可以使用下列選項
-vn
禁用視訊輸出。
-an
禁用音訊輸出。
-sn
禁用字幕輸出。
-map 輸入檔案索引:串流說明符
挑選輸入串流。
詳細說明請見以下連結:
http://www.5i01.cn/topicdetail.php?f=510&t=4200388
選項 (Options)
串流說明符 (Stream specifiers)
有些選項應用於每個串流,例如位元率或編解碼器。串流說明符被用來精准的指定一個給定的選項屬於哪些串流。
串流說明符可用下列組合:
串流索引
匹配串流的索引。"1" 即代表第2個串流。
串流類型[:串流索引]
串流類型為以下之一: v 代表視訊 (video), a 代表音訊 (audio), s 代表字幕 (subtitle), d 代表資料 (data), t 代表附件 (attachments )。例如 -b:a:0 128k 即設定第1個音訊串流的輸出位元率為128kbps。若無指定串流索引則代表全部該類型串流,例如 -c:s copy 即復制全部字幕串流至輸出檔案內。
第3輸出軌的位元率為 640kbps
-b:2 640k
全部輸出音軌使用 libfdk_aac 重新編碼
-codec:a libfdk_aac
第2輸出音軌使用混合為6聲道
-ac:a:1 6
一般選項 (Generic options)
常用選項:
-L
授權條款
-h, -?, -help, --help [參數]
顯示說明,如果沒有參數則顯示基本說明。
可用參數如下:
long
顯示更多選項
full
顯示全部選項 (包括所有格式和編解碼器特定的選項
decoder=解碼器
顯示指定解碼器(decoder)訊息
encoder=編碼器
顯示指定編碼器(encoder)訊息
demuxer=多工解訊器
顯示指定多工解訊器(demuxer)訊息
muxer=多工器
顯示指定多工器(muxer)訊息
filter=篩選器
顯示指定篩選器(filter)訊息
-version
顯示版本訊息
-formats
列出可用檔案格式
-coders
列出可用的編解碼器
-decoders
列出可用的解碼器
-encoders
列出可用的編碼器
如果編解碼器是實驗性質,例如原生 AAC 編碼器
必須加上 "-strict experimental" 或 "-strict -2" 才能解鎖功能
-decoders
列出所有的解碼器
-filters
列出可用的篩選器
-pix_fmts
列出可用的像素格式
-sample_fmts
列出可用的取樣格式
-report
傾印完整命列與控制台輸出至目前目錄下一個名為 program-YYYYMMDD-HHMMSS.log 的檔案。
-hide_banner
所有FFmpeg的工具通常會顯示版權聲明,建置(build)選項和程式庫(library)版本。這個選項可以用來隱藏這些訊息。
主要選項 (Main options)
常用選項:
-f 多工解訊器 或 多工器 (輸出/輸入)
設定多工(解訊)器。
通常不需要用到此選項,因為 ffmpeg 會依據輸出/入副檔名自動判斷。
可用檔案格式表單 見 -fromats
-codec[:串流說明符] 編解碼器 (輸出/輸入,每個串流)
-c[:串流說明符] 編解碼器 (輸出/輸入,每個串流)
設定編解碼器 (Codec)。"copy" 為復制串流。
編解碼器表單 見 -encoders, -decoders
編解碼器說明 見 -h encoder=編碼器名稱, -h decoder=解碼器名稱
-i 檔案 (輸入)
設定輸入檔案。
-y (global)
當輸出檔案存在時,不詢問是否復蓋,直接復蓋輸出檔。
-n (global)
當輸出檔案存在時,不詢問是否復蓋,直接結束離開。
-ss 時間碼 (輸出/輸入)
選項為指定開時時間。時間碼格式為 六十進制 (hh:mm:ss[.xxx]) 或秒數。
當作為輸入選項(位於 -i 之前)時,將會定位/跳轉(seek)到指定時間點並歸零的當前時間戳記。
當作為輸出選項(位於 -i 之后)時,將會將會從頭開始解碼(並丟棄)到達指定時間點。
-t 時間碼 (輸出/輸入)
選項為指定持續時間。時間碼格式為 六十進制 (hh:mm:ss[.xxx]) 或秒數。
-to 時間碼 (輸出/輸入)
停止寫入輸出在此時間點。時間碼格式為 六十進制 (hh:mm:ss[.xxx]) 或秒數。
-target 類型 (輸出)
指定目標檔案類型。
'vcd, svcd, dvd, dv, dv50'
而類型可帶以下這些前輟,來使用相對應的標准。
'ntsc-, pal-, film-'
全部的輸出格式選項 (編碼器、位元率、緩沖) 將被自動設定為符合指定的類型。
例如 NTSC DVD-Video
ffmpeg -i input.mkv -target ntsc-dvd output.mpg
音訊選項 (Audio options)
常用選項:
-an (輸出)
禁用音訊輸出/入。
-acodec 音訊編碼器 (輸出)
設定音訊編碼器。"copy" 為復制音訊串流。
此選項已過於老舊,建議改用新選項 -codec/-c
-ar[:串流說明符] 頻率 (輸出/輸入,每個串流)
重新取樣 (resample) 音訊,單位為 Hz。重新取樣成 48kHz: -ar 48000
需要詳細設定請改用 aresample filter。
-ac[:串流說明符] 聲道數 (輸出/輸入,每個串流)
縮混 (downmix) 音訊的聲道。例如 5.1 -ac 6 。需要詳細設定請改用 pan filter。
可用值: 0, 1, 2, 4, 5, 6, 8
-async 每秒取樣數量 (輸出)
音訊同步方法。"伸展/擠壓"音訊串流去匹配時間戳記 (TimeStamp),該參數是音訊每秒最大的改變取樣。-async 1 是一個特殊的 case 只會校正音訊串流的開頭而之后的都不會。默認值是 0,因此不會做處里。
此選項已被棄用。使用 aresample 音訊 filter 代替。
-af filtergraph (輸出)
-filter[:串流說明符] filtergraph (輸出,每個串流)
見下文 Filter。
視訊選項 (Video options)
常用選項:
-vn (輸出)
禁用視訊輸出。
-vcodec 視訊編碼器 (輸出)
設定視訊編碼器。"copy" 為復制視訊串流。
此選項已過於老舊,建議改用新選項 -codec/-c
-r[:串流說明符] 划格率 (輸出/輸入,每個串流)
設定視訊的划格率 (frame rate,單位為 Hz 或 fps,分數 或 縮寫)。
例如: -r 23.976 或 -r 24000/1001
-aspect[:串流說明符] 比例 (輸出,每個串流)
設定視訊的顯示寬高比。需要詳細設定請改用 setdar 或 stesar filter。
例如: -aspect 1.77778 或 -aspect 16:9
-vsync 參數
視訊同步方法。
參數:
0, passthrough
不改變划格的時間戳記。
1, cfr
復制划格或刪除划格,使輸出為 恆定划格率 (CFR)。
2, vfr
不改變划格的時間戳記,但移除重復時間戳記的划格。
drop
破壞原本的時間戳記,以指定的 fps 為基礎產生新的時間戳記。
-1, auto
根據 muxer 自動選擇 1 或 2。
-vf filtergraph (輸出)
-filter[:串流說明符] filtergraph (輸出,每個串流)
見下文 篩選器 (Filter)。
字幕選項 (Subtitle options)
常用選項:
-sn (輸出)
禁用字幕輸出/入。
-scodec 字幕格式 (輸出)
設定字幕格式 (Subtitle Format)。"copy" 為復制字幕串流。
此選項已過於老舊,建議改用新選項 -codec/-c
編解碼器選項 (Codec options)
如果要精准的指定一個給定的選項屬於哪些串流,
你可以使用串流說明符。
規則:
-選項名[:串流說明符] [設定值]
例如: 設定全部音訊串流皆轉換為 AC3 640kbps
ffmpeg -i input.mkv -c:v copy -c:a ac3 -b:a 640k output.mkv
常用選項:
b 位元率 (編碼,視訊,音訊)
設定串流的位元率 (bitrate),單位為 位元/秒 (bps, bits/sec)。
例如設定為 640kbps,設定值即 640k 或 640000
qscale 品質 (編碼,視訊,音訊)
q 品質 (輸出,每個串流)
設定串流品質 (Variable Bit Rate 模式)。
某些編碼器必須使用專用選項,見該編碼器說明。
profile Profile (編碼,視訊,音訊)
設定輸出串流的 Profile。見編碼器說明 -h encoder=編碼器名稱。
minrate 位元率 (編碼,視訊,音訊)
設定最小流量容許值 (每秒位元)。用處不多,最大用處是用來建立 CBR 編碼。
例如設定為 640kbps,設定值即 640k 或 640000
maxrate 位元率 (編碼,視訊,音訊)
設定最大流量容許值 (每秒位元)。bufsize 需要被設定。
例如設定為 640kbps,設定值即 640k 或 640000
bufsize 位元值 (編碼,視訊,音訊)
設定流量控制緩沖區大小 (位元)。
例如設定為 640kbits,設定值即 640k 或 640000
level 等級 (編碼,視訊,音訊)
設定輸出編碼等級。見編碼器說明 -h encoder=編碼器名稱。
pix_fmt 格式 (編碼,視訊)
轉換像素格式。
像素格式表單 見 -pix_fmts
keyint_min 整數 (編碼,視訊)
設定 GOP 最小值, 即 IDR-frames (keyframes) 最短間格。
g 整數 (編碼,視訊)
設定 GOP 最大值,即 IDR-frames (keyframes) 最長間格。
refs 整數 (編碼,視訊)
設定參考划格數 (reference frames)。
bf 整數 (編碼,視訊)
設定 B-Frames 最大連續數量。
cutoff 整數 (編碼,音訊)
設定截止頻寬。這將會過濾掉高於設定值的頻率。
編解碼器 (Codec)
查詢編解碼器訊息
如果要列出全部的編碼器或解碼器,則可用使以下命令:
-coders
列出所有的編解碼器
-decoders
列出所有的解碼器
-encoders
列出所有的編碼器
由於 FFmpeg 的編碼器或解碼器數量非常多,
螢幕緩沖區可能會不夠用,將無法看到完整的內容。
為了避免這問題,建議將 FFmpeg 輸出 Log 寫入 TXT 檔。
CMD:
ffmpeg -coders > list.txt
如果要查詢某一編碼器或解碼器的可用命令,則可用使以下命令:
-h encoder=編碼器名稱
顯示指定編碼器訊息
-h decoder=解碼器名稱
顯示指定解碼器訊息
呼叫編解碼器
如要呼叫編碼器或解碼,則可用使以下命令:
-codec[:串流說明符] 編解碼器
-c[:串流說明符] 編解碼器
指定編碼器來重新編碼串流說明符所指的串流
-vcodec 視訊編解碼器
等同: -coddec:a, -c:v 視訊編碼器
-acodec 音訊編解碼器
等同: -coddec:a, -c:a 音訊編碼器
-scodec 字幕編解碼器
等同: -coddec:s, -c:s 字幕編碼器
如你要為輸入指定解碼器或者為編碼器,則可以參考以下命令。
呼叫編碼器與解碼器:
ffmpeg -c:a dca -i input.dts -c:a libfdk_aac output.m4a
※通常可以省略解碼器設定,FFmpeg 將會自動呼叫合適的解碼器。
音訊編碼器 (Audio Encoders)
以下編碼器與選項只列出常用部分,詳細說明請參考官網說明文件。
※AAC-LC 品質
aac >= libfdk_aac > libfaac > libvo_aacenc
aac
AAC 音訊編碼器。此為實驗項目,必須使用 -strict experimental 解鎖。
推薦改用 libfdk_aac。
常用選項:
-strict experimental
解鎖實驗項目所必須。
-qscale[:串流說明符] 品質
-q[:串流說明符] 品質
設定音訊品質 (Variable Bit Rate 模式)。實驗項目,需要 -strict experimental
范圍為 0.1–10。VBR 是實驗性質的可能會產生比 CBR 更糟的結果。
-ab 位元率 (輸出)
-b[:串流說明符] 位元率
設定音訊位元率 (Available Bit Rate 模式)。
單位為 位元/秒 (bps, bits/sec)。
ac3, ac3_fixed
AC3 音訊編碼器。
常用選項:
-ab 位元率
-b[:串流說明符] 位元率
設定音訊位元率 (Available Bit Rate 模式)。
單位為 位元/秒 (bps, bits/sec)。
dca
DTS 音訊編碼器。此為實驗項目,必須使用 -strict experimental 解鎖。
常用選項:
-strict experimental
解鎖實驗項目,必須。
-profile[:串流說明符] Profile
設定音訊 Profile。它接受下列值之一:
‘dts’
DTS
‘dts_es’
DTS-ES
‘dts_96_24’
DTS 96/24
‘dts_hd_hra’
DTS-HD High Resolution Audio
‘dts_hd_ma’
DTS-HD Master Audio
vorbis
Vorbis 音訊編碼器。
常用選項:
-ab 位元率
-b[:串流說明符] 位元率
設定音訊位元率 (Available Bit Rate 模式)。
單位為 位元/秒 (bps, bits/sec)。
alac
ALAC 無損音訊編碼器。
常用選項:
-compression_level[:串流說明符] 等級
設定算法復雜度。范圍為 0–3。0 為最高速度編碼,但檔案較大,3 為最慢編碼但檔案最小。默認值為 3
flac
FLAC 無損音訊編碼器。
常用選項:
-compression_level[:串流說明符] 等級
設定算法復雜度。范圍為 0–12。0 為最高速度編碼,但檔案較大,12 為最慢編碼但檔案最小。默認值為 5
libfdk_aac
AAC 音訊編碼器 - FDK。此為 External Libraries,要使用此編碼器請確認 configuration 之中必需含有 --enable-libfdk-aac,或是參考 -encoders 的輸出訊息。
常用選項:
-ab 位元率
-b[:串流說明符] 位元率
設定音訊位元率 (Available Bit Rate 模式)。
單位為 位元/秒 (bps, bits/sec)。
如果使用了 VBR 編碼,此選項會被忽略。
-vbr[:串流說明符] 品質
設定音訊品質 (Variable Bit Rate 模式)。
范圍為 1–5,5 為最高品質。
目前,只有“aac_low”與“aac_he” Profile 支援 VBR 編碼。
-profile[:串流說明符] Profile
設定音訊 Profile。它接受下列值之一:
‘aac_low’
MPEG-4 AAC LC (default)
‘aac_he’
MPEG-4 HE-AAC (SBR)
‘aac_he_v2’
MPEG-4 HE-AAC v2 (SBR+PS)
‘aac_ld’
MPEG-4 AAC LD
‘aac_eld’
MPEG-4 AAC ELD
libvo_aacenc
AAC 音訊編碼器 - VisualOn。此為 External Libraries,要使用此編碼器請確認 configuration 之中必需含有 --enable-libvo_aacenc,或是參考 -encoders 的輸出訊息。
常用選項:
-ab 位元率
-b[:串流說明符] 位元率
設定音訊位元率 (CBR 模式)。
libopus
Opus 音訊編碼器。此為 External Libraries,要使用此編碼器請確認 configuration 之中必需含有 --enable-libopus,或是參考 -encoders 的輸出訊息。
常用選項:
-ab 位元率 (輸出)
-b[:串流說明符] 位元率
設定音訊位元率 (Available Bit Rate 模式)。
單位為 位元/秒 (bps, bits/sec)。
-vbr[:串流說明符] 模式
設定 VBR 模式。它接受下列值之一:
‘off’
不使用 VBR 模式,即 CBR 模式。
‘on’
使用 VBR 模式。
‘constrained’
使用 CVBR 模式。
-compression_level[:串流說明符] 等級
設定算法復雜度。范圍為 0–10。0 為最高速度編碼,但品質較低,10 為最慢編碼但品質最高。默認值為 10
libvorbis
Vorbis 音訊編碼器。此為 External Libraries,要使用此編碼器請確認 configuration 之中必需含有 --enable-libvorbis,或是參考 -encoders 的輸出訊息。
常用選項:
-qscale[:串流說明符] 品質
-q[:串流說明符] 品質
設定音訊品質 (Variable Bit Rate 模式)。
范圍為 0–10,10 為最高品質。3–6 是好的嘗試范圍。默認值為 -q:a 3
-ab 位元率
-b[:串流說明符] 位元率
設定音訊位元率 (Available Bit Rate 模式)。
單位為 位元/秒 (bps, bits/sec)。
libmp3lame
MP3 音訊編碼器 - LAME。此為 External Libraries,要使用此編碼器請確認 configuration 之中必需含有 --enable-libmp3lame,或是參考 -encoders 的輸出訊息。
常用選項:
-ab 位元率
-b[:串流說明符] 位元率
設定音訊位元率 (ABR 或 CBR 模式)。
如果使用了 VBR 編碼,此選項會被忽略。
-abr[:串流說明符] 1
使用 ABR 編碼模式於。FFmpeg 依賴 -b:a 選項來設定位元率。
-qscale[:串流說明符] 品質
-q[:串流說明符] 品質
設定音訊品質 (Variable Bit Rate 模式)。
范圍為 0–9,0 為最高品質。默認值為 -q:a 4
-compression_level[:串流說明符] 等級
設定算法復雜度。范圍為 0–9。但品質較低,0 為最慢編碼但品質最高,9 為最高速度編碼。
視訊編碼器 (Video Encoders)
以下編碼器與選項只列出常用部分,詳細說明請參考官網說明文件。
mpeg2video
MPEG-2 視訊編碼器。
常用選項:
-b[:串流說明符] 位元率
設定視訊位元率(1-Pass: ABR, 2-Pass: VBR)。
單位為 位元/秒 (bps, bits/sec)。
-qscale[:串流說明符] 品質
-q[:串流說明符] 品質
設定視訊品質 (Variable Bit Rate 模式)。
范圍為 1–31,1 為最高品值。
-maxrate[:串流說明符] 位元率
設定最大流量容許值 (每秒位元),bufsize 需要被設定。
-bufsize[:串流說明符] 位元值
設定流量控制緩沖區大小 (位元)。
mpeg4
MPEG-4 part 2 視訊編碼器。
常用選項:
-b[:串流說明符] 位元率
設定視訊位元率(1-Pass: ABR, 2-Pass: VBR)。
單位為 位元/秒 (bps, bits/sec)。
-qscale[:串流說明符] 品質
-q[:串流說明符] 品質
設定視訊品質 (Variable Bit Rate 模式)。
范圍為 1–31,1 為最高品值。
-maxrate[:串流說明符] 位元率
設定最大流量容許值 (每秒位元),bufsize 需要被設定。
-bufsize[:串流說明符] 位元值
設定流量控制緩沖區大小 (位元)。
libxvid
MPEG-4 part 2 視訊編碼器。
此為 External Libraries,要使用此編碼器請確認 configuration 之中必需含有 --enable-lixvid,或是參考 -encoders 的輸出訊息。
常用選項:
-b[:串流說明符] 位元率
設定視訊位元率(1-Pass: ABR, 2-Pass: VBR)。
單位為 位元/秒 (bps, bits/sec)。
-qscale[:串流說明符] 品質
-q[:串流說明符] 品質
設定視訊品質 (Variable Bit Rate 模式)。
范圍為 1–31,1 為最高品值。
-maxrate[:串流說明符] 位元率
設定最大流量容許值 (每秒位元),bufsize 需要被設定。
-bufsize[:串流說明符] 位元值
設定流量控制緩沖區大小 (位元)。
libvpx, libvpx-vp9
VP8 / VP9 視訊編碼器。
此為 External Libraries,要使用此編碼器請確認 configuration 之中必需含有 --enable-libvpx,或是參考 -encoders 的輸出訊息。
常用選項:
-b[:串流說明符] 位元率
設定視訊位元率。
單位為 位元/秒 (bps, bits/sec)。
-crf 設定值
即 vpxenc 的 CQ 位元率控制模式。設定視訊品質 (Variable Bit Rate 模式)。
設定值范圍: vp8: 4 - 63, vp9: -1 - 63。設定值越低則輸出品質越高。
將位元率設為 0 (-b:v 0),將確保每個划格 (frames) 所分配到的位元數足以達到一個恆定 (感官) 品質等級。若位元率不為 0,將確保一個恆定(感官)品質,並保值輸出位元率不超過設定位元率。
http://trac.ffmpeg.org/wiki/Encode/VP9#constantq
-speed[:串流說明符] 設定值
設定 品質/速度比。比較高的值以品質為代價提升編碼速度。
設定值范圍: vp8: -16 - 16, vp9: -8 - 8
-lossless 1
啟用無損編碼模式。
libx264, libx264rgb
MPEG-4 AVC / H.264 視訊編碼器。
此為 External Libraries,要使用此編碼器請確認 configuration 之中必需含有 --enable-libx264,或是參考 -encoders 的輸出訊息。
常用選項:
-b[:串流說明符] 位元率
設定視訊位元率。
單位為 位元/秒 (bps, bits/sec)。
-crf[:串流說明符] 值
設定恆定品質模式 (constant quality mode) 的品質。
范圍為 0–51.0,0 為最高品質。建議使用 18 - 26。默認值為 23
-qp[:串流說明符] 值
設定恆定量化率方法 (constant quantization rate control method) 參數。
范圍為 0–69,0 為最高品質 (無損)。建議使用 21 - 28。默認值為 23
-profile[:串流說明符] Profile
選擇視訊 Profile。它接受下列值之一:
以下為可用值:
‘baseline’
Baseline Profile (BP)
‘main’
Main Profile (MP)
‘high’
High Profile (HiP)
‘high10’
High 10 Profile (Hi10P)
‘high422’
High 4:2:2 Profile (Hi422P)
‘high444’
High 4:4:4 Predictive Profile (Hi444PP)
-preset[:串流說明符] Preset
平衡壓縮效率和編碼速度,速度越慢則效率 (畫質-位元率比) 越高
以下為可用值:
字串: ‘ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo’
或數值: 0-9
-tune[:串流說明符] Tune
最佳化編碼效果。
它接受下列值之一::
‘film’
電影 (膠片電影)。
‘animation’
動畫。例如卡通/日本動畫。
‘grain’
膠片顆粒。顆粒感很重的影片。
‘stillimage’
靜止影像。例如幻燈片效果的影片。
‘psnr’
優化 PSNR 值。
‘ssim’
優化 SSIM 值。
‘fastdecode’
快速解碼。用於低性能播放設備。
‘zerolatency’
零延遲。處里時間低延遲。主要用於直播等。
-refs[:串流說明符] 數量
設定參考划格最大數量。
-bf[:串流說明符] 數量
設定 B-Frame 最大連續數量。
-maxrate[:串流說明符] 位元率
設定最大流量容許值 (每秒位元),bufsize 需要被設定。
-bufsize[:串流說明符] 位元值
設定流量控制緩沖區大小 (位元)。
-fastfirstpass 參數
可用值:
0
不加速首次編碼。
1
加速首次編碼。
-x264opts[:串流說明符] config
-x264-params[:串流說明符] config
設定任何 x264 選項,見 x264 --fullhelp
config 語法:
[key[=value]][:key[=value]][:key[=value]]...
例如:
-x264-params level=30:bframes=0:weightp=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1:subq=6:8x8dct=0:trellis=0
libx265
MPEG-H HEVC / H.265 視訊編碼器。
此為 External Libraries,要使用此編碼器請確認 configuration 之中必需含有 --enable-lix265,或是參考 -encoders 的輸出訊息。
常用選項:
-b[:串流說明符] 位元率
設定視訊位元率。
單位為 位元/秒 (bps, bits/sec)。
-crf[:串流說明符] 值
設定恆定品質模式 (constant quality mode) 的品質。
范圍為 0–51.0,0 為最高品質。建議使用 18 - 26。默認值為 23
-preset[:串流說明符] Preset
平衡壓縮效率和編碼速度,速度越慢則效率 (畫質-位元率比) 越高
以下為可用值:
字串: ‘ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo’
或數值: 0-9
-tune[:串流說明符] Tune
最佳化編碼效果。
-x265-params[:串流說明符] config
設定任何 x265 選項,見 x265 --help。規則同 x264opts。
篩選器 (Filters)
篩選器
-filter[:串流說明符] filtergraph
-vf filtergraph
等同 -filter:v filtergraph
-af filtergraph
等同-filter:a filtergraph
-filter_complex filtergraph
用法參考以下連結:
http://www.5i01.cn/topicdetail.php?f=510&t=4200388
filtergraph 規則:
[篩選器[=篩選器設定]][,篩選器[=篩選器設定]][,篩選器[=篩選器設定]]...
篩選器設定 規則:
[參數[=值]][:參數[=值]]:參數[=值]]...
例如:
-vf crop=w=1920:h=800:x=0:y=140,scale=w=1280:h=528
如果篩選器設定含有特殊字符(例如 * 或 >),則必須使用 單引號('字串') 或 雙引號("字串"):
-vf scale='w=1280:h=trunc((ow/dar)/8+0.5)*8',setsar='r=1/1'
-vf scale=w=1280:'h=trunc((ow/dar)/8+0.5)*8',setsar='r=1/1'
-vf scale=w=1280:h='trunc((ow/dar)/8+0.5)*8',setsar=r='1/1'
如果含有 filtergraph 空格,則只能使用 雙引號:
-vf "scale = w = 1280 : h = trunc((ow / dar) / 8 + 0.5) * 8, setsar= r = 1 / 1"
※單引號最大范圍只能包含篩選器設定,而無法包含整個 filtergraph。
音訊篩選器 (Audio Filters)
以下篩選器、選項、參數、常數只有列出常用部分,完整說明請見官網說明文件。
volume
調整音量。默認值為 1.0
輸出音量 = 音量 * 輸入音量
----------------------------------------------------------------
范例:
‧音量減半
volume=0.5
或
volume=1/2
或
volume=-6.0206dB
lowpass
低通濾波器
參數:
frequency, f
Set frequency in Hz. Default is 500.
poles, p
Set number of poles. Default is 2.
width_type
Set method to specify band-width of filter.
h
Hz
q
Q-Factor
o
octave
s
slope
width, w
Specify the band-width of a filter in width_type units. Applies only to double-pole filter. The default is 0.707q and gives a Butterworth response.
aresample
重新取樣輸入的音訊。
‧重新取樣為 44.1 KHz
aresample=44100
參數:
resampler
設定重新取樣引擎. 默認值為 swr.
它接受下列值之一:
‘swr’
選擇原生的 SW Resampler。
‘soxr’
選擇SoX Resampler。
async
只能用於 SWR。簡單的參數 1 使用拉伸、擠壓、填充與修剪音訊串流去匹配時間戳記 (TimeStamp)。設定它為 1 將啟用填充與修剪,較大的數值代表該數據可被拉伸或擠壓的每一秒的取樣最大數量。默認值是 0,因此不會做處里。
matrix_encoding
選擇矩陣式立體聲編碼,必須搭配 -ac 選項。
它接受下列值之一:
‘none’
無
‘dolby’
Dolby
‘dplii’
Dolby Pro Logic II
----------------------------------------------------------------
范例:
‧重新取樣為 44.1 KHz 以及音訊同步與矩陣編碼
-ac 2 -af "aresample='44100:async=1:matrix_encoding=dplii'"
pan
混合聲道與特定增益等級。
參數形式為 "l:outdef:outdef:..."
新版參數形式為 "l|outdef|outdef|..."
l
為輸出聲道布局或聲道數。
outdef
為輸出聲道選擇,形式為 "out_name=[gain*]in_name[+[gain*]in_name...]"
out_name
輸出聲道定義。無論是 聲道名稱 (如: FL, FR, ...) 或是 聲道編號 (如: c0, c1, ...)
gain
聲道的系數。1 為音量不變。
in_name
輸入聲道使用。見 out_name;它不能夠混用聲道名稱與編號。
假設將 ‘=’ 取代為 ‘<’,然后該規格的增益將被正規化使總和為 1,以避免噪聲(Clipping Noise)。
----------------------------------------------------------------
范例:
‧調換左右聲道
pan='2:FL=FR:FR=FL'
‧5.1 聲道混合為 2.0 聲道
pan=stereo: FL < FL + 0.5*FC + 0.6*BL + 0.6*SL : FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
完整命令
ffmpeg -i input.mkv -af "pan='stereo| FL < FL + 0.5*FC + 0.6*BL + 0.6*SL | FR < FR + 0.5*FC + 0.6*BR + 0.6*SR'" output.mkv
channelsplit
分割來自輸入音訊串流的每個聲道為獨立的輸出串流。
參數:
channel_layout
輸入音訊串流的聲道布局。默認值為 "stereo"。
----------------------------------------------------------------
范例:
分割來自輸入音訊串流的立體聲為2個獨立的輸出串流:
ffmpeg -i input.m2ts -filter_complex output.mka
※如果輸入音訊聲道數大於2,則只會分割左右聲道。
分割來自輸入音訊串流的5.1聲道為6個獨立的輸出串流:
ffmpeg -i input.m2ts -filter_complex "channelsplit='channel_layout=5.1'" output.mka
分割來自輸入音訊串流的5.1聲道為6個獨立的輸出音訊檔案:
ffmpeg -i input.wav -filter_complex "channelsplit='channel_layout=5.1[FL][FR][FC][LFE][SL][SR]'" -map '[FL]' front_left.wav -map '[FR]' front_right.wav -map '[FC]' front_center.wav -map '[LFE]' lfe.wav -map '[SL]' side_left.wav -map '[SR]' side_right.wav
amerge
合並兩個或多個音訊串流為單獨一個的多聲道串流。
參數:
inputs
設定輸入數量。默認值為 2。
假如輸入的聲道聲道布局 (layout) 是不相交的,因此則相容,輸出的聲道布局被相應地設定且聲道會被重新排序為所需。假如輸入的聲道聲道布局 (layout) 不是不相交的,輸出將含有第一個輸入的全部聲道以及第二個輸入的全部聲道,依此規律,且輸出的聲道布局默認值為輸入聲道的總數。
例如,假如第一個輸入是 2.1 (FL+FR+LF) 且第二個輸入是 FC+BL+BR,則輸出為 5.1,聲道為以下順序: a1, a2, b1, a3, b2, b3 (a1 為第一個輸入的第一個聲道,b1 為第一個輸入的第一個聲道)。
另一方面,如果兩個輸入都是立體聲 (FL+FR),輸出聲道將會被排序為默認的順序: a1, a2, b1, b2,且輸出聲道布局將會擅自被設定為 4.0,也許是或也許不是期望值。
視訊篩選器 (Video Filters)
以下篩選器、選項、參數、常數只有列出常用部分,完整說明請見官網說明文件。
crop
裁切輸入視訊的寬高。
參數:
w, out_w
輸出視訊的高度。默認值為 in_w。
h, out_h
輸出視訊的寬度。默認值為 in_h。
x
左邊裁切范圍。默認值為 (in_w-out_w)/2
y
上邊裁切范圍。默認值為 (in_h-out_h)/2
keep_aspect
如果設定為1將使輸出顯示寬高比與輸入相同,由改變 SAR (sample aspect ratio)。其默認值為0。
(登入后即可檢視圖片)
out_w, out_h, x, y 參數均包含以下常數:
‘in_w, iw’
‘in_h, ih’
輸入寬度與高度。
‘out_w, ow’
‘out_h, oh’
輸出(裁切之后)的寬度與高度。
‘a’
即 iw / ih
‘sar’
輸入 sample aspect ratio
‘dar’
輸入顯示寬高比, 即 (iw / ih) * sar
----------------------------------------------------------------
范例:
‧左裁 8, 上裁 16, 右裁 32, 下裁 64。
crop='w=iw-8-32:h=ih-16-64:x=8,y=16'
‧1280x720, 左裁 8, 上裁 16, 右裁 32, 下裁 64。
crop='w=1240:h=640,x=8,y=16'
cropdetect
它不會做裁切,而是在掃描完畢后回報黑邊范圍、參考用裁切參數。可以 -ss 與 -t 設掃瞄范圍,掃影片中段即可。
參數:
limit
Set higher black value threshold, which can be optionally specified from nothing (0) to everything (255). An intensity value greater to the set value is considered non-black. It defaults to 24.
round
The value which the width/height should be divisible by. It defaults to 16. The offset is automatically adjusted to center the video. Use 2 to get only even dimensions (needed for 4:2:2 video). 16 is best when encoding to most video codecs.
reset_count, reset
Set the counter that determines after how many frames cropdetect will reset the previously detected largest video area and start over to detect the current optimal crop area. Default value is 0.
This can be useful when channel logos distort the video area. 0 indicates ’never reset’, and returns the largest area encountered during playback.
----------------------------------------------------------------
范例:
1. 執行掃描
ffmpeg -i input.m2ts -vf cropdetect=40:2:0 -f null -
2. 假設最終結果為
[Parsed_cropdetect_0 @ 026b64c0] x1:0 x2:1279 y1:88 y2:632 w:1280 h:544 x:0 y:88 pts:113279 t:113.279000 crop=1280:544:0:88
3. 進行裁切
ffmpeg -i input.m2ts -vf crop=1280:544:0:88 output.mkv
scale
縮放輸入視訊分辨率,使用 libswscale library。
scale 篩選器強制輸出顯示寬高比相同於輸入顯示比例, 通過改變像素寬高比來達成。
如果輸入影像格式不同於下一個過濾器所需的格式, scale 將轉換輸入為所需的格式。
參數:
width, w
height, h
設定輸出視訊寬高。默認值為與輸入相同。
假如值為 0 則輸出與輸入相同。
If one of the values is -1, the scale filter will use a value that maintains the aspect ratio of the input image, calculated from the other specified dimension. If both of them are -1, the input size is used
If one of the values is -n with n > 1, the scale filter will also use a value that maintains the aspect ratio of the input image, calculated from the other specified dimension. After that it will, however, make sure that the calculated dimension is divisible by n and adjust the value if necessary.
w, h 參數所包含的常數:
‘in_w, iw’
‘in_h, ih’
輸入寬度與高度。
‘out_w, ow’
‘out_h, oh’
輸出(縮放之后)的寬度與高度。
‘a’
即 iw / ih
‘sar’
輸入 sample aspect ratio
‘dar’
輸入顯示寬高比, 即 (iw / ih) * sar
----------------------------------------------------------------
范例:
‧縮放輸入視訊至 1280x720。
scale=1280:720
或
scale='w=1280:h=720'
或
scale=1280x720
‧縮放輸入視訊寬高至 1/2。
scale='w=iw/2:h=ih/2'
或
scale='w=iw/2:h=trunc((ow/dar)/2+0.5)*2'
或
scale='w=trunc((oh*dar)/2+0.5)*2:h=ih/2'
‧縮放輸入視訊寬至 1280,自動 高 為 mod 16。
scale='w=1280:h=trunc((ow/dar)/16+0.5)*16'
trunc() 為取整數,小數舍去。
‧縮放輸入視訊,寬小於或等於 720,高小或等於 480,像素寬高比為 40:33。
scale='w=min(720,trunc((480*33/40*dar)/2+0.5)*2):h=min(480,trunc((720*40/33/dar)/2+0.5)*2)'
pad
附加邊框至輸出影像。
參數:
width, w
height, h
輸出視訊的寬度與高度。默認值為與輸入相同。
設定值必須大於或等於輸入。
x
y
左與上邊框的范圍。
color
填充區域的顏色。默認值為 "black"。
(登入后即可檢視圖片)
w, h 參數所包含的常數:
‘in_w, iw’
‘in_h, ih’
輸入寬度與高度。
‘out_w, ow’
‘out_h, oh’
輸出(縮放之后)的寬度與高度。
‘a’
即 iw / ih
‘sar’
輸入 sample aspect ratio
‘dar’
輸入顯示寬高比, 即 (iw / ih) * sar
----------------------------------------------------------------
范例:
‧填充黑邊使輸出分辨率為 1920x1080,且上下邊界相等、左右邊界相等
pad='w=1920:h=1080:x=(ow-iw)/2:y=(oh-ih)/2'
‧上下填充黑邊 (mod 16) 使輸出顯示比例為 16:9,且上下邊界相等、左右邊界相等
pad='w=iw:h=trunc((ow*sar*9/16)/16)*16:x=0:y=(oh-ih)/2'
‧自動填充黑邊 (mod 16) 使輸出顯示比例為 16:9,且上下邊界相等、左右邊界相等
pad='w=max(iw,trunc((ih/sar*16/9)/2+0.5)*2):h=max(ih,trunc((iw*sar*9/16)/2+0.5)*2):x=(ow-iw)/2:y=(oh-ih)/2'
setdar, setsar
該 setsar 篩選器用於設定輸出視訊的顯示寬高比。
顯示寬高比 = 水平分辨率 / 垂直分辨率 * 像素寬高比
注意,setdar 篩選器並不會改變視訊的分辨率,而是透過改變 像素寬高比 來改變 顯示寬高比。
setsar 篩選器用於設定輸出視訊的 取樣 (又名"像素") 寬高比。
參數:
r, ratio, dar (setdar 專用), sar (setsar 專用)
設定比例。可以是浮點數或分數。
----------------------------------------------------------------
范例:
‧設定顯示比例為 16:9
setdar='r=16/9'
或
setdar='dar=16/9'
‧設定像素比例為 40:33
setsar='r=40/33'
或
setsar='sar=40/33'
subtitles
用 libass 繪制使用的字幕到輸出視訊上。
ffmpeg 的 configuration 之中必需含有 --enable-libass。
且 Windows 系統下需要 fonts-conf 才可以使 libass 正常工作,見詳細說明。
詳細說明:
http://www.5i01.cn/topicdetail.php?f=510&t=4462836
參數:
filename, f
設定字幕的檔案名稱來讀取。這是必用參數。
original_size
Specify the size of the original video, the video for which the ASS file was composed. For the syntax of this option, check the "Video size" section in the ffmpeg-utils manual. Due to a misdesign in ASS aspect ratio arithmetic, this is necessary to correctly scale the fonts if the aspect ratio has been changed.
charenc
設定輸入字幕的字符編碼。 subtitles 過濾器專用。 只有非 UTF-8 有用。
stream_index, si
設定字幕串流索引。 subtitles 過濾器專用。
force_style
復蓋字幕的默認樣式(Style)或是腳本的訊息參數。它接受一個字串包含ASS風格(style)格式:
force_style='KEY=VALUE[,KEY=VALUE][,KEY=VALUE][,KEY=VALUE]......'
----------------------------------------------------------------
范例:
‧指定輸入字幕檔名。由於無法指定路徑,所以字幕檔必須位於工作目錄。
subtitles=sub.srt
‧同上
subtitles='filename=sub.srt'
‧從影片檔讀取默認字幕串流。
subtitles=video.mkv
‧從影片檔讀取第二個字幕串流(第一個為#0,第二個為#1)。
subtitles='video.mkv:si=1'
‧強制復蓋字幕風格為透明綠色微軟正黑體
subtitles=sub.srt:force_style='FontName=Microsoft JhengHei,PrimaryColour=&HAA00FF00'
yadif
反交錯 (Deinterlace) 輸入視訊。
參數:
mode
交錯模式采取。它接受下列值之一:
‘0, send_frame’
每一畫格 (frame) 輸出為一個划格 (frame)。
‘1, send_field’
每一場 (field) 輸出為一個划格 (frame)。
‘2, send_frame_nospatial’
如 send_frame, 但跳過空間域 (spatial) 交錯檢查。
‘3, send_field_nospatial’
如 send_field, 但跳過空間域 (spatial) 交錯檢查。
該默認值為 send_frame.
parity
假設輸入交錯視訊的圖像場奇偶 (field parity)。 它接受以下值之一:
‘0, tff’
頂場 (top field) 優先。
‘1, bff’
底場 (bottom field) 優先.
‘-1, auto’
啟用場奇偶的自訂檢測。
該默認值是 auto。 如果該交錯是未知或者編碼器沒有匯出此訊息則 tff 將被假定。
deint
指定那些划格來反交錯。它接受下列值之一:
‘0, all’
反交錯全部划格.。
‘1, interlaced’
只有交錯划格。
該默認值為 all.
hqdn3d
This is a high precision/quality 3d denoise filter. It aims to reduce image noise, producing smooth images and making still images really still. It should enhance compressibility.
It accepts the following optional parameters:
luma_spatial
A non-negative floating point number which specifies spatial luma strength. It defaults to 4.0.
chroma_spatial
A non-negative floating point number which specifies spatial chroma strength. It defaults to 3.0*luma_spatial/4.0.
luma_tmp
A floating point number which specifies luma temporal strength. It defaults to 6.0*luma_spatial/4.0.
chroma_tmp
A floating point number which specifies chroma temporal strength. It defaults to luma_tmp*chroma_spatial/luma_spatial.
transpose
旋轉輸入視訊的畫面。
參數:
dir
指定旋轉方向:
‘0, 4, cclock_flip’
逆時針方向旋轉 90 度 並垂直鏡射
‘1, 5, clock’
順時針方向旋轉 90 度
‘2, 6, cclock’
逆時針方向旋轉 90 度
‘3, 7, clock_flip’
順時針方向旋轉 90 度 並垂直鏡射
For values between 4-7, the transposition is only done if the input video geometry is portrait and not landscape. These values are deprecated, the passthrough option should be used instead.
passthrough
Do not apply the transposition if the input geometry matches the one specified by the specified value. It accepts the following
‘none’
Always apply transposition.
‘portrait’
Preserve portrait geometry (when height >= width).
‘landscape’
Preserve landscape geometry (when width >= height).
Default value is none.
----------------------------------------------------------------
范例:
例 90度順時針旋轉,並保留縱向布局:
transpose=dir=1:passthrough=portrait
或
transpose=1:portrait
vflip
垂直鏡射/上下翻轉 (無參數)。
hflip
水平鏡射/左右翻轉 (無參數)。