2012-06-07 23 views
10

Tôi đang cố gắng chia tỷ lệ video sao cho video luôn rộng 512, nơi chiều cao thay đổi theo tỷ lệ so với video gốc. Khi đã thu nhỏ, sau đó tôi muốn áp dụng hình mờ/lớp phủ cho video, do đó, video sẽ mở rộng nhưng hình mờ sẽ không.FFmpeg - Cách chia tỷ lệ video sau đó áp dụng hình mờ?

tôi có thể đạt được mỗi một trong các riêng biệt sử dụng các bộ lọc sau:

Scale

-vf "scale=512:-1" 

Watermark

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

Họ làm việc thành công của riêng mình.

Tuy nhiên khi cố gắng kết hợp cả hai, tôi gặp một chút rắc rối.

Có cả hai tham số của khóa học không hoạt động như một tham số sẽ ghi đè lên tham số khác.

Ive đã cố gắng:

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

suy nghĩ của tôi là quy mô sẽ được áp dụng đầu tiên sau đó watermark nhưng tất cả tôi nhận được là một lỗi

Quá nhiều đầu vào được xác định cho "bộ phim" lọc .

Lỗi mở bộ lọc!

Sau đó thay đổi thành a; dẫn đến:

Simple filtergraph 'scale = 512: -1; movie = watermark.png [hình mờ]; [in] [watermark] overlay = (main_w-overlay_w)/2: (main_h-overlay_h)/2 [out] 'không có chính xác một đầu vào và đầu ra.

Lỗi mở bộ lọc!

Tôi đoán tôi cần phải làm điều gì đó hơn với bộ lọc nhưng Im đang cố gắng tìm ra.

Có ý tưởng nào không?

Rất cám ơn trước.

+2

Không liên quan đến lập trình - hãy thử http://superuser.com? –

+0

Tôi nghĩ rằng tốt hơn là đầu tiên mở rộng hình ảnh watermark và sau khi áp dụng nó trong video tỷ lệ. Bạn có thể thử làm một đường ống giữa hai quá trình. –

Trả lời

14

Cảm ơn cả hai @DiJuMx và @LordNeckbeard, cả hai đều giúp tôi gần hơn với giải pháp của mình. Tôi chưa thử tùy chọn filter_complex nhưng nó chắc chắn trông đơn giản hơn.

Giải pháp tôi thấy làm việc là:

-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]" 

Lưu ý rằng Ive thay thế -1 ở quy mô như rằng có khả năng gây ra một số không đồng đều của pixel trong chiều cao của video khi mở rộng quy mô mà sau đó sẽ gây ra lỗi mã hóa.

16

Bạn có thể sử dụng tùy chọn -filter_complex với các bộ lọc quy mô và lớp phủ:

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 
  • Xem tài liệu scaleoverlay lọc để biết thêm.
  • Không cần bộ lọc nguồn movie như trong các ví dụ khác.
  • Bạn có thể thêm -c:a copy nếu bạn muốn stream copy (re-mux) âm thanh gốc thay vì mã hóa lại âm thanh gốc.Điều này rất hữu ích nếu định dạng vùng chứa đầu vào và đầu ra của bạn giống nhau.
  • Ví dụ sẽ đặt biểu tượng ở chính giữa. Đối với tùy chọn vị trí khác:
    • Upper trái với 10 px padding: overlay=10:10
    • Upper đúng với 10 px padding: overlay=W-w-10:10
    • thấp hơn đúng với 10 px padding: overlay=W-w-10:H-h-10
    • dưới bên trái với 10 px padding: overlay=H-h-10:10
0

Từ những gì tôi hiểu, điều này có thể làm việc:

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

Bạn áp dụng bộ lọc tỷ lệ cho đầu vào "[in]".

Rất tiếc, tôi không có nhiều kinh nghiệm với các bộ lọc trên ffmpeg nên tôi không thể trợ giúp thêm. Xin lỗi