ffmpeg kullanarak 2 video arasındaki geçiş


27

Ffmpeg kullanarak 2 video klip arasında çapraz geçiş yapmaya çalışıyorum ancak şu ana kadar başarısız oldum. Ben ffmpeg için yeniyim ve çoğunlukla çevrimiçi belgelerde ve mevcut örneklerde bulabildiğim ayarlarda güveniyorum. Şimdiye kadar okuduklarımdan sonra, harman ya da kaplama filtresinin kullanılması, peşimden gelenin elde edilmesinde yardımcı olmalı, ancak çalışmasını sağlamak için komut satırı ayrıntılarını bulamıyorum.

Solma ve concat filtreler için mükemmeldir videonun 2'ye fade-in ve 2 1 klip haline concat, solmaya aşımı video 1'in tip geçişler ama herhangi olmadan videoda 2 videoya 1 geçiş için bir komut alma yardım takdir ediyorum arada siyah olacak . Tam olarak bu problem için hiçbir örnek bulamadım, belki yanlış anahtar kelimeler arıyorum ...?

Daha doğrusu, videolarım mp4'lerdir (h264 video, önemli olması durumunda ses yok), her biri 5 saniye uzunluğunda ve yaklaşık 4.5s video 1 - 0.5s video 2.

Bu eğitimde MLT ve çerçeveler kullandıklarına benzer (örneğin solma için bkz. 2:25), bununla birlikte başka bir program çağırmadan ffmpeg'de bunu yapmanın bir yolunu arıyorum. http://www.youtube.com/watch?v=3PRZ9L_KLdI

Herhangi bir işaretçi veya belki de böyle solmaya giden bir komut satırı çok takdir edilecektir, çok teşekkürler!


Yanıtlar:


23

Bu şekilde yapmayı öneririm:

  • Çıktı videosunun olması gereken süreye ve çözünürlüğe sahip siyah arka plan oluşturun
  • Her videoya alfa kanalı ekle
  • Her videoya alfa efekti eklemek
  • Siyah arka plana sahip her videoda kaplamayı kullanın

Dolayısıyla her birine 2 videoya (5 sn) çapraz ekleme ekleme komutu şöyle olmalıdır:

ffmpeg -i 1.mp4 -i 2.mp4 -f lavfi -i color=black -filter_complex \
"[0:v]format=pix_fmts=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[va0];\
[1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+4/TB[va1];\
[2:v]scale=960x720,trim=duration=9[over];\
[over][va0]overlay[over1];\
[over1][va1]overlay=format=yuv420[outv]" \
-vcodec libx264 -map [outv] out.mp4

Bu, ilk videonun 1 saniyede (d = 1) 4. saniyede alfaya (st = 4), 1 saniyede (d = 1) ikincisinde 0 saniyede (st = 0) kaybolmasına ve gösterimini hareket ettirmesine neden olur. 4 saniye ileri (+ 4 / TB). Sonra sadece 9 saniyelik siyah rengi kestik, video boyutunu elde etmek için ölçeklendirdik ve malzemelerin üzerine bindik.

Umarım yardımcı olur.


Merhaba @ptQa, çok teşekkürler, crossfade etkisi bir cazibe gibi çalışıyor. Çıkış videosunda olanlar orijinal videoların sadece sol üst kısmını gösterir ve karenin geri kalanı eksiktir. Çözünürlük değerine baktım, giriş 960 x 720 ve çıktı 320 x 240'dı ancak tüm videoyu küçültmedi, bunun yerine sol üstte 320 x 240 bölümünü kesiyor ve çıktı videoda kalanı gösteriyor giriş videoları eksik. Bunu engelleyen komut satırınıza bir ekleme var mı?
Mugba

Ah, anladım, ayrıca elde etmek istediğiniz çözünürlüğe siyah rengi de ölçeklemelisiniz. Güncellenmiş cevaba bakınız. Grafiği filtrelemek için ölçek ekledim.
ptQa

Bu çözüldü, teşekkürler. Herhangi birinin
Mugba

Aynı sorun; Kendi videomda çalışan bir tür var - teşekkürler. Soru: Bu, videoların solmasıyla aynı kalıbı izleyerek, videoların ses kayıtlarını da nasıl çapraz solmaya sokacak?
Jim Miller

1
BTW, cevabın örnek komutunda bir hata olduğunu düşünüyorum - öyle olmalı -i 1.mp4 -i 2.mp4..., değil mi?
Jim Miller

7

Ben böyle yaptım:

  • ffmpeg sürüm N-77197-gdf2ce13
  • Her biri 4 saniyelik 2 video.
  • Aralarında solmaya katılmak gerekiyor.
  • videolar 25 fps.

1) 1.'in sonuna solmaya (açık - koyu) ve 2.'nin başlangıcında solmaya (koyu - açık) ekleyin:

ffmpeg -i 1.mp4 -y -vf fade=out:76:24 1f.mp4

ffmpeg -i 2.mp4 -y -vf fade=in:0:25 2f.mp4

76:24, solma çıkmasının 76 numaralı kareye başlayacağı ve 24 kare sonra biteceği anlamına gelir = 1 sn.

0:25, solukluktaki kare 0 ile başlayacak ve 25 kare sonra bitecek.

2) 2 videoyu birleştir

Tümünü TS'e dönüştür

ffmpeg -i 1f.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 1f.ts

ffmpeg -i 2f.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 2f.ts

Birleştirme

ffmpeg -i "concat:1f.ts|2f.ts" -bsf:a aac_adtstoasc -c copy output.mp4

Sayesinde:

http://www.bogotobogo.com/FFMpeg/ffmpeg_fade_in_fade_out_transitions_effects_filters.php


6
Bu bir crossfade değil.
Gyan

4
@Mulvya ne dedi. Bir çarpışma, bir klibin bir başkasıyla aynı anda kaybolurken kaybolur. ikincisi şeffaflığı giderek azaldı.
intuited

7

ffmpeg-concat , istediğinizi elde etmenin en kolay yoludur ve varsayılan crossfade özelliği ile bir sürü seksi OpenGL geçişi kullanmanıza izin verir.

ffmpeg-gl-geçişi , iki video akışı arasında sorunsuz geçiş yapmak için GLSL kullanmanıza izin veren özel bir ffmpeg filtresidir. Bu filtrenin kullanımı ve kişiselleştirilmesi burada listelenen alternatiflerden çok daha kolaydır.

Bu filtre , varsayılan olarak çapraz geçiş olan geniş bir geçiş türleri listesini destekler .

./ffmpeg -i 0.mp4 -i 1.mp4 -filter_complex "gltransition=duration=4:offset=1.5" out.mp4

4
FFmpeg'e bir yama göndermeyi düşündünüz mü?
17lo'da

1
Kesinlikle, sadece bazı küçük sorunları çözmem ve daha önce test etmem gerekiyor. İyi arama!
fisch2

Bu resmi FFmpeg'de mi? Onu bulmak gibi görünmüyor
kraftydevil
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.