-pattern_type glob
Bu harika seçenek, birçok durumda görüntüleri seçmeyi kolaylaştırır.
Saniyede bir resim içeren slayt gösterisi videosu
ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
-c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Biraz müzik ekleyin, görüntüler sona erdiğinde muhtemelen daha uzun bir ses çıkardığında kesin:
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
-c:a copy -shortest -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
İşte YouTube'da iki demo:
Hippi olun ve Theora patentli numaralandırılmamış video formatını kullanın :
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
-c:a copy -shortest -c:v libtheora -r 30 -pix_fmt yuv420p out.ogg
Resimleriniz elbette alfabetik olarak sıralanmalıdır:
0001-first-thing.jpg
0002-second-thing.jpg
0003-and-third.jpg
ve bunun gibi.
Öncelikle, kullanılacak tüm görüntülerin, muhtemelen önceden imagemagick
veya nomacs ile kırparak aynı en boy oranına sahip olmasını sağlarım , böylece ffmpeg zor kararlar vermek zorunda kalmaz. Özellikle, genişlik 2 ile bölünebilir olmalıdır, aksi takdirde dönüşüm başarısız olur: "genişlik 2 ile bölünemez".
30 FPS'de kare başına bir görüntü ile normal hızlı video
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-c:v libx264 -pix_fmt yuv420p out.mp4
İşte böyle görünüyor:
İle oluşturulan GIF: /ubuntu/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574
Ses ekleyin:
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-i audio.ogg -c:a copy -shortest -c:v libx264 -pix_fmt yuv420p out.mp4
Sonuç: https://www.youtube.com/watch?v=HG7c7lldhM4
Bunlar kullandığım test ortamları:
wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
Şununla oluşturulan resimler: Bir dosyaya dönüştürmek için GLUT / OpenGL nasıl kullanılır?
Özel algoritmalarla kareler arasında sıkıştırabildiğinden, videonun görüntü dizisini ZIP'den daha iyi sıkıştırdığını gözlemlemek harika:
opengl-rotating-triangle.mp4
: 340K
opengl-rotating-triangle.zip
: 7,3 milyon
YouTube yüklemesi için bir müzik dosyasını sabit bir resme sahip bir videoya dönüştürün
Yanıt verildi: /superuser/700419/how-to-convert-mp3-to-youtube-allowed-video-format/1472572#1472572
Adım adım tam gerçekçi slayt gösterisi vaka çalışması kurulumu
Slayt gösterileri oluşturmak için tek bir ffmpeg komutu çalıştırmaktan biraz daha fazlası var, bu yüzden bu zaman çizelgesinden ilham alan daha ilginç ve ayrıntılı bir örnek var .
Giriş ortamını alın:
mkdir -p orig
cd orig
wget -O 1.png https://upload.wikimedia.org/wikipedia/commons/2/22/Australopithecus_afarensis.png
wget -O 2.jpg https://upload.wikimedia.org/wikipedia/commons/6/61/Homo_habilis-2.JPG
wget -O 3.jpg https://upload.wikimedia.org/wikipedia/commons/c/cb/Homo_erectus_new.JPG
wget -O 4.png https://upload.wikimedia.org/wikipedia/commons/1/1f/Homo_heidelbergensis_-_forensic_facial_reconstruction-crop.png
wget -O 5.jpg https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Sabaa_Nissan_Militiaman.jpg/450px-Sabaa_Nissan_Militiaman.jpg
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
cd ..
# Convert all to PNG for consistency.
# /unix/29869/converting-multiple-image-files-from-jpeg-to-pdf-format
# Hardlink the ones that are already PNG.
mkdir -p png
mogrify -format png -path png orig/*.jpg
ln -P orig/*.png png
Şimdi, son en boy oranına karar vermek için tüm görüntü boyutlarına hızlı bir şekilde bakıyoruz:
identify png/*
hangi çıktılar:
png/1.png PNG 557x495 557x495+0+0 8-bit sRGB 653KB 0.000u 0:00.000
png/2.png PNG 664x800 664x800+0+0 8-bit sRGB 853KB 0.000u 0:00.000
png/3.png PNG 544x680 544x680+0+0 8-bit sRGB 442KB 0.000u 0:00.000
png/4.png PNG 207x238 207x238+0+0 8-bit sRGB 76.8KB 0.000u 0:00.000
png/5.png PNG 450x600 450x600+0+0 8-bit sRGB 627KB 0.000u 0:00.000
klasik 480p (640x480 == 4/3) en boy oranı uygun görünüyor.
Genişlikleri eşit hale getirmek için minimum yeniden boyutlandırma ile tek bir dönüşüm yapın (TODO herhangi bir genişlik için otomatikleştirilir, burada manuel olarak identify
çıktıya ve genişlik ve yüksekliği birer birer azalttım):
mkdir -p raw
convert png/1.png -resize 556x494 raw/1.png
ln -P png/2.png png/3.png png/4.png png/5.png raw
ffmpeg -framerate 1 -pattern_type glob -i 'raw/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p raw.mp4
Bu, korkunç bir çıktı üretir, çünkü aşağıdakilerden görüldüğü gibi:
ffprobe raw.mp4
ffmpeg sadece ilk görüntünün boyutunu (556x494) alır ve sonra diğerlerini tam boyutuna dönüştürerek en boy oranını bozar.
Şimdi ImageMagick'e göre kırparak görüntüleri otomatik olarak hedef 480p en boy oranına dönüştürelim : bir görüntüyü belirli bir en boy oranına nasıl asgari düzeyde kırpacağız?
mkdir -p auto
mogrify -path auto -geometry 640x480^ -gravity center -crop 640x480+0+0 png/*.png
ffmpeg -framerate 1 -pattern_type glob -i 'auto/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p auto.mp4
Şimdi, en boy oranı iyi, ancak kaçınılmaz olarak, görüntülerin ilginç kısımlarını kesen bir miktar kırpma yapılması gerekiyordu.
Diğer seçenek, şu şekilde gösterilen en boy oranına sahip olmak için siyah arka planla doldurmaktır: Bir kutuya sığacak şekilde yeniden boyutlandırın ve "boş" kısımda arka planı siyah olarak ayarlayın
mkdir -p black
ffmpeg -framerate 1 -pattern_type glob -i 'black/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p black.mp4
Genel olarak konuşursak, ideal olarak aynı veya benzer en boy oranlarına sahip görüntüleri ilk etapta bu problemlerden kaçınmak için seçebilirsiniz.
CLI seçenekleri hakkında
Bununla birlikte, isme rağmen, -glob
bunun kabuk Glob desenleri kadar genel olmadığını unutmayın, örneğin: -i '*'
başarısız: https://trac.ffmpeg.org/ticket/3620 (görünüşe göre filetype uzantıdan çıkarıldığı için).
-r 30
-framerate 1
videoyu düşük kare hızları için VLC gibi oyunculardaki hataların üstesinden gelmek için 30 FPS yapar : VLC, ffmpeg içeren görüntülerden oluşturulan düşük 1 FPS video için donar. Bu nedenle saniyede istenen 1 görüntüyü korumak için her kareyi 30 kez tekrarlar.
Sonraki adımlar
Ayrıca şunları yapmak isteyeceksiniz:
YAPILACAKLAR: ara dosyalar olmadan videoya birden fazla ses dosyasını kesmeyi ve birleştirmeyi öğrenin, bunun mümkün olduğuna eminim:
Üzerinde test edildi
ffmpeg 3.4.4, vlc 3.0.3, Ubuntu 18.04.
kaynakça