ffmpeg: Cara menempatkan beberapa overlay dan memudar paling atas dengan benar

5

Saya mencoba menempatkan beberapa overlay di atas satu sama lain dan memudar paling atas setelah beberapa frame. Karena itu saya menggunakan 2 file .png yang harus ditempatkan pada video terakhir dengan urutan sebagai berikut:

fademe.png & lt; - Hamparan teratas, harus memudar setelah beberapa bingkai

overlay.png & lt; - overlay kedua, selalu terlihat

movie.mov & lt; - film sebagai lapisan bawah

Saya menggunakan kode ini untuk membuat PNG yang disandikan .mov dari overlay:

ffmpeg -y -loop 1 -i fademe.png -loop 1 -i overlay.png -filter_complex "[0:0]fade=out:25:25[fad];[1:0][fad] overlay" -vframes 55 -vcodec png overlay.mov

Lalu saya menggunakan ffmbc untuk menempatkan overlay.mov di atas video lain.

(Saya menggunakan ffmbc karena hasil akhir akan menjadi ProRes4444)

ffmbc -y -threads 0 -i movie.mov -vf "movie=overlay.mov [watermark]; [in][watermark] overlay [out]"  -vcodec libx264 faded.mp4

Video output terlihat bagus sampai fading dimulai dan fademe.png [fad] tampaknya menjadi pudar menjadi putih dan melakukan beberapa hal aneh pada warna di bawah sampai menghilang.

Ketika saya mengubah urutan di yang terakhir overlay dari [1:0][fad] overlay untuk [fad][1:0] overlay jadi terlihat seperti ini:

ffmpeg -y -loop 1 -i fademe.png -loop 1 -i overlay.png -filter_complex "[0:0]fade=out:25:25[fad];[fad][1:0] overlay" -vframes 55 -vcodec png overlay.mov

memudar terlihat benar, tetapi overlay.png [1:0] seharusnya tidak menjadi lapisan paling atas.

Dugaan saya adalah bahwa sesuatu yang salah terjadi pada saluran alpha pada percobaan pertama saya.

Ada saran bagaimana mengatasi masalah ini?

evilheinz
sumber

Jawaban:

7

Seharusnya tidak perlu menggunakan dua perintah dan membuat file perantara dengan saluran alpha. Perintah tunggal dengan 3 input, 2 filter overlay, dan filter fade dengan alpha=1 harus melakukannya:

ffmpeg -y -i movie.mov -loop 1 -i overlay.png -loop 1 -i fademe.png \
-filter_complex '[0:v][1:v] overlay [V1]; \
[2:v] fade=out:25:25:alpha=1 [V2]; [V1][V2] overlay' \
faded.mp4
mark4o
sumber
Sayangnya, ffmbc tidak dapat menangani -filter_complex. Apakah ada cara melakukan hal yang sama dengan opsi -vf?
evilheinz
1
@evilheinz Sayangnya, ffmbc sangat ketinggalan dalam pengembangan. Apakah ada alasan Anda membutuhkannya dan tidak dapat menggunakan FFmpeg? Idealnya, fitur tambahan ffmbc akan porting kembali ke FFmpeg.
slhck
1
@ evilheinz perbedaan yang paling penting antara perintah ini dan Anda adalah bahwa yang satu ini memudar menjadi alpha (ini bukan default); coba gunakan [0:0]fade=out:25:25:alpha=1[fad] dalam perintah pertama Anda.
evilsoup
sslhck Saya berencana untuk menggunakan ffmbc untuk mendapatkan ProRes4444 sebagai output. Terakhir kali saya memeriksa pengkodean ProRes4444 di ffmpeg, itu tidak mengatur fourcc yang tepat sehingga diakui sebagai ProRes422 (HQ) di Quicktime Player. Ketika melakukan transcoding dengan ffmbc, file akan terdeteksi dengan benar sebagai ProRes4444.
evilheinz
@ evilsoup fading masih terlihat agak aneh saat menggunakan alpha = 1 ...
evilheinz
1

Saya pikir saya menemukan solusinya:

Pertama saya membuat film perantara dari logo fading

ffmpeg -y -loop 1  -i fademe.png -filter_complex "fade=out:25:25" -vframes 55 -vcodec png fademe.mov

maka saya menggunakan perintah ini dengan ffmbc

ffmbc -i movie.mov -vf "movie=overlay.png [over]; movie=fademe.mov [fade]; [in][over] overlay [inter]; [inter][fade] overlay [out]" -vcodec libx264 out.mp4

... Heureka !!!

Logo yang duduk di atas komposisi memudar indah dan halus!

evilheinz
sumber