2016-07-08 17 views
17

Đây là mã của tôi có thêm một hình ảnh cho video, chạy qua PHP:FFMPEG: Thêm một hình ảnh kích thước cố định trên một đoạn video, không phụ thuộc vào chiều rộng video và chiều cao (độ phân giải)

exec('ffmpeg -i input.mp4 -i logo.png -filter_complex 
"[0:v][1:v] overlay=10:10" -pix_fmt yuv420p -c:a copy output.mp4'); 

Nó hoạt động tốt nhưng vấn đề là, hình ảnh được thu nhỏ lại hoặc lên, lên trên độ phân giải video. Ví dụ trong hình ảnh sau chiều rộng logo là 50px nhưng độ phân giải video khác nhau:

enter image description here

và điều này một

enter image description here

Làm thế nào tôi có thể ngăn chặn các hình ảnh từ nhân rộng xuống/lên ?


Cập nhật

Nhờ Mulvya, ông đề nghị các mã

ffmpeg -i input.mp4 -i logo.png -filter_complex 
"[1:v][0:v]scale2ref=(W/H)*ih/8:ih/8[wm][base];[base][wm]overlay=10:10" 
-pix_fmt yuv420p -c:a copy output.mp4 

ffmpeg -i input.mp4 -i logo.png -filter_complex 
"[1:v][0:v]scale2ref=(W/H)*ih/8:ih/8[wm][base];[wm]setsar=1[wmsar]; 
[base][wmsar]overlay=10:10" 
-pix_fmt yuv420p -c:a copy output.mp4 

rằng hoạt động rất tốt, nhưng nó không giữ các khía cạnh biểu tượng tỉ lệ. Tôi đã thử mã này trên hai video với độ phân giải khác nhau và đây là kết quả

enter image description here

và điều này một

enter image description here

Có thể cải thiện giải pháp này?

Trả lời

10

Bạn có thể sử dụng bộ lọc scale2ref.

ffmpeg -i input.mp4 -i logo.png -filter_complex 
"[1:v][0:v]scale2ref=(W/H)*ih/8/sar:ih/8[wm][base];[base][wm]overlay=10:10" 
-pix_fmt yuv420p -c:a copy output.mp4 

Điều này sẽ thay đổi kích thước chiều cao của biểu tượng thành 1/8 chiều cao của video.

Bạn phải thay thế W/H bằng các giá trị cho hình ảnh, ví dụ: nếu PNG là 320x270, thì phải là scale2ref=(320/270)*ih/8:ih/8

+1

Cảm ơn bạn rất nhiều. Tôi ** cập nhật ** câu hỏi, có một vấn đề rất nhỏ với giải pháp của bạn – Drupalist

+0

Độ phân giải logo của bạn là gì? – Mulvya

+0

để thử nghiệm, nó là 505X384. – Drupalist

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