FFmpeg, videoyu temsil etmek için küçük resimler olarak kullanılabilecek videolardan görüntüler alabilir. Bunu yapmanın en yaygın yolları FFmpeg Wiki .
Ancak, bazı aralıklarla rasgele kareler seçmek istemiyorum. Sahne değişikliklerini yakalamak için FFmpeg'deki filtreleri kullanarak bazı seçenekler buldum:
Filtre thumbnail
videodaki en temsili çerçeveleri bulmaya çalışır:
ffmpeg -i input.mp4 -vf "thumbnail,scale=640:360" -frames:v 1 thumb.png
ve aşağıdaki komut yalnızca öncekine kıyasla değişikliklerin% 40'ından fazlasına sahip kareleri seçer (ve muhtemelen sahne değişiklikleridir) ve 5 PNG dizisi oluşturur.
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.4),scale=640:360" -frames:v 5 thumb%03d.png
Yukarıdaki komutlar için bilgi kredisi Fabio Sonnati . İkincisi n görüntüleri alıp en iyisini seçebildiğim için daha iyi görünüyordu. Denedim ve aynı görüntüyü 5 kez üretti.
Biraz daha araştırma beni yönlendirdi:
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.png
-vsync vfr
Farklı görüntüler elde etmenizi sağlar. Bu, yine de her zaman videonun ilk karesini seçer, çoğu durumda ilk kare krediler / logodur ve anlamlı değildir, bu yüzden bir -ss
Videonun ilk 3 saniyesini atmak için 3.
Son emrim şöyle gözüküyor:
ffmpeg -ss 3 -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.jpg
Yapabileceğim en iyisiydi. Yalnızca 5 video seçtiğimden beri, hepsinin çoğunlukla videonun başlangıcından geldiğini ve videonun ilerleyen bölümlerinde meydana gelen önemli sahneleri kaçırabileceğini fark ettim.
Diğer daha iyi seçenekler için beynini seçmek istiyorum.
mjpeg
benim için kodlayıcı ve ben de kontrol jpegoptim
ve exiv2
Her ikisi de benim için iyi çalışıyor, örnek komutlarınızdaki tüm JPG sonuçları.
libopenjpeg
.. bunun bir fark yaratıp yaratmadığından emin değilim.