2012-02-06 24 views
12

我試圖以編程方式覆蓋使用FFmpeg的另一個視頻的頂部的圖像或視頻。看來AVFilter可以做到這一點。FFmpeg AVFilter覆蓋/水印以編程方式

有很多關於如何使用命令行做類似事情的例子,但是我沒有找到使用AVFilter編程的例子,除了doc/examples/filtering.c,它可以幫助我但不夠真實。 我已經可以對視頻進行解碼和編碼,我只需要學習如何過濾解碼的幀並添加水印。

是否有任何編程使用libavfilter的例子?

是否有使用覆蓋或電影過濾器的例子?

+0

該代碼示例可以輕鬆修改爲應用任意過濾器。問題是什麼?有關使用疊加層和電影過濾器的示例,請參閱[如何使用FFmpeg爲視頻加水印](http://www.idude.net/index.php/how-to-watermark-a-video-using-ffmpeg)。 – 2012-02-06 06:48:44

+1

該示例的問題是它過載(2個過濾器,過濾器圖等)。對於一個新手而且想知道如何應用一個AVFilter的人來說,這是令人困惑的,因爲它並沒有說明開始所需的東西。 – 2012-07-13 21:53:52

回答

7

的命令:

ffmpeg –i inputvideo.avi -vf "movie=watermarklogo.png [watermark]; [in][watermark] overlay=10:10 [out]" outputvideo.flv 

產生具有在左上角的圖像 「watermarklogo.png」 視頻。從另一個程序調用該命令應該足夠簡單。滴滴

打破下來有點明白了吧:

ffmpeg是你將使用添加水印的程序。

-i用於指定輸入文件。

inputvideo.avi是您的輸入文件,由-i指定。

-vf用於指定視頻過濾器。在這種情況下,這是引號中的所有內容。

movie=watermarklogo.png將加載您要用作水印的文件。在這裏,我們將文件加載爲視頻源(使用movie),無論文件是否爲視頻。在這種情況下,它是一個圖像。

[watermark]標記剛加載的文件。該標籤將用於代碼的其餘部分。

[in][out]指的是視頻的輸入流和輸出流。

overlay正好在[watermark]標籤後面使用,以便引用它。在這種簡單的情況下,我們把overlay放在10:10。這意味着水印將從頂部和左側偏移10個像素。如果您想要右下角,則可以使用overlay=main_w-overlay_w-10:main_h-overlay_h-10,其中main_w是輸入流的寬度,overlay_h是疊加文件的高度,依此類推。

最後,outputvideo.flv顯然是您希望將結果保存到的文件。

其他信息:

我發現這個信息通過the site Dmitry had mentioned中的註釋。亞歷克斯曾經提到,這個頁面可能對於那些不熟悉這種事情的人來說太複雜了。然而,我從來沒有做過這樣的事情,在幾分鐘內我就得到了我相信正在尋求的結果。

注:我的時候,我得到的錯誤麻煩了一下:

error while opening encoder for output stream #0.1 

如果你有可能需要手動設置使用-ar參數的採樣頻率相同的問題(例如,-ar 22050)。

+0

您可以定義水印的時間嗎?可以說我想要水印從00:00開始並在@ 01:00消失,這可能嗎? – rroche 2012-08-31 23:10:51

+0

@rroche查看[這篇文章](http://stackoverflow.com/questions/9160771/ffmpeg-watermark-first-30-second)。費利克斯的答案可能是最簡單的,但德米特里的答案(與上面相同的德米特里)有點整齊,並允許淡出水印。 – golmschenk 2012-09-01 01:55:20

+4

這個問題涉及到使用AVFilter庫,而不是調用FFMPEG二進制文件。 – Erik 2012-09-04 02:23:32