2012-06-07 155 views
10

我試圖縮放一段視頻,使其始終512寬,其高度與原始視頻成比例變化。 一旦縮放,我就想對視頻應用水印/覆蓋圖,因此視頻會縮放,但水印不會。FFmpeg - 如何縮放視頻,然後應用水印?

我能夠達到每一種單獨使用以下過濾器:

規模

-vf "scale=512:-1" 

水印

-vf "movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]" 

他們對自己的成功運行。

但是,當試圖將兩者結合起來時,我遇到了一些麻煩。

既然這兩個參數當然不起作用,因爲一個會覆蓋另一個。

我用盡:

-vf "scale=512:-1,movie=watermark.png [watermark]; [in][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]" 

我的想法是,規模將首先應用則水印,但我得到的是「電影」過濾器中指定

太多的輸入錯誤。

打開過濾器時出錯!

然後改變,爲;導致:

簡單的filtergraph'scale = 512:-1; movie = watermark.png [watermark]; [in] [水印] overlay =(main_w-overlay_w)/ 2 :(main_h-overlay_h)/ 2 [out]'沒有 恰好一個輸入和輸出。

打開過濾器時出錯!

我認爲我需要用filterchains做更多的事情,但是Im努力想辦法弄清楚。

任何想法的人?

非常感謝提前。

+2

不編程相關 - 請嘗試http://superuser.com? –

+0

我認爲先將水印圖像縮放並將其應用於縮放視頻後,會更好。你可以嘗試在兩個過程之間做一個管道。 –

回答

14

謝謝你@DiJuMx和@LordNeckbeard,你們讓我更接近我的解決方案。我沒有嘗試filter_complex選項,但它肯定看起來更簡單。

我找到工作的解決方案是:

-vf "movie=watermark.png [watermark]; [in]scale=512:trunc(ow/a/2)*2 [scale]; [scale][watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]" 

注意伊夫取代-1規模爲有縮放時引起視頻的高度奇數像素的潛力,其會導致編碼錯誤。

16

您可以使用-filter_complex選項與規模和覆蓋過濾器:

ffmpeg -i input.mp4 -i logo.png -filter_complex "[0:v]scale=512:-1[bg];[bg][1:v]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" output 
  • scaleoverlay過濾器文檔獲取更多信息。
  • 與其他示例中一樣,不需要movie源過濾器。
  • 如果您想stream copy(重新複用)原始音頻而不是重新編碼它,您可以添加-c:a copy。如果您的輸入和輸出容器格式相同,這很有用。
  • 該示例將徽標放在中心。對於其他位置選項:
    • 上留下了10像素填充:overlay=10:10
    • 右上與10像素填充:overlay=W-w-10:10
    • 下與10像素填充右:overlay=W-w-10:H-h-10
    • 左下與10像素填充: overlay=H-h-10:10
0

據我瞭解,這可能工作:

-vf "movie=watermark.png [watermark]; [in] scale=512:-1,[watermark] overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2 [out]" 

您將比例過濾器應用於輸入「[輸入]」。

不幸的是,我沒有太多關於ffmpeg的過濾器的經驗,所以我不禁進一步。對不起

相關問題