16 Ocak 2022 Pazar

FFMPEG ile ekran kaydı yapma

FFmpeg nedir?

FFmpeg çok sayıda video/ses dosya formatını(mp4, mkv, ts, mov, webm, mp3...) destekleyen, video/ses dosyalarını açıp oynatabilen, farklı bir formata dönüştürebilen, video/ses aygıtlarının canlı kaydını yapabilen, çoğu ses/video kodeklerini(sıkıştırak kodlama ve çözme)(h264, h265, vp8, vp9, aac, opus, mp3...) destekleyen, çapraz platformlu(Windows, Linux, Mac...), açık kaynak kodlu ücretsiz bir yazılımdır. Birçok uygulama FFmpeg kütüphanelerini kullanır(VLC, Shotcut, Kdenlive, ShareX...)

FFmpeg indirme ve kurma

FFmpeg: https://github.com/BtbN/FFmpeg-Builds/releases Kullandığınız sisteme uygun dosyayı indirin.
FFmpeg kaynak kodu: https://github.com/FFmpeg/FFmpeg

Sisteminize uygun FFmpeg'i indirip zipli dosyayı C:\FFmpeg klasörüne açın.
C:\FFmpeg\bin klasöründe ffmpeg.exe, ffplay.exe ve ffprobe.exe olacak.
Bize gerekli olan ffmpeg.exe dosyası.

FFmpeg kullanma ve yardım

FFmpeg kullanımı çok basit. Windows+R ile çalıştır'ı açın CMD yazıp Entere basın.

Windows komut satırında

CD C:\FFmpeg\bin

ile klasöre geçiş yapın.

ffmpeg -h

ile kısa yardım metnini görebilirsiniz. FFmpeg kullanım şablonu:

ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

şeklindedir. Yani:

ffmpeg [seçenekler] [[girdi seçenekleri] -i girdi_dosyası]... {[çıktı seçenekleri] çıktı_dosyası}...

FFmpeg'in çok sayıda işlevi, seçenekleri ve buna bağlı parametreleri var. Ayrıntılı bilgi almak için https://trac.ffmpeg.org , https://ffmpeg.org/documentation.html ve http://ffmpeg.org/ffmpeg.html web sayfalarına veya bilgisayarınızdaki C:\FFmpeg\doc klasöründeki dosyalara başvurabilirsiniz.

FFmpeg ile ekran kaydı

En basit kullanımı:

ffmpeg -f gdigrab -i desktop output.mp4
Bir sorun çıkmazsa komut verildikten sonra ekran kaydı başlayacaktır.
Kaydı sonlandırmak için klavyeden Q tuşuna basın.

Girdi ve çıktı ile ilgili seçenekler girmedik ancak üstteki resimde de görüldüğü gibi varsayılan değerler ile ekran kaydı yapıldı.

Çıktı dosyası C:\FFmpeg\bin klasöründe output.mp4 olarak kaydedilir. Farklı bir klasöre adı dosya adı ve uzantısı ile kaydetmek isterseniz aşağıdaki şekilde verebilirsiniz. Çıktı dosya uzantısı olarak hangi uzantıyı verirseniz o uzantının dosya formatında kaydedilir. mov, avi, mp4, mpg, mkv ...

ffmpeg -f gdigrab -i desktop d:\MESUT\Video\ekrankaydi.mkv

Kaydettiğiniz video dosyası hakkında kısa bilgi almak isterseniz aşağıdaki satırı girin.

ffmpeg -i output.mp4

Dosyayı oynatmak için ffplay output.mp4 girilebilir.
Dosyayı oynattığınızda ses kaydının olmadığını göreceksiniz.

Ses kaydetme

Ekran görüntüsü ile beraber ses kaydı da yapmak için:

ffmpeg -f gdigrab -i desktop -f dshow -i audio="Mikrofon (Realtek High Definition Audio)" ekrankaydi.mp4

Bendeki ses aygıtı Mikrofon (Realtek High Definition Audio) olduğu için bu aygıt adı girildi.

Aygıt listesini alma

Sisteminizdeki aygıtları listelemek için:

ffmpeg -list_devices true -f dshow -i dummy

Yalnız ses kaydı

Sadece ses kaydı yapmak için:

ffmpeg -f dshow -i audio="Mikrofon (Realtek High Definition Audio)" seskaydi.mp3

Ses kodlayıcılar hakkında

