2011-11-15 55 views
10

Tôi đang cố gắng thêm lớp phủ vào video đầu vào với ffmpeg xuất hiện một thời gian sau khi video bắt đầu.Video lớp phủ sau khi đặt thời gian bù đắp bằng FFmpeg

Cách cơ bản để thêm lớp phủ là:

ffmpeg -i in.avi -vf "movie=overlay.avi [ovl]; [in][ovl] overlay" out.avi 

Nhưng điều này cho biết thêm video overlay (hoặc hình ảnh) từ khi bắt đầu của đoạn video đầu vào cho đến khi một trong những video kết thúc.

Tôi biết cách bù đắp video lớp phủ bằng cách sử dụng movie=overlay.avi:seek_point=1.4, nhưng bù lại trên video đầu vào thì sao?

Tôi luôn có thể cắt video thành điểm mong muốn, thêm lớp phủ trên clip thứ hai, sau đó ghép hai lớp nhưng không hiệu quả lắm.

+0

Bạn có tìm thấy giải pháp nào không ?! –

Trả lời

6

Theo hạn chế FFmpeg overlay documentation, quá trình này hy vọng rằng cả hai video có cùng timestamp (ví dụ, 0: 00: 00: 00) giá trị để giữ cho mọi thứ được đồng bộ hóa, và cảnh báo nếu không được thực hiện sau đó số avi.out sẽ có một số ảnh không mong muốn không mong muốn từ tệp video overlay.avi được sử dụng.

Tuy nhiên, bạn có thể sử dụng thực tế đó và tận dụng lợi thế của nó!

Đó là sau đó có thể tưởng tượng rằng nếu video overlay.avi có một bắt đầu timestamp với ý muốn bù đắp đó là cần trên video in.avi đầu vào, sau đó đoạn video overlay.avi sẽ cháy tại cùng timestamp (cung cấp bởi in.avi) để tạo kết quả mong đợi cho video out.avi.

Tin xấu chỉ là .avi chứa không có timestamps, không giống như .mp4 hoặc .mkv các định dạng tập tin mà làm. Bạn sẽ phải chuyển sang định dạng tệp hỗ trợ *timestamps* để làm việc này (ví dụ: overlay.mp4 hoặc overlay.mkv) để tạo tệp video đầu ra cuối cùng đầu ra bắt buộc.

8

Mở rộng trên arttronics' insightful, but speculative answer, video thực sự có thể dễ dàng được bù đắp bằng cách sử dụng cờ -itsoffset.

Các -itsoffset công trình cờ như vậy:

-itsoffset bù đắp (đầu vào)

Đặt thời gian đầu vào bù đắp trong vài giây. Cú pháp [-] hh: mm: ss [.xxx] cũng được hỗ trợ. Giá trị bù được thêm vào dấu thời gian của các tệp đầu vào.Chỉ định chênh lệch dương có nghĩa là các luồng tương ứng bị trễ bởi bù đắp giây.

(NB: Mặc dù cụm từ "tập tin đầu vào s", cờ thực sự chỉ áp dụng cho các đầu vào ngay sau nó Cũng lưu ý this bug về offsets không áp dụng cho các đoạn audio H/T attronics...)

vì vậy, bao phủ với một bù đắp cũng đơn giản như:

ffmpeg -i bg.avi -itsoffset 2 -i over.avi -filter_complex overlay out.avi 

này hoạt động không phụ thuộc vào loại container.

+0

** - 1 ** Việc sử dụng '-itsoffset' sẽ áp dụng bù đắp cho ** CẢ ** tệp, không chỉ tệp' overlay.avi'. Tham chiếu [** ffmpeg Vé 1349 của nó không hoạt động đối với tệp đầu vào thứ hai **] (http://ffmpeg.org/trac/ffmpeg/ticket/1349). Hơn nữa, đoạn trích bạn đã đăng xác nhận đó là cả hai ** tệp **: *** dấu thời gian của các tệp đầu vào *** – arttronics

+0

@attronics Không, đó là sai. Các tài liệu được viết kém, nhưng vé lỗi mà bạn đề cập chỉ dành cho luồng âm thanh và quan trọng hơn, ** tác phẩm này **. Chạy lệnh đã cho với các bản dựng FFmpeg hiện tại có chính xác hiệu ứng mong muốn của việc trì hoãn lớp phủ. – blahdiblah

+0

Vui lòng sửa đổi câu trả lời của bạn để bao gồm các tài liệu gây hiểu lầm, ví dụ: chỉnh sửa, vì vậy tôi có thể Upvote. Cảm ơn bạn đã làm rõ. Chúc mừng! – arttronics

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