Ini menggunakan ffmpeg versi 3.4.4-0ubuntu0.18.04.1 di Ubuntu 18.04.
Saya ingin mencapai hal yang sama seperti di Buat video dengan 5 gambar dengan efek fadeIn / out di ffmpeg (kebanyakan "Dip menjadi hitam", meskipun saya juga ingin tahu tentang "Crossfade") - namun, saya memiliki banyak file , dan lebih suka menggunakan jalur absolut, dan saya khawatir saya akan mengalami beberapa batasan baris perintah jika saya mendaftarkan setiap file pada baris perintah.
Jadi, saya telah menemukan ini (hal yang sama dicatat pada tayangan slide ffmpeg dengan crossfade ):
... yang menyebutkan:
"A" adalah durasi dalam detik berapa lama setiap gambar ditampilkan (tanpa durasi crossfade), dan "B" adalah durasi crossfade dalam detik.
ffmpeg -i IMG_%3d.jpg -vf zoompan=d=(A+B)/B:fps=1/B,framerate=25:interp_start=0:interp_end=255:scene=100 -c:v mpeg4 -maxrate 5M -q:v 2 out.mp4
Jadi, saya punya gambar-gambar ini:
$ ls /path/to/test_*.jpg | wc -l
249
Saya ingin framerate menjadi 25 fps, durasi setiap gambar tanpa fade: seperempat detik, 0,25 detik (jadi 6,25 frame, atau lantai, 6 frame), dan durasi fade 4 frame (jadi 0,16 detik @ 25 fps). Jadi saya berharap setidaknya 249 * (6 + 4) = 2490 frame, atau 99,6 detik pada 25 fps.
Ini adalah format gambar (dari kamera ponsel):
$ mediainfo /path/to/test_IMG_11a.jpg
General
Complete name : /path/to/test_IMG_11a.jpg
Format : JPEG
File size : 1 001 KiB
Image
Format : JPEG
Width : 3 840 pixels
Height : 2 160 pixels
Color space : YUV
Chroma subsampling : 4:2:2
Bit depth : 8 bits
Compression mode : Lossy
Stream size : 1 001 KiB (100%)
Jadi, saya coba baris perintah ini:
ffmpeg -an -f image2 -pattern_type glob -i '/path/to/test_*.jpg' \
-vf 'fps=25,zoompan=d=(0.25+0.16)/0.16:fps=1/0.16,framerate=25:interp_start=0:interp_end=255:scene=100' \
-vcodec libx264 -pix_fmt yuv420p -profile:v baseline -level 3 \
-y out.mp4
Ini menghasilkan dua masalah:
Masalah pertama adalah:
[swscaler @ 0x5582a63a4500] deprecated pixel format used, make sure you did set range correctly
Last message repeated 3 times
Meskipun saya tidak memanggil skala secara langsung, ternyata itu tersirat, karena saya lihat di https://trac.ffmpeg.org/wiki/colorspace :
YUV-ke-RGB atau penskalaan membutuhkan skala besar.
Posting https://stackoverflow.com/questions/43038294/im-getting-error-deprecated-pixel-format-used-make-sure-you-did-set-range-corr catatan peringatan ini dapat diabaikan. Namun, saya ingin memperbaikinya; Saya telah menemukan:
Tetapi jika Anda menggunakan swscale, Anda juga harus mengatur sendiri rentangnya, atau hasilnya akan salah.
- Konversi yuvj420p ke yuv420p - masalah dengan level hitam? : ffmpeg dengan contoh "diselesaikan" yang menggunakan colorspace
... tapi saya tidak tahu cara menentukan colorspace untuk gambar saya
Masalah kedua: tidak yakin apakah itu terkait dengan masalah pertama, tetapi output video sebagai hasil dari perintah di atas berhenti pada frame = 421 - dan saya bisa melihat, sebagian besar dari 249 gambar saya tidak dikodekan! Vlc melihat 16 detik dalam video keluaran - jauh di bawah 2490 frame, atau 99,6 detik, yang saya harapkan.
Jadi, apa permintaan baris perintah yang benar, untuk mendapatkan tampilan slide dari urutan gambar dengan fade, tanpa peringatan penghentian dan dengan semua gambar yang disandikan?
deprecated pixel format
masih muncul di seluruh proses (meskipun tampaknya agak jarang), dan sayangnya video masih terpotong (yaitu, hanya 421 frame dalam video output, bukannya yang diharapkan 2k +)
-pix_fmt yuv420p
dan menempatkannya dalam filterChain Anda sebagai filter pertama:-vf 'format=yuv420p,...
. Anda "deprecated pixel format
" masih dapat menerima pesan yang bisa Anda abaikan, tetapi pesan itu hanya akan muncul sekali dan bukan spam konsol. Saya sarankan selalu menggunakan format alih-alih-pix_fmt
agar Anda dapat mengontrol dengan lebih baik ketika konversi format terjadi dalam kaitannya dengan filter lainnya.