FFmpeg 經常使用選項功能說明(視頻專家地址)

簡介與其餘資料:
  - http://www.5i01.cn/topicdetail.php?f=510&t=3734550

php

FFmpeg 經常使用選項功能說明


因爲 FFmpe 功能太龐大了,
因此如下只節錄一些經常使用選項的說明,
若是須要更詳細的說明,請查詢 ffmpeg Documentation


html

基本用法

 

取得輸入檔案資訊



若是你要取得輸入檔案資訊,可使用如下命令:算法

ffmpeg -hide_banner -i 輸入檔案


※-hide_banner 能夠隱藏沒必要要的多餘訊息

app

輸入/輸出設定



基本規則:less

ffmpeg [選項] [[輸入選項] -i 輸入檔案]... {[輸出選項] 輸出檔案}...


部分選項能夠用來做爲輸入設定,也能夠做爲輸出設定
位於 -i 輸入檔案 以前則爲 輸入檔案 的輸入設定,位於 輸出檔案 以前則爲輸出設定

-c[:串流說明符] 編解碼器 (輸入/輸出)
-f 多工(解訊)器 (輸入/輸出)
所在位置會影響它們的功能:async

ffmpeg -hide_banner -c:v 視訊解碼器 -c:a 音訊解碼器 -f 多工解訊器 -i 輸入檔 -c:v 視訊編碼器 -c:a 音訊編碼器 -f 多工器 輸出檔


一般不須要手動指定 解碼器 (Decoder)、多工解訊器 (Demuxer),由於 ffmpeg 會依輸入自動判斷
也不須要手動指定 多工器 (Muxer),ffmpeg 會依輸出副檔名自動判斷

ide

額外的函式庫 (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



水平鏡射/左右翻轉 (無參數)。


多工解訊器 (Demuxer)






多工器 (Muxers)

相關文章
相關標籤/搜索