Video kare sayısı

mp4 dosya için varsayılan kare sayısı 29.97 fps olarak belirlendi.

Farklı bir kare sayısı ile kaydetmek için -r parametresi kullanılır. Saniyede 30 kare kaydetmek için örnek:

ffmpeg -f gdigrab -i desktop -r 30 ekrankaydi.mp4

Kare sayısını belirlemek için fps filtresi de kullanılabilir.

Ekranın belli bir bölgesini kaydetme

Boyut ve bölge ayarlama:

Video boyutunu ayarlama için -video_size parametresi kullanılır.

ffmpeg -f gdigrab -video_size 1024x768 -i desktop ekrankaydi.mp4

Bölgenin soldan uzaklığı: -offset_x
Bölgenin üstten uzaklığı: -offset_y

Örnek: Ekranın x=100, y=200 noktasından, genişlik 1000, yükseklik 500 piksel boyutunda kaydetme

ffmpeg -f gdigrab -video_size 1000x500 -offset_x 100 -offset_y 200 -i desktop ekrankaydi.mp4

Ekranın 10,20 konumundan 640x480 piksellik, saniyede 30 kare ve bölge sınırlarına çerçeve:

ffmpeg -f gdigrab -framerate 30 -offset_x 10 -offset_y 20 -video_size 640x480 -show_region 1 -i desktop output.mkv

-show_region parametresi kaydedilen alanı çerçeve ile belirtmek içindir.
-framerate video kare sayısı içindir

Donanım kodlaması

Birçok platform, videoyla ilgili bir dizi görevi gerçekleştirmek için özel donanıma erişim sunar. Bu tür donanımların kullanılması, kod çözme, kodlama veya filtreleme gibi bazı işlemlerin daha hızlı tamamlanmasına veya diğer kaynakların (özellikle CPU) daha az kullanılmasına imkan sağlar, ancak farklı veya daha düşük sonuçlar verebilir veya yalnızca yazılım kullanıldığında mevcut olmayan ek kısıtlamalar getirebilir. PC benzeri platformlarda, video donanımı tipik olarak bir GPU'ya entegre edilir (AMD, Intel veya Nvidia)

Donanım kodlayıcıları tipik olarak x264 gibi iyi yazılım kodlayıcılarından önemli ölçüde daha düşük kalitede çıktı üretir, ancak genellikle daha hızlıdır ve fazla CPU kaynağı kullanmaz. (Yani, aynı algısal kalitede çıktı elde etmek için daha yüksek bir bit hızına ihtiyaç duyarlar veya aynı bit hızında daha düşük bir algısal kalitede çıktı üretirler.)

Değişken standardizasyon durumuna sahip birçok farklı API mevcuttur. FFmpeg, çeşitli desteklerle bunların çoğuna erişim sunar. Ayrıntılı bilgi için: HWAccelIntro

-hwaccel parametresi dahili hwaccel kod çözücüleri seçenek aracılığıyla etkinleştirilir . Yazılım kod çözücü normal olarak başlar, ancak donanımda kodu çözülebilen bir akış algılarsa, tüm önemli işlemleri bu donanıma devretmeye çalışır.

NVENC(Nvidia Encoder) ve NVDEC, Nvidia'nın donanım hızlandırmalı kodlama ve kod çözme API'leridir. Bendeki sistemde Nvidia GTX 1050 Ti ekran kartı bulunuyor. O yüzden buna uygun örnek vereceğim. Diğer donanımlar için HWAccelIntro sayfasına bakınız

NVENC; H.264 ve HEVC kodlaması için kullanılabilir. FFmpeg; h264_nvenc ve hevc_nvenc kodlayıcılar aracılığıyla NVENC'yi destekler.

H.264 için örnek;

ffmpeg -f gdigrab -i desktop -c:v h264_nvenc ekrankaydi.mp4

HEVC (H.265) için örnek:

ffmpeg -f gdigrab -i desktop -c:v hevc_nvenc ekrankaydi.mp4

Kodlayıcı seçeneklerini görmek için ffmpeg -h encoder=kodlayıcı_adı şablonunu kullanabilirsiniz.

Örnekler:

ffmpeg -h encoder=libx264
ffmpeg -h encoder=libx265
ffmpeg -h encoder=hevc_nvenc
ffmpeg -h encoder=h264_nvenc

Sıkıştırma değeri

