2017年6月15日 星期四

簡單ffmpeg指令

ffmpeg 係乜, 一個自由軟體(freeware),可以執行音訊和視訊多種格式的錄影、轉檔、串流功能,包含了libavcodec——這是一個用於多個專案中音訊和視訊的解碼器函式庫,以及libavformat——一個音訊與視訊格式轉換函式庫。
↑維基係咁講的.

好, 咁佢實際有咩用呢, 等我廢up下佢幾種簡單o既用法啦.


  1. 剪片, 即係抽條片中間一段仔出黎 (Seeking)
  2. 合併片, 即係將兩條片合二為一 (Concat)
  3. 嚮條片上下左右加o的空位 (Padding)
  4. 嚮條片上面加o的圖上去 (overlay)


1. 剪片, 即係抽條片中間一段仔出黎 (Seeking)

ffmpeg -i input.mp4 -ss 00:00:03 -to 00:00:58 output.mp4

input.mp4output.mp4 我唔講喇, 咁都唔明真係幫你唔到.
-ss 00:00:03 即係由第3秒開始
-to 00:00:58 即係去到 input.mp4 o既第58秒

再準確o的個時間可以寫成 01:02:03.4 即係1小時2分3點4秒


2. 合併片, 即係將兩條片合二為一 (Concat)

ffmpeg -i INPUT1.mp4 -i INPUT2.mp4 -filter_complex "[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" OUTPUT.mp4

有埋顏色會易明o的
合併片有少少複雜, 你首先要明白其實一條片, 最簡單係由一條影片同一條聲軌組成
咁例子就係 INPUT1.mp4 同 INPUT2.mp4 都各自有一條video stream加一條audio stream
INPUT1.mp4 video:stream 0 audio:stream 1
INPUT2.mp4 video:stream 0 audio:stream 1
我地將兩條片o既 video stream 組合成 , 而 audio stream 組合成 a

至於 concat=n=2:v=1:a=1 呢句野點解呢,
就係新o個條片有2條stream, 一條video同一條audio.

p.s. Advance o的o既玩法, 可以合埋三條片, 而每條片都有2個audio stream架喎, 咁句command 就會變成

ffmpeg -i INPUT1.mkv -i INPUT2.mkv -i INPUT3.mkv -filter_complex "[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2] concat=n=3:v=1:a=2 [v] [a1] [a2]" -map "[v]" -map "[a1]" -map "[a2]" OUTPUT.mkv


詳情可以睇呢度 http://ffmpeg.org/ffmpeg-filters.html#concat

3. 嚮條片上下左右加o的空位 (Padding)

ffmpeg -i INPUT.mp4 -vf "pad=width=1480:height=920:x=-1:y=-1:color=red" OUTPUT.mp4  

Padding, 墊Pad, 即係裝假狗.
咁塊Pad就墊嚮後面, 條原片就放嚮塊Pad上面, 好似下圖咁.

嗱, 紅色o個塊就係Pad喇,
width=1480:height=920 即係塊Pad o既長度同濶度
x=-1:y=-1 即係 INPUT.MP4 o既位置, 而 -1 就即係放正中間
color=red 即係塊 Pad o既顏色.

4. 嚮條片上面加o的圖上去 (overlay)

ffmpeg -i INPUT.mp4 -i INPUT2.jpg -i INPUT3.jpg -filter_complex "[0][1]overlay=x=0:y=0[v1];[v1][2]overlay=x=0:y=1500[v2]" -map "[v2]" -map 0:a OUTPUT.mp4

呢個Command 呢, 就係同一時間加兩張圖上去. 
[0] 呢個代表 INPUT.mp4
[1] 呢個代表 INPUT2.jpg
[2] 呢個代表 INPUT3.jpg



個 filter_complex 可以睇成兩個動作
[0][1]overlay=x=0:y=0[v1]; 將 [0] 同 [1] 合併成 [v1] , 而 [1] 就放嚮 x,y 呢個坐標度
[v1][2]overlay=x=0:y=1500[v2] [v1][2] 合併成 [v2, 而 [2]就放嚮 x,y 呢個坐標度

-map "[v2]" 咁呢個 map 呢, 就係將頭先個 [v2] 放落個 OUTPUT.mp4
-map 0:a 而呢個 map , 就將個 0, 即係 INPUT.mp4 o既 audio 放落個 OUTPUT.mp4



沒有留言: