以底下的某化妝品廣告影片為例:
分析原廣告片,在 00:02:28.500 和 00:02:46.001 以後各有 1.5 秒 和 2 秒長的時間會出現商品的名稱,另外在 00:03:13 以後會有全版的廣告。片尾的廣告只要截掉不取即可,不過中間會有兩段要為商品名稱加上馬賽克。
本篇中會使用到兩個工具,都可以在網路中找到:
影片下載
在 YouTube 中的影片,可以利用 youtube-dl 下載。假設我們將下載回來的 FullHD 的影片儲存為 source.mp4。切割影片
利用 ffmpeg 將原始影片(本例中的 source.mp4)切割為五分段,並輸出為 s1.mp4、s1.mp4、s1.mp4、s1.mp4、s1.mp4,五個影片檔。指令如下:ffmpeg -i source.mp4 -ss 00:00:00.00 -t 00:02:28.500 -y -c copy s1.mp4
ffmpeg -i source.mp4 -ss 00:02:28.501 -t 00:00:01.500 -y -c copy s2.mp4
ffmpeg -i source.mp4 -ss 00:02:30.001 -t 00:00:16.000 -y -c copy s3.mp4
ffmpeg -i source.mp4 -ss 00:02:46.001 -t 00:00:02.00 -y -c copy s4.mp4
ffmpeg -i source.mp4 -ss 00:02:48.001 -t 00:00:25.00 -y -c copy s5.mp4
上述指令中,「-ss」設定了分段影片的開始時間,而「-t」設定了分段影片的長度。
加馬賽克
我們可以利用 ffmpeg 的濾鏡功能來為 s2.mp4 和 s4.mp4 這兩段有 mark 的地方加上馬賽克。下載回來的影片,解析度是 1920 x 1080 ,而
- s2.mp4 中需要加馬賽克的大小假設為 960x540,放置的座標為 (380,270)
- s4.mp4 中需要加馬賽克的大小假設為 1160x540,放置的座標為 (380,270)
最後再用原來的檔名覆蓋儲存即可。執行底下的兩行指令:
ffmpeg -i s2.mp4 -filter_complex "[0:v]crop=960:540:380:270,boxblur=10[fg]; [0:v][fg]overlay=380:270[v]" -map "[v]" -map 0:a -c:a copy -movflags +faststart -y s2.mp4
ffmpeg -i s4.mp4 -filter_complex "[0:v]crop=1160:540:380:270,boxblur=10[fg]; [0:v][fg]overlay=380:270[v]" -map "[v]" -map 0:a -c:a copy -movflags +faststart -y s4.mp4上面的濾鏡參數:
- [0:v] : 指出是針對第一個影片設定。
- crop=960:540:380:270 在座標 (380, 27) 處取 960x540 大的畫面
- boxblur : 馬賽克
連接影片
分段影片都處理好了,最後我們利用 ffmpeg 將 s1.mp4、s2.mp4、s3.mp4、s4.mp4、s5.mp4 五個檔案連接起來,並儲存為 new_movie.mp4,執行底下的這行指令:
ffmpeg -i s.mp4 -i out2.mp4 -i out3.mp4 -i out4.mp4 -i out5.mp4 -filter_complex concat=n=5:v=1:a=1 -y new_movie.mp4
concat 參數的部份:
- n=5 : 有 5 個影片
- v=1 : 有影片
- a=1 : 有聲音
透過前面的操作以後,最後輸出的影片裡,看不到商品的名稱了。ffmpeg 實在好強,有空再來研究一下別的玩法。
後記
學而後知不足,2017年五月底再看這篇文章以後,才了解在整理這篇時有多麼土。其實 FFmpeg 如果用 version 2.0 以後的版本,有更簡單的方法。強烈的建議如果想幫影片加上多個不同的馬賽克,可以參考底下這篇中的方法:
沒有留言:
張貼留言