Làm cách nào để thêm logo của tôi trong 30 giây đầu tiên trong video bằng ffmpeg?


9

Tôi đang cố gắng thêm logo của mình trong 30 giây đầu tiên trong video bằng ffmpeg. Tôi có một video được gọi d1.mp4và một logo được gọi logo.png.

Khi video bắt đầu, hình mờ phải ở góc trên cùng bên trái hoặc trên cùng bên phải của video và biến mất sau 30 giây.

Bạn có thể vui lòng chỉ cho tôi cách thêm nó không?


tên video của tôi là d1.mp4 và tên logo của tôi là logo.png, cảm ơn bạn ..
iwocan

Sau đó, những gì ffmpeg -i d1.mp4 -i logo.pnghiển thị? Vui lòng chỉ cần nhập lệnh đó và cho chúng tôi biết đầu ra là gì. Khi đặt câu hỏi về ffmpeg, bạn phải luôn bao gồm càng nhiều chi tiết càng tốt về tài liệu video / âm thanh bạn có, những gì bạn đã thử và đầu ra dòng lệnh đầy đủ của mọi thứ bạn đã thử.
slhck

đây là những gì tôi nhận được trên màn hình cmd của tôi. pastebin.com/bPCnhXh2
iwocan

Câu trả lời:


13
ffmpeg -i in.mp4 -framerate 30000/1001 -loop 1 -i logo.png -filter_complex
  "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]" -map "[v]"
  -map 0:a -c:v libx264 -c:a copy -shortest out.mp4

Điều này giả định rằng logo là một hình ảnh tĩnh duy nhất với kênh alpha và bạn muốn phủ nó lên video với tốc độ khung hình 30000/1001 (tốc độ NTSC). Thay đổi -framerateđể phù hợp với video đầu vào của bạn nếu nó khác. Nếu logo của bạn là một video thì bỏ qua -framerate 30000/1001 -loop 1. Nếu logo không có kênh alpha, hãy thêm một kênh bằng cách chèn ví dụ format=yuva420p,ngay trước đó fade.

Điều này sẽ hiển thị logo ở vị trí x, y 10,10 trong 30 giây sau đó mờ dần 1 giây.


1
Rất thú vị! Bạn có thể giải thích tại sao framerateloopđược yêu cầu trong trường hợp này và không cho lớp phủ đơn giản mà không có bộ lọc mờ?
Rajib

Cảm ơn bạn rất nhiều mark40 nhưng khi tôi viết mã này, màn hình cmd không dừng lại .. Tôi không biết tại sao nhưng nó không hoạt động với tôi ..
iwocan

Xin chào LordNeckbeard, Đây là một ảnh chụp màn hình .. u1312.hizliresim.com/1j/4/v5ny8.png ..
iwocan

1
@iwocan Tôi tin rằng bạn có thể sao chép nội dung ra khỏi dấu nhắc của windows. Tôi giả sử bạn sẽ tìm kiếm cách thực hiện, nhưng hãy xem Sao chép vào Clipboard từ Dấu nhắc lệnh của Windows .
llogan

4
@Rajib: Lý do cho -framerate-loopcho một hình ảnh tĩnh là để làm mờ dần sẽ hoạt động. Nếu chỉ có một khung hình duy nhất thì nó không có cách nào mờ dần trong khoảng thời gian 1 giây. Lý tưởng nhất là tốc độ khung hình giống với video để độ mờ sẽ càng mịn càng tốt.
mark4o

19

Sử dụng overlaybộ lọc video để thêm logo vào video:

nhập mô tả hình ảnh ở đây

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay" \
-codec:a copy out.mp4

Để hiểu lệnh này, bạn cần biết trình xác định luồng là gì và đọc phần Giới thiệu về FFmpeg Filtering sẽ giúp ích. [0:v]đề cập đến (các) luồng video của đầu vào thứ nhất ( video.mp4) và [1:v]đề cập đến luồng video của đầu vào thứ hai ( logo.mp4). Đây là cách bạn có thể cho biết overlaynhững gì đầu vào để sử dụng. Bạn có thể bỏ qua [0:v][1:v], và overlayvẫn sẽ hoạt động, nhưng nên rõ ràng và không dựa vào các mặc định có thể chưa biết.

Theo mặc định, logo sẽ được đặt ở phía trên bên trái.

Sử dụng -codec:a copysẽ truyền phát bản sao âm thanh. Điều này chỉ đơn giản là điều chỉnh lại âm thanh thay vì mã hóa lại nó. Hãy nghĩ về nó như là một "bản sao và dán" của âm thanh.

Di chuyển logo

Ví dụ này sẽ di chuyển logo 10 pixel sang phải và 10 pixel xuống: nhập mô tả hình ảnh ở đây

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4

Ví dụ này sẽ di chuyển logo 10 pixel từ bên phải và 10 pixel xuống:

nhập mô tả hình ảnh ở đây

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=main_w-overlay_w-10:10" -codec:a copy out.mp4

main_wđề cập đến chiều rộng của đầu vào "chính" (nền hoặc [0:v]) và overlay_wđề cập đến chiều rộng của đầu vào "lớp phủ" (logo hoặc [1:v]). Vì vậy, trong ví dụ, điều này có thể được dịch sang overlay=320-90-10:10hoặc overlay=220:10.

Thời gian lớp phủ

Một số bộ lọc có thể xử lý chỉnh sửa dòng thời gian cho phép bạn sử dụng các biểu thức số học để xác định khi nào nên áp dụng bộ lọc. Tham khảo để ffmpeg -filtersxem bộ lọc nào hỗ trợ chỉnh sửa dòng thời gian.

Ví dụ này sẽ hiển thị logo cho đến 30 giây:

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=10:10:enable=between(t\,0\,30)" -codec:a copy out.mp4

Nếu bạn muốn làm mờ logo, hãy tham khảo câu trả lời của mark4o .


Cảm ơn rât nhiều! :) Tôi xin lỗi vì tiếng Anh bị hỏng của tôi một lần nữa. Lệnh này hoạt động hoàn hảo! :)
iwocan

cuối cùng là một điều dễ hiểu! Tôi nên sử dụng cái gì để làm cho nó xuất hiện ở đầu hơn là ở cuối?
cikatomo

Tôi có nghĩa là xuất hiện ở đầu VÀ ở cuối? Hai lần. tôi đã thử enable = between (t \, 0 \, 30): enable = between (t \, 50 \, 60), nhưng dòng thời gian cuối cùng duy nhất có hiệu lực
cikatomo

@cikatomo enable=not(between'(t,30,50)'). Điều này sẽ hiển thị lớp phủ mọi lúc nhưng không phải trong thời gian 30-60 giây.
llogan

Hoàn hảo, cảm ơn bạn. Mặc dù cảnh báo của bạn là không sử dụng overlaytất cả, tôi đã làm, bởi vì vị trí mặc định trên cùng bên trái là những gì tôi muốn. (Vì vậy, cuối cùng, cờ của tôi chỉ đơn giản filter_complex overlay.)
felwithe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.