FFmpeg
簡介與其他資料:
http://www.mobile01.com/topicdetail.php?f=510&t=3734550
簡介
過濾器流程圖 (Filter Graphs)是用來描述使用過濾器組、參數設定、處理流程。用於 `-vf`,`-af`, `-filter`, `-filter_complex` 選項的引數 (例如 `-filter:v filtergraphs`)。Filter Graphs 有基本型與複雜型兩種形式,對於多進一出或一進多出等這類輸入與輸出串流數量不同的過濾器僅能用在複雜型,例如 `overlay` 是將一個輸入影像與另一個輸入影像重疊合成一個影像輸出。
過濾器描述
`filtergraphs` 中使用過濾器名稱呼叫過濾器,必須是註冊在程式中之一的過濾器類的名稱。過濾器名稱與參數組以 '=' 字元連接組成: `filter_name=arguments` 。若省略 `=arguments` 則全部的參數將應用預設值。
使用 Non-local means 去雜訊全預設值:
nlmeans
`arguments` 是一個字串,為過濾器的參數(群),由參數設定參數名稱 (`key`) 與 設定值 (`value`) 以 '=' 字元連接組成: `key=value`,若參數使用預設值則可以省略。如果有多個參數設定,需以 ':' 字元區別各個參數設定,即 `key=value:key=value:key=value...`。如果參數設定按造順序排列,則參數名稱 (`key=`) 可以省略,即 `value:value:value:value...`。
使用 crop filter 將 1920x1080p 電影裁切黑邊(上下裁切使輸出高度為 800,上裁切為 140):
crop=w=iw:h=800:x=0:y=140
以上參數設定也等同下列 (省略參數名):
crop=iw:800:0:140
以上參數設定也等同下列 (省略預設值):
crop=h=800:y=140
註: `crop`/`scale`/`pad` filter `w`,`h` 預設值與輸入相同;`x`,`y` 預設值為 0。
多重過濾器
一個 Filter Chain 是由一系列的 filter 所組成,每個連接到序列中的前一個。需以 ',' 字元分隔篩選器描述: `filter_descriptions,filter_descriptions,filter_descriptions...`。
承上範例,裁切後縮放解析度到 1280x536 並填充黑邊到 16:9:
crop=h=800:y=140,scale=w=1280:h=536,pad=h=720:y=92
如果 filtergraphs 中帶有特殊字元(例如 `*` 或 `>`),則必須使用單引號 (`'string'`) 或雙引號 (`"string"`)。如果 filtergraph 含有空格,則只能使用 雙引號。※ Windows 命令提示字元下,單引號最大範圍只能包含 arguments,雙引號則是能包含整個 filtergraphs。
'value':
scale=w=1280:h='trunc(ow/dar/8+0.5)*8',setsar=r=1/1
'key[=value]':
scale=w=1280:'h=trunc(ow/dar/8+0.5)*8',setsar=r=1/1
'arguments':
scale='w=1280:h=trunc(ow/dar/8+0.5)*8',setsar=r=1/1
"filtergraphs":
"scale = w = 1280 : h = trunc(ow / dar / 8 + 0.5) * 8, setsar= r = 1 / 1"
複雜型式
在 `filter_name` 之前或 `arguments` 之後可以接著標籤(`[label]`)。標籤允許使用者命名連結標籤並將其與輸出或輸入關聯。`[stream_specifiers]filter_descriptions_1[label_1];[label_1]filter_descriptions_2[label_2];[label_2]filter_descriptions_3[label_3]`。複雜形式的 僅能使用在FilterGraphs `-filter_complex` 選項。
浮水印、雙聲道 (輸入檔案: #0:影片; #1:圖片檔):
[0:v]scale=640:360[base];[1:v]scale=64:64[mark];[base][mark]overlay[vid];[0:a:0]pan=stereo[aud]
流程說明: 輸入影片 `0:v` 使用 scale filter 將解析度縮放為 640x360,輸出串流命名為 `base`;輸入圖片 `1:v` 使用 `scale` filter 將解析度縮放為 64x64,輸出串流命名為 `mark`,使用 `overlay` filter 將 `mark` 覆蓋到 `base` 左上方 (預設座標 (0,0))。輸入音訊 `0:a:0` 縮混為雙聲道 (使用預設值),輸出串流命名為 `aud`。
輸入 96KHz 8ch 轉成 48KHz 5.1ch 與 48KHz 2ch:
[0:a:0]aresample=48000:async=1,asplit=2[temp1][temp2];[temp1]pan=5.1[a1];[temp2]pan=stereo[a2]
流程說明: 輸入音訊重新取樣成 48KHz 後用 `split` filter 分成 (複製出) 兩個一樣 (8ch 48KHz) 的音訊串流分別命名為 `temp1` 與 `temp2`,`temp1` 縮混到 5ch 輸出並重新命名為 `a1`;`temp2` 縮混到 2ch 並重新命名為 `a2`。
選取標籤
對於使用標籤重新命之後的串流,還必須使用 `-map '[label]'` 來選取它,若過濾器輸出串流沒有使用(`[label]`)重新命名,則不必使用 `-map` 來選取它。※ Windows 命令提示字元下,必須使用雙引號代替單引號: `-map "[label]"`
將輸入音訊複製一份並重新編碼為 FLAC 與 2ch AAC:
-filter_complex "[0:a:0]aresample=48000:async=1,asplit=2[temp1][temp2];[temp1]pan=5.1[a1];[temp2]pan=stereo[a2]" -map "[a1]" -map "[a2]" -c:a:0 flac -c:a:1 aac
承上範例,濾器輸出串流不使用標籤重新命名:
-filter_complex "[0:a:0]aresample=48000:async=1,asplit=2[temp1][temp2];[temp1]pan=5.1;[temp2]pan=stereo" -c:a:0 flac -c:a:1 aac
腳本
以一個純文字文件來包含 FilterGraphs。使用方式:將腳本檔案至於工作目錄下,使用 `-filter_script` 或 `-filter_complex_scrip` 選項,參數為腳本檔名,即可應用此 FilterGraphs。
FilterScript - 1280x720 自動黑邊:
```text
scale='w=min(1280,trunc((720*dar)/2+0.5)*2):h=min(720,trunc((1280/dar)/2+0.5)*2)',
pad='w=1280:h=720:x=(ow-iw)/2:y=(oh-ih)/2',
setsar='sar=1/1'
```
另存檔名為 letterbox_1280x720.txt,並放置在工作目錄下
執行 ffmpeg:
ffmpeg input.mkv -filter_script:v letterbox_1280x720.txt output.mp4
FilterScript - 2x2多重畫面的效果:
```text
nullsrc='size=1280x720'[base],
[0:v]scale='640x360'[upperleft],
[1:v]scale='640x360'[upperright],
[2:v]scale='640x360'[lowerleft],
[3:v]scale='640x360'[lowerright],
[base][upperleft] overlay='shortest=1'[tmp1],
[tmp1][upperright] overlay='shortest=1:x=640'[tmp2],
[tmp2][lowerleft] overlay='shortest=1:y=360'[tmp3],
[tmp3][lowerright] overlay='shortest=1:x=640:y=360'
```
另存檔名為 pbp2x2.txt,並放置在工作目錄下...
執行 ffmpeg:
ffmpeg input1.m2ts -i input2.m2ts -i input3.m2ts -i input4.m2ts -filter_complex_script pbp2x2.txt output.m2ts




























































































