FFmpeg
簡介與其他資料:
http://www.mobile01.com/topicdetail.php?f=510&t=3734550
視訊篩選器 (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
設定更黑色的閾值,大於設定值將被當作非黑色。範圍 0 - 255。預設值為 24。
round
輸出能被設定值所整除的解析度。預設值為 16。對於大多數編碼氣 16 是最好的選擇。
reset_count, reset
設定多少影格之後重新開始檢測過程。預設值為 0。這對於頻道圖示或浮水印扭曲畫面邊界時會很有用。0 表示不重置,將會回報檢測到的畫面最大範圍。
範例:
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 則輸出與輸入相同。
將寬或高其中之一設為 -n 時,FFmpeg 將會自動計算輸出正方形像素影像時可以維持顯示比例的值,且向上取最接近可以被 n 給整除的數值。例如輸入 DAR 為 2.4:1, w=1280, h=-16,由計算得到若要維持 DAR 高度必須要是 533 (1280/2.4=533.333...) ,因為 533 不能被 16 整除,向上取能被 16 整除的值也就是 544。
flags
設定 libswscale 縮放旗標。完整設定值列表見 sws_flags。如果未明確指定,filter 將使用預設旗標。
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
使用 Lanczos 演算法:
scale='w=1280:h=720:flags=lanczos'
‧縮放輸入視訊寬高至 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.mobile01.com/topicdetail.php?f=510&t=4462836
參數:
filename, f
設定字幕的檔案名稱來讀取。這是必用參數。
original_size
指定原始影片的畫面大小。由於 ASS 寬高比演算法中的錯誤設計,如果寬高比已被改變,則必須正確縮放字體。
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’
輸入為頂場優先 (TFF, Top Field First)。
‘1, bff’
輸入為底場優先 (BFF, Bottom Field First).
‘-1, auto’
啟用圖場奇偶的自訂檢測。
該預設值是 auto。 如果該交錯是未知或者編碼器沒有匯出此訊息則 tff 將被假定。
deint
指定那些畫格來反交錯。它接受下列值之一:
‘0, all’
反交錯全部畫格.。
‘1, interlaced’
只有交錯畫格。
該預設值為 all.
bwdif
反交錯 (Deinterlace) 輸入視訊。
動態適應性去交錯(motion adaptive deinterlacing)以 yadif 為基礎 使用 w3fdif 與三次插值 (cubic interpolation) 演算法。
參數:
mode
交錯模式採取。它接受下列值之一:
‘0, send_frame’
每一畫格 (Frame) 輸出為一個畫格 (Frame)。
‘1, send_field’
每一圖場 (Field) 輸出為一個畫格 (Frame)。
該預設值為 send_frame.
parity
假設輸入交錯視訊的圖像場奇偶 (Field Parity)。 它接受以下值之一:
‘0, tff’
輸入為頂場優先 (TFF, Top Field First)。
‘1, bff’
輸入為底場優先 (BFF, Bottom Field First).
‘-1, auto’
啟用圖場奇偶的自訂檢測。
該預設值是 auto。 如果該交錯是未知或者編碼器沒有匯出此訊息則 tff 將被假定。
deint
指定那些畫格來反交錯。它接受下列值之一:
‘0, all’
反交錯全部畫格.。
‘1, interlaced’
只有交錯畫格。
該預設值為 all.
nnedi
影像反交錯,使用 Neural Network Edge Directed。
此為 FFmpeg 目前所支援效果最佳的影像反交錯Filter。
此 filter 需要二進位檔案 (nnedi3_weights.bin),將它放到工作目錄下即可。
https://github.com/dubhater/vapoursynth-nnedi3/blob/master/src/nnedi3_weights.bin
參數:
field
設定操作模式。它接受下列值之一:
‘af’
自動,兩個場 (Both Fields) 各輸出為一張畫格 (Frame)。
‘a’
自動,只使用其中一場 (Single Field)。
‘t’
只使用頂圖場 (Top Filed)。
‘b’
只使用底圖場 (Bottom Filed)。
‘tf’
使用頂圖場,輸入為頂場優先 (TFF, Top Field First)。
‘bf’
使用底圖場,輸入為底場優先 (BFF, Bottom Field First)。
deint
指定那些畫格來反交錯。它接受下列值之一:
‘all’
反交錯全部畫格.。
‘interlaced’
只有交錯畫格。
該預設值為 all.
hqdn3d
高精度/品質3D雜訊消除Filter。
產生乾淨(低雜訊)的影像,使靜態畫面真正靜止,這應該可以提升壓縮率。
詳情: https://ffmpeg.org/ffmpeg-all.html#hqdn3d
nlmeans
影像雜訊消除,使用非局部平均演算法。
此為 FFmpeg 目前所支援效果最佳的影像降噪Filter。
參數:
s
設定降躁強度。可用範圍 [1.0-30.0],預設值 1.0。
詳情: https://ffmpeg.org/ffmpeg-all.html#nlmeans
transpose
旋轉輸入視訊的畫面。
參數:
dir
指定旋轉方向:
‘0, 4, cclock_flip’
逆時針方向旋轉 90 度 並垂直鏡射
‘1, 5, clock’
順時針方向旋轉 90 度
‘2, 6, cclock’
逆時針方向旋轉 90 度
‘3, 7, clock_flip’
順時針方向旋轉 90 度 並垂直鏡射
對於 4-7 之間的值,只在輸出畫面為縱向時作用。這些值已經棄用,應該改用 passthrough 選項。
passthrough
當輸出畫面幾何圖形匹配指定值時不旋轉。
‘none’
總是旋轉畫面。
‘portrait’
保留縱向畫面 (當高度大於寬度時不旋轉畫面)。
‘landscape’
保留橫向畫面 (當寬度大於高度時不旋轉畫面)。
預設值為 none.
範例:
例 90度順時針旋轉,並保留縱向佈局:
transpose=dir=1:passthrough=portrait
或
transpose=1:portrait
vflip
垂直鏡射/上下翻轉 (無參數)。
例:
ffmpeg -i input.mp4 -vf vflip output.mp4
hflip
水平鏡射/左右翻轉 (無參數)。
例:
ffmpeg -i input.mp4 -vf hflip output.mp4