Dosya boyutunun küçük olması için video/ses dosyaları bir miktar kayıp göze alınarak sıkıştırılır. Bu, resim dosyalarındaki sıkıştırmaya benzer. Örneğin JPG sıkıştırılmış resim dosya formatıdır.

Her video/ses kodek'inin kendine özgü sıkıştırma algoritması vardır. O yüzden performans ve kaliteleri farklıdır. Video sıkıştırmak için çeşitli seçenekler olsa da basit olarak CRF(Constant Rate Factor = Sabit Oran Faktörü) parametresi kullanılır.

CRF değeri 0-51 arasında olabilir. Daha düşük değerler, daha iyi kalite ancak buna karşılık daha büyük dosya boyutu demektir. 23 varsayılandır ve 51 olası en kötü kalitedir. Öznel olarak makul bir aralık 17-28'dir. 17 veya 18'in görsel olarak kayıpsız veya kayıpsıza çok yakın olduğu görülebilir ancak teknik olarak kayıpsız değildir. 0 kayıpsız anlamına gelir.

ffmpeg -f gdigrab -i desktop -crf 17 ekrankaydi.mp4

Sıkıştırma hızı

Dosya sıkıştırma programlarında dosya sıkıştırma yöntemini fark etmişsinizdir.

Örneğin; Winrar için ; depola, en hızlı, hızlı, normal, iyi, en iyi seçenekleri var. en iyi seçeneği diğerlerine göre en küçük dosya boyutunu oluşturacaktır ancak sıkıştırmak için daha çok işlem yaptığı için sıkıştırma süresi daha uzun olacaktır. Çok büyük dosyalarda ve zaman kısıtlı olduğu durumlarda tercih edilmez.
FFmpeg video/ses sıkıştırmada da winrar'dakine benzer sıkıştırma yöntemleri vardır.

Azalan hız sırasına göre mevcut ön ayarlar(preset):
ultrafast
superfast
veryfast
faster
fast
medium
slow
slower
veryslow
placebo

Bu ayarlar dosya boyutu ve zaman ile ters orantılıdır. Örneğin ultrafast; aynı video için çok hızlı bir sıkıştırma sağlarken diğerlerine göre daha büyük dosya boyutu oluşturur.

Donanımınız hızlı ise daha küçük dosya boyutu elde etmek için daha düşük ayar seçilebilir. Ekran kaydı ve canlı yayınlar için anlık kayıt veya yayın için yükleme yapıldığından dolayı ultrafast ayarının seçilmesinde fayda var.

ffmpeg -f gdigrab -i desktop -c:v libx264 -preset ultrafast -qp 0 ekrankaydi.mkv

Kayıpsız kayıt

Kodeklerin amacı kaliteden az bir ödün vererek büyük boyutlu video dosyalarını sıkıştırıp daha az boyutlu dosya boyutu oluşturmaktır. Çünkü büyük dosya boyutu bellek, yayın ve yükleme sorunlarına neden olur. Kodekler video/sesi kaydederken sıkıştırır ve oynatırken veya yayınlarken sıkışmış dosyayı açar. Winrar ile dosya sıkıştırma ve açma gibi.

Kodek (coder=kodlayıcı, decoder=kod çözücü) çeşidine göre sıkıştırma sırasında çeşitli algoritmalar kullanılır. Algoritmanın özelliğine ve sıkıştırma değerine göre orijinal video ve sesten hissedilmeyecek veya çok az hissedilecek kayıplar verilir.

Orijinal video/ses kalitesinden ödün vermeden de sıkıştırma imkanı vardır. Nasıl ki winrar ile dosya sıkıştırıp/açıldığında dosyalarda hiç bir kayıp olmuyor, kodekler ile de kayıpsız kayıt yapılabilir.

QP(Quantization Parameter = Niceleme parametresi)

En hızlı sıkıştırma için;

ffmpeg -f gdigrab -i desktop -c:v libx264 -preset ultrafast -qp 0 kayipsiz.mkv

En küçük dosya için;

ffmpeg -f gdigrab -i desktop -c:v libx264 -preset veryslow -qp 0 kayipsiz.mkv

Donanım hızlandırmalı kayıpsız kayıt

ffmpeg -f gdigrab -hwaccel auto -i desktop -c:v libx264 -preset ultrafast -qp 0 kayipsiz.mp4

Hiç yorum yok:

Yorum Gönder