FFMPEG / AVCONV ile Kullanıcı Tarafından Oluşturulan Chroma Key Kompozit Videolar


2

Kullanıcının, biri arka planda mavi ekrana sahip bir web sitesine iki video yükleyebileceği bir sistem oluşturmak istiyorum ve web sitesi, Chroma Key tekniğini kullanarak ( ikisinin bir kompozit videosunu oluşturmak için AVCONV (veya benzeri) kullanıyor) aka mavi tarama).

AVCONV bu şekilde kullanılabilir mi?

SO'daki bu yayına göre, statik bir görüntü arka plana Chrome olarak girilebilir. Ama aynı video ile yapılabilir mi?

Ayrıca, iki videonun birleştirilmeden önce aynı uzunlukta ve biçimde olması gerekip gerekmediğini bilmek isterim. Böyle bir hizmet sunabilmek için göz önünde bulundurmam gereken başka teknik hususlar var mı?

Şimdiden teşekkürler.

Yanıtlar:


2

Not: Bu cevap FFmpeg kroma anahtarlama özelliğini kazanmadan önce gönderildi. Aşağıdaki diğer cevaplara bakınız.

Ne AVconv ne de FFmpeg şu anda bunu yapamıyor - yapamadıkları en büyük video işleme görevi.

Bu araçlar , başka bir video veya görüntünün üzerine saydam bir arka plana sahip bir görüntü veya videoyu üst üste koyabilir - bu SO sorusuyla istediğiniz bağlantıda. Ancak, saydam arka plana sahip video, saydamlığı destekleyen bir video biçiminde olmalıdır (çoğu kullanmaz) - kullanırdım qtrle(Apple'ın Animasyon kodeği). Ancak gerçek chroma-key-key'i yapamazlar (belli bir rengi şeffaf hale getirerek).

Muhtemelen avconv ve ImageMagick'i içeren bir geçici çözüm kullanabilirsiniz, ancak bu oldukça CPU yoğun olurdu ve sonuçlarınızın ne kadar iyi olacağını bilmiyorum. Yapmanız gerekenler:

  1. Chroma-key yapmak istediğiniz videoyu avconv ile ayrı ayrı karelere dönüştürün
  2. Her bir karede chroma tuşlaması yapmak için ImageMagick'in dönüştürme (veya mogrify) aracını kullanın
  3. Çerçeveleri avconv ile tekrar birleştirin ve arka plan videosunun üzerine yerleştirin

Borular kullanarak işlemi basitleştirebilirsiniz.

Çerçeveleri çıkarmak için (00001.png, 00002.png, vb. Gibi görünen dosyalar üretir):

avconv -i input.mp4 %05d.png

Bunları bir araya geri dikmek ve ImageMagick'i üzerlerine getirdikten sonra arka plan videonuzun üstüne koymak için:

avconv -f image2 -r 25 -i %05d.png -i background.mp4 \
-filter_complex '[1:v][0:v]overlay[out]' \
-map [out] -c:v libx264 -crf 23 -preset veryfast output.mp4

-r 25size 25 kare hızı verir; Başka bir kare hızı istiyorsanız, sadece farklı bir sayı kullanın. Orijinal giriş videosu ile aynı kare hızını kullandığınızdan emin olun. Sesi orijinal girişinizden almak istiyorsanız,

avconv -f image2 -r 25 -i %05d.png -i background.mp4 -i input.mp4 \
-filter_complex '[1:v][0:v]overlay[out]' \
-map [out] -map 2:a -c:v libx264 -crf 23 -preset veryfast -c:a copy output.mp4

AVconv’un bazı sürümlerinin (Ubuntu reposundaki sürüm gibi) filtre grafiklerini desteklemediğini unutmayın. Bu sizin için geçerliyse, daha yeni bir avconv veya ffmpeg sürümüne yükseltin.

2. aşama gelince ... Aslında bunu nasıl emin değilim ama ImageMagick biliyorum edebilirsiniz kroma anahtarlama yapmak. İşte faydalı bulabileceğiniz birkaç link:

http://www.imagemagick.org/Usage/photos/#chroma_key
http://www.imagemagick.org/discourse-server/viewtopic.php?t=14394
http://tech.natemurray.com/2007/12 /convert-white-to-transparent.html

İnsanların size vereceği örnekler arasındaki ışıklandırma vb. Farklılıklar nedeniyle, kurtulmak için mavinin tam gölgelerini algılamak için bir şeyler kullanmanız gerekir. Muhtemelen bir küçük resim oluşturmak için ffmpeg kullanarak ve ardından arka plan rengini seçmek için bir damlalık kullanarak, kullanıcılarınıza bırakmanız gerekecek.


Yani, teknik olarak yapılamaz, ancak mükemmel bir iş bulduk. Çok teşekkür ederim!
Jimmery

Yardım etmekten mutluluk duyuyorum :) ... eğer bu yöntemi kullanırsanız, lütfen burada nasıl yaptığınızı, başkalarına yardım etmek için nasıl cevap vereceğinizi gönderebilir misiniz? Ben de şahsen ilgilenirim.
evilsoup

1
Ffmpeg'deki frei0r filtreleri bunu yapabilir, ancak ffmpeg'in iki giriş kullanan frei0r filtrelerini kullanarak destekleyebileceğinden emin değilim. Frei0r hakkında konuşurken, ffmpeg'in "mixer2" ve "mixer3" frei0r filtrelerini destekleyip desteklemediğinden emin değilim.
llogan

@LordNeckbeard bu gerçekten iyi bir nokta, şu anda ffmpeg'in yeni bir sürümünü --enable-libfrei0r ile derliyorum, bluescreen0r filtresini bugün / yarın test edeceğiz.
evilsoup

Sonuçlarınla ​​ilgileneceğim.
llogan

3

Bunu MLT kullanarak yapabilirsiniz.

melt https://archive.org/download/IMB_SF_R35_C8/IMB_SF_R35_C8_512kb.mp4 in=400 \
    -track https://archive.org/download/IMB_SF_R19_C9/IMB_SF_R19_C9_512kb.mp4 in=450 \
    -filter chroma key=0x00ff0000 variance=0.45 \
    -transition composite

Bu, bir arka plan videosunu ve bir köpeğin yeşil ekran klibini, üstte birleştirilmiş ikinci bir parça olarak oynatır. Kompozisyonlu arka planın gösterilmesine izin veren yeşil alanlara alfa uygulamak için bir kroma anahtarı (bazı değişkenliklerle yeşile ayarlanır) kullanır. in=XXXSadece kullanılan video klipler üzerinde bazı önde gelen süprüntüleri kesecek için vardır.


1

chroma key, sürüm 3.0'dan itibaren ffmpeg'de, colorkey seçeneğini kullanmadan önce kullanılabilir.

ffmpeg -f mpeg -i input.mp4 -i video.mp4 -shortest -filter_complex "[1:v]chromakey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mp4

ffmpeg v2.8 veya daha üstündeki colorkey için

 ffmpeg -f mpeg -i input.mp4 -i video.mp4 -shortest -filter_complex "[1:v]colorkey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mp

Bunların ikisi de benim için çalışıyor.

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.