Windows CLI ve FFmpeg kullanarak istenilen konumdaki videolardan ekran görüntüsü almak

Mert Aydın
Feb 14, 2017 · 3 min read
Image for post
Image for post

Bu yazımda biraz pratiklikten bahsedeceğim, yaptığım şey uygulama olarak internette var ve ücretsiz versiyonları da mevcut. Ne yaptığımı, neden yaptığımı kısaca anlatayım.

Elimde 100’e yakın video vardı ve bu videoların ilk 3, 4 ve 5. saniyelerinin ekran görüntüleri lazım oldu. İş yerinde kullandığım bilgisayar Windows olduğu için (Linux üzerinde de yapılabilirdi elbette) bir bat dosyası oluşturarak ve ffmpeg kullanarak bu ekran görüntüsü alma işlemini hallettim.

Videolar klasör klasör ve her klasör içerisinde 8–10 adet video bulunmakta bu işlem için 2 farklı şekilde ekran görüntüsü alan bat dosyası hazırladım. İlkinde her klasör içerisinde bat dosyası çalıştırarak var olan videoların ekran görüntülerini almaya başladı bundan sonra ikinci olarak da klasörlerin bulunduğu dizinde bir bat dosyası hazırladım ve çalıştırdım bu da bütün klasörleri dolaşarak videoları alıp video isminde ekran görüntülerini oluşturdu.

Öncelikle şunu belirtmek istiyorum ffmpeg için https://ffmpeg.org/download.html#build-windows bu adresten Windows package olarak ffmpeg indirip istediğiniz konumda saklayabilirsiniz. Ekran görüntüsü alma işlemlerini ffmpeg ile yapacağımız için bu ilk olarak ihtiyacımız olan şey.

Kodlardan ve komutlardan kısaca bahsetmek gerekirse;

Batch file içerisinde for döngüsünü basitçe aşağıdaki gibi kullanabiliriz;

for %%I in (klasör\yolu\*) do ( kodlar_buraya_gelecek )

şeklinde basitçe (klasör\yolu\*) verdiğimiz yol içerisinde var olan dosyalar için gerçekleştirmek isteyeceğiniz işlemleri for döngüsü parantezleri arasında gerçekleştirebilirsiniz.

Bu döngüde, %%I ile dosya için işlemleri gerçekleştirebileceğiniz değişken diyebiliriz. Bunun yanında dosyanın sadece adını almak, uzantısı ile birlikte adını almak ya da tam yol olarak dosya yolunu almak gibi işlemleri de bu değişken üzerinden gerçekleştirebileceğiz. Tabi belirttiğim farklı değerleri alabilmek için aşağıdaki listeyi referans alabiliriz.

%~I — “ işaretlerini kaldırır.%~fI — dosyanın bulunuduğu tam yolu verir%~dI — dosyanın bulunduğu sürücünün adını verir.%~pI — dosyanın klasör yolunu verir.%~nI — dosyanın sadece adını verir.%~xI — dosyanın uzantısını verir%~aI — dosyanın parametrelerini verir (gizli vs gibi, — a — — — — gibi)%~tI — dosyanın zaman bilgisini verir%~zI — dosyanın boyutunu verir

Bu parametreleri kullanarak klasör içerisinde bulunan bütün dosyalara ait isim, uzantı, oluşturulma tarihi, boyut vs gibi datalara erişebilir ve işlemler yapabiliriz.

Gelelim şimdi klasör içerisinde bulunan videolar için ekran görüntülerini alan batch dosyasına

mkdir screenshotsfor %%f in (*.mp4) do (C:/ffmpeg/bin/ffmpeg.exe -i %%~ff -ss 00:4 -vframes 1 screenshots/%%~nf_saniye_4_%TIME:~3,2%_%TIME:~6,2%.pngC:/ffmpeg/bin/ffmpeg.exe -i %%~ff -ss 00:5 -vframes 1 screenshots/%%~nf_saniye_5_%TIME:~3,2%_%TIME:~6,2%.pngC:/ffmpeg/bin/ffmpeg.exe -i %%~ff -ss 00:6 -vframes 1 screenshots/%%~nf_saniye_6_%TIME:~3,2%_%TIME:~6,2%.png)pause

Bu komutlar ile batch dosyasının çalıştığı klasör için %%~nf ile dosyanın adını alıp mkdir ile oluşturulan screenshots klasörünün içine videonun adıyla bir ekran görüntüsü attık. Ffmpeg konumu C:/ffmpeg/bin/ffmpeg.exe kullandım ve komut olarak

C:/ffmpeg/bin/ffmpeg.exe -i %%~ff -ss 00:4 -vframes 1 screenshots/%%~nf_saniye_4_%TIME:~3,2%_%TIME:~6,2%.png

-i ile input olarak %%~ff ile dosyanın tam yolunu verdikten sonra -ss ile kaçıncı saniyenin ekran görüntüsü alınacağını belirttim ve bu saniyenin 1. Frame’ini al diyerek ekran görüntüsünü almış olduk.

İkinci işlem olarak bahsettiğim ise bütün klasörleri dolaşarak videoların ekran görüntülerini almak oldu, bu işlemi de aşağıdaki kod halletti.

mkdir screenshotsfor /R %%f in (*.*) do (C:/ffmpeg/bin/ffmpeg.exe -i %%~ff -ss 00:4 -vframes 1 screenshots/%%~nf_saniye_4_%TIME:~3,2%_%TIME:~6,2%.pngC:/ffmpeg/bin/ffmpeg.exe -i %%~ff -ss 00:5 -vframes 1 screenshots/%%~nf_saniye_5_%TIME:~3,2%_%TIME:~6,2%.pngC:/ffmpeg/bin/ffmpeg.exe -i %%~ff -ss 00:6 -vframes 1 screenshots/%%~nf_saniye_6_%TIME:~3,2%_%TIME:~6,2%.png)pause

Yukardaki kodun öncekinden 2 farkı var. Bunlardan birisi for’daki /R parametresi klasörleri rekürsif olarak gezmesi için ve diğeri (*.*) bütün dosyaları taraması için. Burada dosya uzantısı kontrolü de yapılabilir eğer başka uzantılı dosyalar varsa.

Son olarak yukardaki paylaştığım komut satırlarından çok da farklı bi şey yapmayan ama yine for ile videoların ilk 10 saniyesini kendi isminde klasörlerde saklayan batch dosyasını paylaşıyorum.

for %%f in (*.mp4) do (mkdir %%~nffor /l %%x in (1, 1, 10) do (C:/ffmpeg/bin/ffmpeg.exe -i %%~nf.mp4 -ss 00:%%x -vframes 1 %%~nf/%%~nf_saniye_%%x.png))pause

Çok basit ama iş görüyor :)

Medium Türkçe

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store