Belirli bir zamanda ffmpeg ile bir video için 1 ekran görüntüsü nasıl çıkarılır?


109

Bir videodan ffmpeg kullanarak birden fazla ekran görüntüsünün nasıl çıkarılacağını gösteren birçok öğretici ve malzeme vardır. -R ayarını yaparsınız ve hatta belirli bir miktarı başlatabilirsiniz.

Ancak 01:23:45 inç için 1 ekran görüntüsü veya% 86 inç boyutunda 1 ekran görüntüsü istiyorum.

Bunların hepsi ffmpegthumbnailer ile mümkündür, ancak bu, güvenmek istemediğim başka bir bağımlılıktır. Bunu ffmpeg ile yapabilmek istiyorum.

Yanıtlar:


208

Şu -ssseçeneği kullanın :

ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg
  • JPEG çıktı için -q:vçıktı kalitesini kontrol etmek için kullanın . Tam aralık, daha düşük bir değerin daha yüksek bir kalite ile sonuçlandığı 1-31 arasında doğrusal bir ölçektir. 2-5 denemek için iyi bir aralıktır.

  • Seçme filtre vb seçme, sadece belirli bir çerçeve tipleri, ya da 100 başına 1 gibi daha karmaşık ihtiyaçları için alternatif bir yöntem sağlar

  • Girişten -ssönce yerleştirme daha hızlı olacaktır. FFmpeg Wiki: Seeking'e ve ffmpegcli aracı belgelerinden bu alıntıya bakın :

-ss konum (giriş / çıkış)

Giriş seçeneği olarak kullanıldığında (önce -i ), bu girdi dosyasında konumlandırmayı arar. Çoğu formatta tam olarak aramanın mümkün olmadığına dikkat edin, bu nedenle ffmpegkonumdan önce en yakın arama noktasına bakacaktır. Kod dönüştürme ve -accurate_seeketkinleştirildiğinde (varsayılan), arama noktası ve konum arasındaki bu ekstra bölümün kodu çözülecek ve atılacaktır. Akış kopyası yapılırken veya -noaccurate_seekkullanıldığında, korunacaktır.

Bir çıktı seçeneği olarak kullanıldığında (bir çıktı dosya adından önce), kod çözer ancak zaman damgaları konuma ulaşana kadar girdiyi atar.

pozisyon, saniye cinsinden veya hh:mm:ss[.xxx]formda olabilir.


2
Bu ÇOK daha hızlı. Çok teşekkür ederim. Önce -ss koymak büyük bir fark yaratır.
Peter Bengtsson

Belirtilen süreden sonra n'inci kareyi almanın bir yolu var mı?
dorien

@GuntherPiez Olası eserler hakkında hiçbir yerde söz görmüyorum.
Stefan Reich

2
Bunun vframes(en azından) sürüm 4.2.2'de eski olduğunu unutmayın . Manuel olarak "[ vframes], ' -frames:v' için eski bir takma addır ve bunun yerine kullanmanız gerekir."
Synexis

Mükemmel ve hızlı çalışır.
Smeterlink

37

FFMpeg bunu, verilen zaman damgasını arayarak ve bir görüntü olarak tam olarak bir kare çıkararak yapabilir, örneğin bakınız:

ffmpeg -i input_file.mp4 -ss 01:23:45 -vframes 1 output.jpg

Seçenekleri açıklayalım:

-i input file           the path to the input file
-ss 01:23:45            seek the position to the specified timestamp
-vframes 1              only handle one video frame
output.jpg              output filename, should have a well-known extension

-ssParametre şeklinde bir değer kabul HH:MM:SS[.xxx]veya saniyede bir sayı olarak. Yüzdeye ihtiyacınız varsa, video süresini önceden hesaplamanız gerekir.


Beklendiği gibi çalışıyor gibi görünüyor. Şu anda bu ffmpegthumbnailer ile aynı hızda ise kıyaslama yapıyorum.
Peter Bengtsson


7
boru hattının kod çözme kısmını atlayacağı için -i'den önce -ss seçeneğini kullanmayı deneyin. Bu, süreci hızlandırabilir.
SirDarius

1
Akışa dosya yerine PNG olarak çıktı vermenin bir yolu var mı?
Nicke Manarin

1
@NickeManarin Evet .. ffmpeg -ss 01:23:45 -i video.mp4 -c:v png -frames:v 1 image.jpg. Başkalarının da önerdiği gibi, komut satırında girdi dosyasından önce-ss "arama" seçeneğini de koyduğuma dikkat edin .
Glenn Slayden
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.