FFmpeg dapat menangkap gambar dari video yang dapat digunakan sebagai gambar kecil untuk mewakili video. Cara paling umum untuk melakukan itu ditangkap dalam FFmpeg Wiki .
Tapi, saya tidak ingin memilih frame acak pada beberapa interval. Saya menemukan beberapa opsi menggunakan filter pada FFmpeg untuk menangkap perubahan pemandangan:
Filter thumbnail
mencoba menemukan bingkai paling representatif dalam video:
ffmpeg -i input.mp4 -vf "thumbnail,scale=640:360" -frames:v 1 thumb.png
dan perintah berikut memilih hanya frame yang memiliki lebih dari 40% perubahan dibandingkan dengan sebelumnya (dan mungkin juga perubahan adegan) dan menghasilkan urutan 5 PNG.
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.4),scale=640:360" -frames:v 5 thumb%03d.png
Kredit info untuk perintah di atas ke Fabio Sonnati . Yang kedua tampak lebih baik karena saya bisa mendapatkan gambar dan memilih yang terbaik. Saya mencobanya dan menghasilkan gambar yang sama 5 kali.
Beberapa investigasi membuat saya:
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.png
-vsync vfr
memastikan bahwa Anda mendapatkan gambar yang berbeda. Ini masih selalu mengambil frame pertama dari video, dalam banyak kasus frame pertama adalah kredit / logo dan tidak berarti, jadi saya menambahkan -ss
3 untuk membuang 3 detik pertama video.
Perintah terakhir saya terlihat seperti ini:
ffmpeg -ss 3 -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.jpg
Ini adalah yang terbaik yang bisa saya lakukan. Saya perhatikan bahwa karena saya hanya mengambil 5 video, semuanya kebanyakan dari awal video dan mungkin kehilangan adegan penting yang terjadi kemudian dalam video
Saya ingin memilih otak Anda untuk opsi lain yang lebih baik.
mjpeg
encoder untuk saya juga, dan saya juga memeriksa jpegoptim
dan exiv2
, keduanya bekerja dengan baik untuk saya dengan semua hasil JPG dari perintah contoh Anda.
libopenjpeg
.. tidak yakin apakah itu membuat perbedaan.