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.