FFMPEG'nin sıralı olmayan görüntü dosyalarına katılması nasıl sağlanır? (3s atla)


27

Bu modeli takip eden bir sürü imgem var.

0001.png
0004.png
0007.png
0010.png
0013.png
0016.png
0019.png
...

Doğru sıradalar, ancak FFMPEG ilk dosyadan sonra herhangi bir şeyi görmezden geliyor, çünkü bulamıyor 0002.png. Bu dosyalara katılmasını nasıl sağlayabilirim?

denedim

ffmpeg -i %04d.png out.avi

2
Onları geçici olarak yeniden adlandırmaya, AVI yapmaya ve sonra bunları (3x-2) .png şemasına yeniden adlandırmaya ne dersiniz? Toplu Yeniden Adlandırma Yardımcı Programı @ bulkrenameutility.co.uk/Main_Intro.php ücretsiz, umm, toplu bir yeniden adlandırmadır.
Gyan

Yanıtlar:


18

ffmpeg 0.11.1 ile bu kadar kolay:

ffmpeg -f image2 -i %*.png out.avi

Sayfadan, man"Video ve Ses dosyası formatı dönüştürme" altındaki bir örnekte:

Bir görüntü dizisini içe aktarırken, -iaynı zamanda kabuk benzeri joker desenleri (globbing) dahili olarak genişletmeyi de destekler. Gerçek dosya adlarınıza ve kabuğunuzun glob genişlemesine müdahale etme olasılığını azaltmak için, glob meta karakterlerini , veya %gibi tek bir karakterle ön ekleyerek etkinleştirmeniz gerekir .foo-%*.jpegfoo-%?%?%?.jpegfoo-00%[234%]%*.jpeg

Yorum başına güncelleme: son sürümlerde şimdi -i '*.png'sözdizimini kullanmalısınız .


3
Bu benim için Ubuntu'da ffmpeg veya avconv kullanarak çalışmıyordu 13.04
hellocatfood 12:13

2
Bu artık bir seçenek olarak görünmüyor.
Timmmm

2
glob_sequenceDesen türü artık kullanılmamaktadır, ancak globdesen türü değil. Mulvya ve Peter Cordes'in cevabı işe yarıyor.
Dr. Sybren

1
Pattern type 'glob_sequence' is deprecated: use pattern_type 'glob' instead
Serge Stroobandt

1
Tıpkı açıklamada olduğu gibi, bu sayfa şu anda Google’da bu uyarı mesajının en üst sonucudur ( Pattern type 'glob_sequence' is deprecated...): yukarıdaki rymo tarafından verilen komut (özellikle de -i %*.png) bu uyarıya neden olacaktır . Bunu ortadan kaldırmak için Peter Cordes answer ( -i '*.png') içindeki biraz farklı sözdizimini kullanın .
James,

19

Benim yorumumdaki geçici çözüm dışında, bu sözdizimini ffmpeg belgelerinde kullanabilmeniz gerekir :

ffmpeg -f image2 -pattern_type glob -i '*.png' out.avi

Tırnaklar önemlidir, görmek için ffmpeg'e ihtiyacınız *vardır, kabuğun genişletmesini sağlamayın .


İşe yaramıyor, ama muhtemelen daha eski bir yapıya sahibim. Bunu kabul ediyorum çünkü gelecekteki kullanıcılara yardımcı olma olasılığı yüksektir.
Brigand

Ffmpeg belgelerine göre , glob desen türünde% 04d.png yerine '* .png' kullanmalısınız.
George Of Friend

Bu daha sonra, 00xx.png'nin yanı sıra klasörde bulunan tüm png'leri seçer, oysa OP, numaralandırma sürekliliği hakkında endişe duymadan sadece% 04d png'lerini sıraya koymak ister.
Gyan

2
Ben eminim sen koymak gerektiğini *.pngtek tırnak içinde (böylece '*.png') o Unix tarzı kabukları (yani OSX ve Linux vb) tarafından genişletilmiş önlemek için.
evilsoup

1
Ne yazık ki, ffmpeg geliştiricileri dosya globbing'i bir seçenek olarak desteklemektedir ! Standart pencereler onu içermez.
Timmmm

9

Gönderen http://www.ffmpeg.org/faq.html : Yeniden adlandırmak resimlerin çok sayıda varsa, yükü hafifletmek için aşağıdaki komutu kullanabilirsiniz. Bourne kabuğu sözdizimini kullanan komut, geçerli dizindeki * jpg ile eşleşen tüm dosyaları 'img001.jpg', 'img002.jpg' dizisindeki '/ tmp' dizinine sembolik olarak bağlar.

x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done


Bunu çoklu dizileri seqA-[0001-n].png, seqB-[0001-n].pngvb. Birleştirmek için kullandım . İmage2 globbing ve concat filtresiyle uğraşmaktan çok daha kolay.
z0r

Ben yerini dek Benim için bu işe yaramadı for i in *jpgile for i in /full/path/*jpgtüm symlinks kırıldı çünkü
Jezzamon

4

Aslında Mulvya'nın önerdiği şeyi de öneririm. 3B animasyon oluşturma işlemleriyle uğraşırken böyle şeyler yapmam gerektiğinde, bunları sıralı hale getirmek için dosyaları yeniden adlandırdım. Bir nedenden dolayı dosya adlarını korumanız gerekmediği sürece birçok farklı yazılımda bu şekilde çalışmak daha kolaydır. Toplam Komutanı da çoklu yeniden adlandırma için harika bir araçtır.


Benzer bir şey yaptım (Python adını değiştiren bir script).
Brigand

3

Kayıp dizi kısmı için 2 astar kullandım

CONCAT=$(echo $(ls *.png | sort -n -t _ -k 2) | sed -e "s/ /|/g")
ffmpeg -framerate 25 -i "concat:$CONCAT" -c:v libx264 -profile:v high -pix_fmt yuv420p output.mp4

Umarım bu gelecekte birine yardımcı olur

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.