FFmpeg: Bir videoya efekt uygulama


0

Renk, kontrast, parlaklık vb. Ayarları ayarlayarak bir videoya bazı efektler uygulamaya çalışıyorum. İşte denediğim efektlerden bazıları. Ardından "Kelvin" efektini uygulamak için kullandığım komut var.

ffmpeg -i 3.mp4 -c:v libx264 -c:a libfaac -filter_complex "[0:v]eq=1.0:0:1.3:2.4:0.175686275:0.103529412:0.031372549:0.4[outv]" -map [outv] out.mp4

FFmpeg belgeleri , eqfiltre için her değerin sınırlarını belirlememe yardımcı oldu . Ancak yine de yukarıdaki bağlantıdaki gibi "Kelvin" efekti için beklenen çıktıyı alamıyorum. Cg'de sepiakullanılan değere göre rg, gg, bg değerlerini hesapladım . (r = 112, g = 66, b = 20 sepyayı rgb'ye dönüştürmek için kullandığım değerlerdir) Aşağıda, rg, gg, bg değerlerini elde etmek için kullandığım basit matematik var.

rg = (112/255) * (gamma_r maks - gamma_r min) * sepya değeri

Burada gamma_r max 10 ve gamma_r min belgelere göre 0.1'dir.

Neyi yanlış yapıyorum burada? Bunu yapmak için başka bir alternatif var mı?

Yanıtlar:


0

eqFiltre mevcut durumuna göre renk kanallarını ayarlar, bu, artan ya da (ses, bir "birim" düğmesi) gibi bunların yoğunluğu azalmaktadır. Hedef renk sıcaklığınızı elde etmek için eq, fotoğraftaki her bir bölgenin geçerli renk sıcaklığını hesaplamanız ve sonra onu değiştirmeniz gerekir - bunun için AviSynth gibi bir çerçeve sunucusuna ihtiyacınız vardır. Ancak tüm bunlara gerçekten ihtiyaç duyulmaz, çünkü beyaz dengenizi tam olarak kontrol etmek istemezsiniz, sadece belirli bir renk tonuna neden olacak sabit bir filtre uygulamak istersiniz - bu durumda sepya. Bunun için , birbirine göre piksellerin beyaz dengesini yönetmenin bir yolunu sağlayan colorchannelmixer filtresini kullanmalısınız.. Filtre belgelerinin sepya için belirli bir örneği vardır:

colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131

Nasıl çalışır (çok basitleştirilmiş açıklama)

colorchannelmixersüzgeç görüntüyü 4 renk kanalına sahip - Kırmızı, Yeşil, Mavi ve Alfa ("maske" kanalı) olarak tanımlar. Varsayılan olarak, her kanal, 1.0 olarak adlandırıldıktan sonra rengin yoğunluğunu gösterir. Dolayısıyla, "Kırmızı" kanal görüntünün kırmızı çarpı 1.0, yeşil çarpı 0.0 olan kısım, 0.0 kadar mavi olan kısım ve alfa çarpı 0.0 olan kısımdır. Benzer şekilde, her kanal "rengi" için 1.0, diğerleri için 0.0 değerine sahiptir. Artık filtre, kanalından bir renk "çalmanıza" ve "enerjisini" başka bir kanala enjekte etmenize olanak tanır. Örneğin, "Yeşil" kanaldaki kırmızının değerini 1.0 olarak ve "Kırmızı" kanaldaki kırmızının değerini 0.0 olarak değiştirebilirsiniz. bu nedenle, yeşilin şiddeti, her pikselde kırmızı olan orijinal yoğunluğuyla artacaktır, görüntüde hiç kırmızı bırakmadan ve mavinin ve alfadaki göreceli yoğunluğunu değiştirmeden. Bu konsepti 16 renk kombinasyonunun hepsine uygularken, her bir pikselin sonuçtaki renk yoğunluğunu tüm orijinal renk yoğunluklarının bir ürünü olarak tanımlayan bir matris elde edersiniz. Sonuç normalize edilir ve renk dönüşüm eğrisini ifade etmenin basit bir yolunu elde edersiniz.

Yukarıdakiler biraz basittir ve sizin özel sorunuza nasıl uygulandığını anlamak için Renk Sıcaklığı teorisi hakkında daha fazla bilgi edinebilirsiniz . colorchannelmixerFiltre ile renk negatifleri oluşturmak, çizgi roman benzeri efektler elde etmek için renk derinliklerini azaltmak ve çok daha fazlası gibi başka şeyler de yapabileceğinizi unutmayın .

Umarım bu sizin için iyi çalışır!


Lütfen colorchannelmixerfiltre hakkında biraz daha bilgi verebilir misiniz ? Kendini belgeleme çok fazla ayrıntı içermiyor gibi görünüyor. Kolonlarla ayrılan değerler nelerdir?
Chamath

Yorumun sınırlı bir alanı var, bu yüzden yorumun yanıtını tam yanıt olarak düzenleyeceğim.
avnr

Bu bilgilendirici. Colorchannelmixer'ın Ton, Doygunluk, Kontrast ve Parlaklık ile nasıl ilişkilendirildiğini açıklarsanız harika olur mu?
Chamath

Colorchannelmixer filtresi bir RGBa renk alanında çalışır, ancak bu renk alanını akışın piksel biçiminde zorlamaz, bu nedenle pratik açıdan diğer renk alanlarında çalışan ek filtreleri zincirleme kabiliyetiniz açısından sizi sınırlamaz. Renk uzaylarının teorik tarafı oldukça geniştir, içine kazmak istiyorsanız, bu Wikipedia makalesini okuyarak başlamanızı tavsiye ederim: en.wikipedia.org/wiki/Color_space
avnr 15:15

0

Sonunda zincirleme colorchannelmixerve eqfiltrelerle efektler yaratıldı . Burada belirtilen etkilere göre , filtre sepiakullanarak efekt uyguladım colorchannelmixerve eqfiltre kullanan özelliklerin geri kalanını ayarlıyorum.

Sepya etkisi için kullanabileceğiniz sepya matris ikame edilmesiyle amountbirlikte sepia value. Diğer tüm özellikler, parlaklık değeri dışında herhangi bir matematikle doğrudan uygulanabilir. Parlaklık değerini, ile değiştirdim

(parlaklık - kontrast) / 20

bu da daha muhtemel bir çıktıyla sonuçlandı. Kesin hesaplama olmadığı için birileri bunu düzeltebilir. Aşağıda bu hesaplamaları yaptıktan sonra "Willow" efekti için FFmpeg komutu verilmiştir.

ffmpeg -i input_image -filter_complex "
[0:v]colorchannelmixer=0.98786:0.01538:0.00378:0.0:0.00698:0.99372:0.00336:0.0:0.00544:0.01068:0.98262:0.0[colorchannelmixed];
[colorchannelmixed]eq=0.85:0.0175:0.02:1.0:1.0:1.0:1.0:1.0[color_effect]" -map [color_effect] -c:v png output_image

Umarım bu başka birine yardımcı olur. Şerefe!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.