Ffmpeg ile bir H264 video dosyasından iyi kalitede bir JPEG görüntüsünü nasıl çıkarabilirim?


110

Şu anda görüntüleri çıkarmak için bu komutu kullanıyorum:

ffmpeg.exe -i 10fps.h264 -r 10 -f image2 10fps.h264_% 03d.jpeg

Ancak JPEG görüntü kalitesini nasıl iyileştirebilirim?


1
Mevcut kalitenin "iyi" olmaması dışında nesi yanlış?
bjoernz

Yanıtlar:


218

Kullanım -qscale:v

Kullanım -qscale:v(veya takma -q:v) bir çıkış seçeneği olarak. JPEG için etkili aralık 2-31'dir ve 31 en kötü kalitedir. 2-5 değerlerini denemenizi tavsiye ederim.

Bir dizi görüntüyü çıkarmak için:

ffmpeg -i input.mp4 -qscale:v 2 output_%03d.jpg

Tek bir görüntüyü ~ 60 saniye süreyle çıkarmak için:

ffmpeg -ss 60 -i input.mp4 -qscale:v 4 -frames:v 1 output.jpg

Bu, herhangi bir video girişi ile çalışacaktır. Girişiniz MJPEG ise aşağıya bakın.


MJPEG

Girişiniz MJPEG (Hareketli JPEG) ise, görüntüler herhangi bir kalite kaybı olmadan çıkarılabilir.

ffmpegYa ffprobeda giriş MJPEG ise konsol çıkış söyleyebilirim:

$ ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=nw=1 input.avi
codec_name=mjpeg

Ardından, mjpeg2jpegbit akışı filtresini kullanarak kareleri ayıklayabilirsiniz :

$ ffmpeg -i input.avi -codec:v copy -bsf:v mjpeg2jpeg output_%03d.jpg

Ayrıca bakın


Bunun benim için bir etkisi yok gibi görünüyor - qscale 1 ve 2'nin her ikisi de aynı dosya boyutlarını veriyor ve (çıplak gözüme) qscale olmadan aynı görünüyor.
2015

Kullandığınız komut satırının tamamını gönderebilir misiniz? Ayrıca lütfen ffmpeg'den eksiksiz, kesilmemiş çıktıyı komut satırına gönderin. Seçeneklerin yerleştirilmesinin konuyla ilgili olduğuna dikkat edin , yani -qscale: v 2'nin -i inputfile seçeneğinden sonra, ancak herhangi bir etkiye sahip olması için çıktı dosyası seçeneğinden önce yerleştirilmesi gerekir.
Ronald S. Bultje

1
Benim -qmin 1 -qmax 1için ek olarak -q:v 1dosya boyutunu ikiye katladı. Ve ben de çok ufak bir gelişme görüyorum.
tamamlayıcı

1
@complistic: -qmin 1 -qmax 1daha büyük bir dosya ile sonuçlandı, ancak bana tamamen aynı görüntüyü veriyor. Bunu photoshop, 2 katman ve fark filtresi ile doğruladım. Pikseller aynıdır.
cherouvim

@Kostanos deneyebilirsiniz -qmin 1 -q:v 1.
llogan

0

Görüntüleri PNG gibi kayıpsız bir biçimde çıkarın:

ffmpeg.exe -i 10fps.h264 -r 10 -f image2 10fps.h264_%03d.png

Ardından, istediğiniz PNG'leri JPEG'e dönüştürmek için başka bir program kullanın (burada kaliteyi, alt örneklemeyi ve DCT yöntemini daha kesin olarak belirleyebilirsiniz - örn. GIMP).

Bu şekilde JPEG formatında biraz daha net görüntüler elde etmek mümkündür -qmin 1 -q:v 1ve doğrudan JPEG ile çıktı almak mümkündür ffmpeg.


ffmpegçıkışlar PNG8sadece 256 renk (GIF ile aynı) kullanmak dosyaları. yani aslında çok kayıplı.
lapin

@lapin Bu yöntemi kullanarak çıkardığım PNG'ler 24 bit (256'dan az renkli kareler için bile, diğerlerinde çok daha fazlası var). Bu, Windows'ta 4.2.1 x64 sürümünü kullanıyordu. Ayrıca burada yazılanlar : "Bu [ ffmpeg] komutuyla bir mp4'ten png'leri çekersem, orijinal videoyla aynı kalitede yüksek kaliteli png'ler elde ederim." Dosyaların ffmpegçıktısını alan hangi sürümünü kullanıyorsunuz PNG8ve giriş biçiminiz nedir?
Jake

Aslında haklı olduğunuzu düşünüyorum, sorun identify image.pngaslında tek kanal 8-bit değil, R, G ve B için 8-bit iken "8-bit" sonucunu vermesiydi. IDK, ortalama bir identifykullanıcının nasıl anlaması gerektiğini bu tho.
lapin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.