-pattern_type glob
Opsi hebat ini memudahkan untuk memilih gambar dalam banyak kasus.
Video tayangan slide dengan satu gambar per detik
ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
-c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Tambahkan beberapa musik ke dalamnya, potong ketika audio agak lama ketika gambar berakhir:
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
Berikut adalah dua demo di YouTube:
Jadilah hippie dan gunakan format video Theora patent-unencumbered :
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
Gambar Anda tentu saja harus disortir berdasarkan abjad, biasanya sebagai:
0001-first-thing.jpg
0002-second-thing.jpg
0003-and-third.jpg
dan seterusnya.
Saya juga pertama-tama akan memastikan bahwa semua gambar yang akan digunakan memiliki rasio aspek yang sama, mungkin dengan memotongnya dengan imagemagick
atau nomacs sebelumnya, sehingga ffmpeg tidak harus membuat keputusan sulit. Secara khusus, lebar harus dapat dibagi 2, jika tidak konversi gagal dengan: "lebar tidak dapat dibagi 2".
Video kecepatan normal dengan satu gambar per bingkai pada 30 FPS
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-c:v libx264 -pix_fmt yuv420p out.mp4
Begini tampilannya:
GIF dihasilkan dengan: /ubuntu/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574
Tambahkan beberapa audio ke dalamnya:
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-i audio.ogg -c:a copy -shortest -c:v libx264 -pix_fmt yuv420p out.mp4
Hasil: https://www.youtube.com/watch?v=HG7c7lldhM4
Ini adalah media uji yang saya gunakan: a
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
Gambar yang dihasilkan dengan: Bagaimana cara menggunakan GLUT / OpenGL untuk membuat file?
Sangat keren untuk mengamati seberapa banyak video mengompres urutan urutan gambar lebih baik daripada ZIP karena mampu mengompresi seluruh frame dengan algoritma khusus:
opengl-rotating-triangle.mp4
: 340K
opengl-rotating-triangle.zip
: 7.3M
Konversi satu file musik ke video dengan gambar tetap untuk unggahan YouTube
Dijawab di: /superuser/700419/how-to-convert-mp3-to-youtube-allowed-video-format/1472572#1472572
Pengaturan studi kasus slideshow penuh realistis langkah demi langkah
Ada sedikit lebih banyak untuk membuat tayangan slide daripada menjalankan perintah ffmpeg tunggal, jadi inilah contoh detail yang lebih menarik yang terinspirasi oleh timeline ini .
Dapatkan media input:
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
Sekarang kita memiliki pandangan cepat pada semua ukuran gambar untuk memutuskan rasio aspek akhir:
identify png/*
yang keluaran:
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
jadi rasio aspek 480p (640x480 == 4/3) klasik tampak tepat.
Lakukan satu konversi dengan pengubahan ukuran minimal untuk membuat lebar rata (TODO mengotomatiskan untuk lebar apa pun, di sini saya hanya melihat identify
keluaran secara manual dan mengurangi lebar dan tinggi per satu):
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
Ini menghasilkan output yang mengerikan, karena dilihat dari:
ffprobe raw.mp4
ffmpeg hanya mengambil ukuran gambar pertama, 556x494, dan kemudian mengonversi semua yang lain ke ukuran yang tepat, melanggar rasio aspek mereka.
Sekarang mari kita konversi gambar ke rasio aspek target 480p secara otomatis dengan memotong sesuai ImageMagick: bagaimana cara memangkas gambar secara minimal ke rasio aspek tertentu?
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
Jadi sekarang, rasio aspeknya baik, tetapi mau tidak mau beberapa pemotongan harus dilakukan, jenis potongan mana yang menarik dari gambar.
Pilihan lain adalah untuk pad dengan latar belakang hitam untuk memiliki rasio aspek yang sama seperti yang ditunjukkan pada: Ubah ukuran agar sesuai dalam kotak dan mengatur latar belakang menjadi hitam pada bagian "kosong"
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
Namun secara umum, Anda idealnya dapat memilih gambar dengan rasio aspek yang sama atau serupa untuk menghindari masalah tersebut.
Tentang opsi CLI
Namun perlu dicatat bahwa meskipun namanya, -glob
ini tidak umum seperti patters shell Glob, misalnya: -i '*'
gagal: https://trac.ffmpeg.org/ticket/3620 (tampaknya karena filetype disimpulkan dari ekstensi).
-r 30
membuat -framerate 1
video 30 FPS untuk mengatasi bug pada pemain seperti VLC untuk framerate rendah: VLC membeku untuk video 1 FPS rendah yang dibuat dari gambar dengan ffmpeg Oleh karena itu ia mengulangi setiap frame 30 kali untuk menjaga efek 1 gambar per detik yang diinginkan.
Langkah selanjutnya
Anda juga ingin:
TODO: belajar memotong dan menggabungkan beberapa file audio ke dalam video tanpa file perantara, saya cukup yakin itu mungkin:
Diuji pada
ffmpeg 3.4.4, vlc 3.0.3, Ubuntu 18.04.
Bibliografi