FFMPEG - Tạo hình mờ ở vị trí ngẫu nhiên


0

Tôi đang cố gắng thực hiện vòng lặp sau:

  1. Đặt logo.png ở vị trí ngẫu nhiên (x, y) của video.
  2. Làm cho logo mờ dần sau 2 giây.
  3. Đợi 30 giây và lặp lại.

Sau khi nghiên cứu trên google, tôi đã điều chỉnh các mã khác nhau và nhận được mã này:

ffmpeg -i input.mp4 -loop 1 -i logo.png -filter_complex "[1]trim=0:30,fade=in:st=0:d=1:alpha=1,fade=out:st=9:d=1:alpha=1,loop=999:750:0,setpts=N/25/TB[w];[0][w]overlay=shortest=1:x=if(eq(mod(n\,200)\,0)\,sin(random(1))*w\,x):y=if(eq(mod(n\,200)\,0)\,sin(random(1))*h\,y)" output.mp4

Nhưng nó không đầy đủ chức năng cho nhu cầu của tôi (và có thể có những lệnh tôi có thể loại bỏ). Nó chỉ xuất hiện trong một khu vực ngẫu nhiên nhỏ ở khu vực trên cùng bên trái của video và không phải lúc nào cũng mờ dần sau 2 giây.

Những gì tôi nên thay đổi để làm cho nó hoạt động? Ngoài ra, có thể giảm độ mờ của logo.png hoặc sử dụng văn bản thay thế không?

Câu trả lời:


1

Một công thức khác có thể hoạt động tốt hơn đến từ bài viết Stack Overflow
ffmpeg - Chữ cái động và hình mờ vị trí ngẫu nhiên cho video? .

ffmpeg -i input.mp4 \
-vf \
"drawtext=fontfile=font.ttf:fontsize=80:fontcolor=yellow@0.5:text='studentname': \
 x=if(eq(mod(t\,30)\,0)\,rand(0\,(W-tw))\,x): \
 y=if(eq(mod(t\,30)\,0)\,rand(0\,(H-th))\,y)" \
-c:v libx264 -crf 23 -c:a copy output.mp4

Điều này sẽ ngẫu nhiên vị trí cứ sau 30 giây mà không lặp lại.


Tôi đã thấy giải pháp đó trước đây, nhưng điều này có hai điều mà tôi không muốn. Đầu tiên là nếu 'studentnamehastoomanyletters' nó nằm trong một dòng lớn, tôi không thể chia nó thành hai dòng (đã thử đặt \ n). Thứ hai, nó không bị mờ đi ngay cả khi tôi sử dụng fade = in: st = 0: d = 1: alpha = 1, fade = out: st = 9
gbvisconti

1
Có một công thức thứ hai trong cùng một câu trả lời mà bạn có thể thử.
harrymc

Tôi đã thử thực sự, nhưng tôi cần ngẫu nhiên và mờ dần. Tôi sợ một số người có thể làm mờ các vị trí nếu được cố định trên video ... Cảm ơn sự giúp đỡ của bạn, tôi sẽ tiếp tục cố gắng và chấp nhận đề xuất mới :)
gbvisconti

Chúc may mắn và tôi hy vọng bạn không gặp phải lỗi ffmpeg.
harrymc

Một chút bận rộn bây giờ, sẽ thêm một câu trả lời trong một hoặc hai ngày.
Gyan

0

Tôi quản lý để viết một lệnh hoạt động, vì vậy tôi sẽ đăng ở đây trong trường hợp ai đó cần.

ffmpeg.exe -i input.mp4 -vf drawtext="fontsize=10:fontfile=/Windows/Fonts/arial.ttf:text='Text Here':x=if(eq(mod(n\,1200)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(n\,1200)\,0)\,rand(0\,(h-text_h))\,y):enable=lt(mod(n\,1200)\,200)" -c:v libx264 -crf 17 -c:a copy output.mp4

Tham số t \ không hoạt động, đó là vấn đề đầu tiên của tôi khi sử dụng các ví dụ từ tài liệu ffmpeg và từ các câu trả lời trong Stack cộng đồng.

Mất một thời gian để nhận thấy vấn đề này. Có lẽ là một cái gì đó trong Windows. Vì vậy, tôi chỉ sử dụng n \ thay vì đó là số khung.

Vì vậy, bây giờ (x, y) thay đổi sau mỗi 1200 khung

x = if (eq (mod (n \, 1200) \, 0) \, rand (0 \, (w-text_w)) \, x): y = if (eq (mod (n \, 1200) \, 0) \, rand (0 \, (h-text_h)) \, y)

Hiển thị văn bản cho 200 khung hình sau mỗi 1200 khung hình

enable = lt (mod (n \, 1200) \, 200)

Cảm ơn tất cả sự giúp đỡ ở đây!


0

Tôi thấy mẫu đầu tiên của bạn sử dụng logo hoàn hảo cho việc sử dụng của tôi, tôi đã thực hiện một số thay đổi để logo sẽ ngẫu nhiên trong video đầy đủ không chỉ ở góc trên bên trái

ffmpeg -i input.mp4 -loop 1 -i logo.png -filter_complex "[1]trim=0:30,fade=in:st=0:d=1:alpha=1,fade=out:st=9:d=1:alpha=1,loop=999:750:0,setpts=N/25/TB[w];[0][w]overlay=shortest=1:x=if(eq(mod(n\,200)\,0)\,sin(random(1))*W\,x):y=if(eq(mod(n\,200)\,0)\,sin(random(1))*H\,y)" output.mpg
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.