2012-02-06 47 views
12

Tôi đang cố gắng phủ lên một cách lập trình hình ảnh hoặc video trên đầu video khác bằng FFmpeg. Có vẻ như AVFilter có thể làm điều này.FFmpeg Lớp phủ AVFilter/watermark lập trình

Có rất nhiều ví dụ về cách thực hiện điều này hoặc những thứ tương tự với dòng lệnh, tuy nhiên, tôi không tìm thấy ví dụ nào về cách sử dụng AVFilter theo chương trình ngoài doc/example/filtering.c, giúp tôi nhưng không thực sự đủ. Tôi đã có thể giải mã và mã hóa video, tôi chỉ cần tìm hiểu cách lọc các khung đã giải mã và thêm hình mờ.

Có bất kỳ ví dụ nào về việc sử dụng libavfilter theo chương trình không?

Có ví dụ về cách sử dụng bộ lọc lớp phủ hoặc phim không?

+0

Ví dụ mã có thể dễ dàng sửa đổi để áp dụng bộ lọc tùy ý. Vấn đề là gì? Để biết ví dụ về cách sử dụng bộ lọc lớp phủ và phim, hãy xem [Cách đóng dấu một video bằng cách sử dụng FFmpeg] (http://www.idude.net/index.php/how-to-watermark-a-video-using-ffmpeg). –

+1

Vấn đề với ví dụ là nó bị quá tải (2 bộ lọc, biểu đồ bộ lọc, v.v.). Đối với một người mới và muốn tìm hiểu làm thế nào để áp dụng một AVFilter nó là khó hiểu, bởi vì nó không làm cho nó rõ ràng về những gì là hoàn toàn cần thiết để bắt đầu. –

Trả lời

7

Lệnh:

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

sản xuất video với hình ảnh "watermarklogo.png" ở góc trên bên trái. Gọi lệnh này từ một chương trình khác nên đơn giản là đủ.

Breaking này xuống từng chút một để hiểu nó:

ffmpeg là chương trình bạn sẽ được sử dụng để thêm watermark.

-i được sử dụng để chỉ định tệp đầu vào.

inputvideo.avi là tệp đầu vào của bạn được chỉ định bởi -i.

-vf được sử dụng để chỉ định bộ lọc video. Trong trường hợp này, đây là tất cả mọi thứ trong dấu ngoặc kép.

movie=watermarklogo.png sẽ tải tệp bạn muốn sử dụng làm hình mờ. Ở đây chúng tôi tải tệp dưới dạng nguồn video (bằng cách sử dụng movie) bất kể tệp có phải là video hay không. Trong trường hợp này, nó là một hình ảnh.

[watermark] gắn nhãn tệp bạn vừa tải. Nhãn này sẽ được sử dụng trong phần còn lại của mã.

[in][out] tham chiếu luồng đầu vào và luồng đầu ra của video.

overlay được sử dụng ngay sau nhãn [watermark] để nó đề cập đến nó. Trong trường hợp đơn giản này, chúng tôi đặt số overlay tại 10:10. Điều này có nghĩa là hình mờ sẽ được bù đắp bằng 10 pixel từ trên cùng và từ bên trái. Nếu bạn muốn dưới cùng bên phải, bạn sẽ sử dụng overlay=main_w-overlay_w-10:main_h-overlay_h-10 trong đó main_w là chiều rộng của luồng đầu vào, overlay_h là chiều cao của tệp lớp phủ, v.v.

Cuối cùng, outputvideo.flv rõ ràng là tệp bạn muốn lưu kết quả vào.

thông tin bổ sung:

tôi tìm thấy thông tin này thông qua the site Dmitry had mentioned trong các ý kiến. Alex đã đề cập rằng trang này có thể quá phức tạp đối với những người mới làm quen với những thứ như vậy.Tuy nhiên, tôi đã không bao giờ làm bất cứ điều gì như thế này và chỉ trong một vài phút tôi đã có kết quả tôi tin rằng đang được tìm kiếm.

Lưu ý: Tôi đã có một thời điểm khó khăn khi tôi đã nhận được báo lỗi:

error while opening encoder for output stream #0.1 

Nếu bạn có cùng một vấn đề bạn có thể cần phải tự thiết lập tần số lấy mẫu bằng cách sử dụng tham số -ar (ví dụ -ar 22050).

+0

Bạn có thể xác định thời gian cho hình mờ không? cho phép nói rằng tôi muốn hình mờ bắt đầu lúc 00:00 và biến mất @ 01:00, có khả thi không? – rroche

+0

@rroche Kiểm tra [bài đăng này] (http://stackoverflow.com/questions/9160771/ffmpeg-watermark-first-30- giây). Câu trả lời của Felix có lẽ là câu trả lời đơn giản nhất, nhưng câu trả lời của Dmitry (cùng một Dmitry từ phía trên) là một chút neater và cho phép mờ dần ra khỏi hình mờ. – golmschenk

+4

Câu hỏi liên quan đến việc sử dụng thư viện AVFilter, không gọi đến nhị phân FFMPEG. – Erik

Các vấn đề liên quan