FFmpeg; video, ses ve diğer çokluortam (multimedya) dosyalarını işlemek için ücretsiz ve açık kaynak kodlu çokluortam kütüphanesi ve uçbirim tabanlı bir araçtır. Birçok kodlayıcı ve kod çözücüyü bir araya getirerek neredeyse tüm yaygın ve yaygın olmayan çokluortam formatlarını destekler.
FFmpeg, özellikle uçbirim arayüzünde yeniyseniz, bir öğrenme eğrisi ile birlikte gelir. Çokluortam dosyalarının ve akışların kodunu dönüştürmek için klavyenizle komutlar yazmanız gerekecektir. Bu yazıda, medya formatlarını dönüştürmek, videoları kırpmak, ses/video akışlarını ayıklamak gibi çeşitli görevleri gerçekleştirmek için örneklerle en sık kullanılan FFmpeg komutlarını tanıtacağım.
Her şeyden önce, FFmpeg‘i kuralım.
FFmpeg kurulumu
Pardus’ta FFmpeg kurulumu epey kolay. Uçbirimi açın ve aşağıdaki komutu girin.
sudo apt update && sudo apt install ffmpeg
Kurulum başarıyla tamamlandıktan sonra FFmpeg’in gerçekten kurulup kurulmadığını test edelim.
Aşağıdaki komutu girerek FFmpeg’in kurulu olan sürümünü öğrenebilirsiniz.
ffmpeg -version
Aşağıdaki komutlarla FFmpeg’in mevcut tüm kodlayıcı ve kod çözücülerini (encoder ve decoder) listeleyebilirsiniz.
ffmpeg -encoders ffmpeg -decoders
Kurulum tamamlandığına göre, en sık kullanılan komutlara geçebiliriz.
FFmpeg ile video bilgilerini almak
FFmpeg kullanarak belirli bir medya dosyasının (örneğin input.mp4) bilgilerini kolayca alabilirsiniz. Normalde girdi dosyası ve çıktı dosyasının belirtilmesi gerekir ancak bu durumda, yalnızca bazı temel bilgileri alacağımız için çıktı dosyası atlanabilir.
ffmpeg -i input.mp4 -hide_banner
hide_banner
bayrağı, FFmpeg başlıklarını ve diğer ayrıntıları gizlemeye yardımcı olur ve yalnızca medya dosyası bilgilerini gösterir
Video veya ses dosyalarını önizlemek veya test etmek
FFmpeg framework’ü FFmpeg’in kendisinden, ffprobe’dan ve FFmpeg kütüphanesi tabanlı medya oynatıcı olan ffplay’den oluşur. Bir medya dosyasını onunla uğraşmadan önce veya sonra önizlemek veya test etmek isterseniz, aşağıdaki komutu gerçekleştirerek ffplay ile oynatabilirsiniz:
ffplay input.mp4
Püf noktası: Tam ekran moduna girmek için komuta -fs
ekleyin.
Video veya Ses Dosyalarını Başka Bir Biçime Dönüştürmek
FFmpeg, videonuzu veya ses dosyanızı başka bir biçime dönüştürmek için son derece kullanışlıdır. Hemen örnekler ile devam edelim.
FFmpeg ile MOV’dan MP4’e
MOV formatındaki video dosyanızı FFmpeg ile MP4’e dönüştürmek için aşağıdaki komutu çalıştırın.
ffmpeg -i input.mov output.mp4
FFmpeg ile WAW’dan MP3’e
Benzer şekilde, çıktı biçimini belirterek ses dosyalarını da FFmpeg ile dönüştürebilirsiniz. Örneğin, FFmpeg, aşağıdaki komutla WAV’ı MP3’e dönüştürecektir.
ffmpeg -i input.wav -vn -ar 44100 -ac 2 -b:a 192k output.mp3
FFmpeg ile videodan ses ayıklamak (Videoyu sese dönüştürmek)
FFmpeg, video dosyasını farklı bir formata dönüştürmenin yanı sıra video ve sesi ayırabilir. Aşağıdaki komut ile videodan ses ayıklama işlemini gerçekleştirebilirsiniz.
ffmpeg -i input.mp4 -vn output.mp3
Videodan sesi kaldırmak
Aşağıdaki komutu kullanarak videodaki ses akışını kaldırabilir ve yalnızca video kısmını tutabilirsiniz. Çıkış biçimini de (aşağıdaki örnekte MP4) desteklenen biçimler arasından seçebilirsiniz.
ffmpeg -i input.mp4 -an mute-output.mp4
Videonun belirli bir kısmını dönüştürmek
Tüm videonun biçimini dönüştürmeye ek olarak, FFmpeg, gerektiğinde videonun veya ses biçiminin belirli bir bölümünü dönüştürmenize de olanak tanır. Bu durumda zamanı belirtmek için -t
değerini kullanmanız gerekir. Örneğin, aşağıdaki komut input.mp4 dosyasının ilk 10 saniyesini MKV formatına dönüştürecektir. Zamanı hh.mm.ss biçiminde de belirtebileceğinizi unutmayın.
ffmpeg -i input.mp4 -t 10 output.mkv
FFmpeg ile video kırpmak
FFmpeg, video ve ses dosyalarını kırpma konusunda da kolayca yardımcı olabilir. Klibin başlangıç zamanını ayarlamak için -ss
değerini ve bitiş zamanını ayarlamak için -to
değerini kullanın. -c
değeri codec bileşenini ayarlamak içindir. Benzer şekilde, klibin süresini ayarlamak için yukarıdaki örnekte bulunan -t
değerini de kullanabilirsiniz.
ffmpeg -i input.mp4 -ss 00:01:54 -to 00:06:53 -c copy output.mp4
FFmpeg ile video görüntüsünü kırpmak
Çerçeveyi istediğiniz herhangi bir boyutta kırpmak için aşağıdaki komutu kullanın. Aşağıdaki örnekte -filter:v
, filtrenin video için olduğunu belirtir. crop
, ihtiyacınız olan filtrenin kırpma filtresi olduğunu belirtir. “w:h:x:y” sırasıyla çerçevenin genişliğini, yüksekliğini ve konumunu temsil eder.
ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4
Videoyu yeniden boyutlandırmak
Aşağıdaki komut, videoyu istenen bir boyuta yeniden boyutlandıracaktır. Aşağıdaki komutta bulunan -vf
, yukarıdaki örnekte bulunan -filter:v
için bir takma addır(alias).
ffmpeg -i input.mp4 -vf scale=1920:1080 output.mp4
Sesi ve videoyu birleştirmek
Eğer bir ses ve video dosyanız varsa aşağıdaki komutu kullanarak videonuzu sesle karıştırabilirsiniz. Kodlama formatlarıyla uyumlu konteyner formatı kullanmanız gerektiğini unutmayın.
ffmpeg -i audio.mp3 -i video.mp4 video_audio_mix.mkv
Videoları birleştirmek
Aynı codec bileşeniyle kodlanmış birden fazla video klibiniz varsa, bu videoları bir araya getirebilir veya birleştirebilirsiniz. Birleştirmek istediğiniz tüm kaynak dosyaların listesini içeren bir .txt dosyası oluşturun ve ardından aşağıdaki komutu çalıştırın.
ffmpeg -f concat -i file-list.txt -c copy output.mp4
Videoyu döndürmek
FFmpeg’i kullanarak bir videoyu saat yönünde ve saat yönünün tersine kolayca döndürebilir, bir videoyu dikey ve yatay olarak çevirebilirsiniz. Bu durumda kullandığımız özellik “transpose” dur. Aşağıdaki komut giriş videosunu saat yönünde 90 derece döndürecektir.
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
transpose
için mevcut parametreler 0, 1, 2 ve 3’tür.
- 0 – Saat yönünün tersine 90 derece döndürün ve dikey olarak çevirin (varsayılan değer).
- 1 – Saat yönünde 90 derece döndürün.
- 2 – Saat yönünün tersine 90 derece döndürün.
- 3 – Saat yönünde 90 derece döndürün ve dikey olarak çevirin.
Videoları saat yönünde 180 derece döndürmek için transpose
parametresini aşağıdaki gibi iki kez belirtmeniz gerekeceğini unutmayın.
ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" output.mp4
Videoyu hızlandırmak
FFmpeg, videonun oynatma hızının değiştirilmesine yardımcı olur. Bir videoyu ihtiyaçlarınıza göre hızlandırabilir veya yavaşlatabilirsiniz. Örneğin, aşağıdaki komut videonun hızını iki katına çıkaracaktır. Değeri ihtiyaçlarınıza göre belirleyebilirsiniz.
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4
Videoyu sıkıştırmak
Videoyu FFmpeg ile sıkıştırmak, dosya boyutunu küçültecek ve depolama alanından tasarruf sağlayacaktır. Video sıkıştırma işlemi için aşağıdaki komutu çalıştırın.
ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4
Videoyu yakınlaştırmak veya uzaklaştırmak
FFmpeg’de bulunan zoompan
filtresi ile verilen videoya zoom ve pan efekti uygulayabilirsiniz. Aşağıdaki komut, videoyu 1,5x’e kadar yakınlaştıracak ve her zaman resmin merkezinde kaydıracaktır.
zoompan=z='min(zoom+0.0015,1.5)':d=700:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
zoom
,z
– Yakınlaştırma ifadesini ayarlayın. Aralık 1-10’dur. Varsayılan 1’dir.d
– Süre ifadesini kare sayısı cinsinden ayarlayın. Varsayılan 90’dır.x
,y
– x ve y ifadesini ayarlayın. Varsayılan 0’dır.in_w
,iw
,in_h
,ih
– Girdi genişlik/yükseklik değeri.
Videoyu döngüye sokmak
FFmpeg ile bir videoyu döngüye almak için döngü filtresini kullanmanız gerekir. Örneğin, aşağıdaki komut MP4 giriş videosunu üç kez döngüye alacaktır. Döngü sayısının varsayılan değeri 0’dır, yani döngü yoktur. Sonsuz döngü için -1’i kullanın.
ffmpeg -stream_loop 2 -i input.mp4 -c copy output.mp4
Saniyedeki kare sayısını ayarlamak (FPS)
FFmpeg, FPS ve GOP dâhil olmak üzere bazı parametreleri değiştirmek için de kullanışlıdır. FPS’yi diğer parametreleri değiştirmeden farklı kullanımlar için değiştirebilirsiniz. Aşağıdaki komutu yazın ve çalıştırın; FFmpeg orijinal FPS’yi ayarladığınız değere değiştirecektir.
ffmpeg -i input.mp4 -vf "fps=30" output.mp4
Resimler grubunu ayarlamak (GOP)
GOP (Group of Pictures), iki ana kare arasındaki mesafe anlamına gelir. -g
değerini istediğiniz gibi ayarlayabilirsiniz. Bazı kodlayıcıların ileriye dönük algoritmaları için çok fazla ana kareyi zorlamanın çok zararlı olduğunu unutmayın.
ffmpeg -i input.mp4 -g 300 output.mp4
Meta verileri kopyalamak
Aşağıdaki FFmpeg komutuyla bir kaynak medya dosyasının meta verilerini de kopyalayabilirsiniz. Bazı videolar özel meta verileri sakladığından tüm meta verileri doğru şekilde kopyalamayabileceğini unutmayın.
ffmpeg -i input.mov -map_metadata 0 -movflags use_metadata_tags output.mp4
Videolara altyazı eklemek
FFmpeg, aşağıdaki komutla bir videoya ayrı bir altyazı dosyası ekleyebilir. Çıkış videosu için uyumlu bir konteyner biçimi seçmeye dikkat edin.
ffmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast video-output.mkv
Orijinal kodlamayı korumak
Bazen orijinal kodlamayı kopyalamak isteyebilirsiniz. Aşağıdaki komut, giriş videosunun yinelenen bir kopyasını oluşturacaktır. “-c copy
” parametresi, FFmpeg’in belirtilen akış için kod çözme ve kodlama adımını atlamasını sağlar, bu nedenle yalnızca çoklama ve ayrıştırma işlemlerini gerçekleştirir. Yalnızca konteyner biçimini değiştirmek veya konteyner düzeyindeki meta verileri değiştirmek için kullanışlıdır.
ffmpeg -i input.mp4 -c copy output.mkv
Hareketli GIF oluşturmak
Görüntü dosyalarını çevreleyen bazı FFmpeg özelliklerini tanıtacağım.
İlk önce, FFmpeg kullanarak bir videodan nasıl animasyonlu GIF oluşturulacağını görelim. Temel formül, aşağıda gösterildiği gibi basittir:
ffmpeg -i input.mp4 output.gif
Çıktı GIF görüntüsünü özelleştirmek için bazı parametreler de ekleyebilirsiniz:
ffmpeg -ss 00:00:20 -i input.mp4 -to 10 -r 10 -vf scale=200:-1 output.gif
-ss
: GIF’in başlangıç noktasını belirtir.-to
: GIF’in bitiş konumunu belirtir.-r
: kare hızı anlamına gelir.-vf scale
: GIF görüntüsünü istenen boyutta ölçeklendirmektir.
FFmpeg ile görüntüleri ölçeklendirmek
Daha önceki örneklerden birinde videonun yeniden boyutlandırılmasına benzer şekilde, görüntüleri yeniden boyutlandırmak için de FFmpeg’i kullanabilirsiniz. Aşağıdaki komut, görüntüyü 1920:1080 olarak yeniden boyutlandıracaktır. Bu değeri istediğiniz boyutlardan herhangi birine ayarlayabilirsiniz.
ffmpeg -i input.png -vf "scale=1920:1080" output.png
Görüntülerden videoya
FFmpeg, bir dizi görüntüyü bir videoya dönüştürebilir. Slayt gösterisi yapmak istediğinizde bu çok yararlıdır. Örneğin, aşağıdaki komut, img001.png, img002.png, vb. olarak adlandırılan bir dizi resim içeren bir slayt gösterisi oluşturacaktır. -r 1/5, her görüntünün 5 saniyelik bir süreye sahip olacağını belirtir.
ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4
Tek Bir Görüntüyü Videoya Dönüştürmek
Video, resim karelerinden oluştuğu için FFmpeg ile tek bir resmi video dosyasına dönüştürmek mümkündür. Videonun süresini belirtmek için -t parametresini kullanın. Ayrıca aşağıdaki komutta olduğu gibi başka parametreler de ekleyebilirsiniz.
ffmpeg -loop 1 -i input.png -c:v libx264 -t 30 -pix_fmt yuv420p video.mp4
Çerçeveleri ayıklamak
Tek bir görüntüyü veya bir dizi görüntüyü videoya dönüştürmek yerine, videodan kareler de çıkarabilirsiniz. Aşağıdaki komut, giriş videonuzdan her 1 saniyede 1 kare çıkaracak ve kesin görüntüler, 001.png, 002.png, vb. gibi 3 basamaklı olarak adlandırılacaktır. Dilerseniz -ss ve -t gibi diğer parametreleri de ekleyebilirsiniz.
ffmpeg -i input.mp4 -r 1 image-%03d.png
- -ss parametresi bir başlangıç noktası ekler. Videonun başından çıkarmak istiyorsanız bu komutu silin.
- -t, çerçevelerin çıkarılması için bir süre eklemek için kullanılır. Özel bir ihtiyaç yoksa bu silinebilir.
- -i giriş video dosyası yoludur.
- -r, nasıl çalışmasını istediğinizi yakalamak ve tersine çevirmek için kareleri belirtir.
- 1, bu komutun her saniyede 1 kare kaydedeceği anlamına gelir. Her 2 saniyede 1 kare kaydetmek istiyorsanız, 1’i 0,5 ile değiştirin. Sadece “1/saniye” formülünü kullanın ve ihtiyacınız olan oranı elde edin.
- -%03d; 001, 002 gibi 3 basamaklı resim adları üretecektir. 4 basamaklı resim adları almak istiyorsanız -%04d kullanın.
- .png, videodan çıkardığınız karelerin biçimini gösterir. Ayrıca jpeg, bmp formatlarını da kullanabilirsiniz.
Ses dosyalarının ses seviyesini değiştirmek
Aşağıdakiler, ses dosyaları için yaygın olarak kullanılan bazı FFmpeg komutlarıdır.
En sık kullanılanlardan biri, ses dosyasının ses seviyesini değiştirmektir. Bunun için “volume” filtresi seçeneğine ihtiyacınız olacak. Örneğin, aşağıdaki komut ses düzeyini yarı yarıya azaltacaktır. Tabii ki, değeri ihtiyaçlarınıza göre de ayarlayabilirsiniz.
ffmpeg -i input.mp3 -af 'volume=0.5' output.mp3
Ses dosyalarını sıkıştırmak
Tıpkı bir videoyu sıkıştırmak gibi, dosya boyutunu küçültmek için bir sesi de sıkıştırabilirsiniz. FFmpeg’in -ab
parametresi, hedef ses için bit hızını belirleyecek ve size bir miktar depolama alanı kazandıracaktır. Kullanılabilir ses bit hızları 96kbps, 112kbps, 128kbps, 160kbps, 192kbps, 256kbps ve 320kbps’dir. Sesi sıkıştırmak için kaynak dosyanın kullandığından daha küçük bir değer kullanmanız yeterlidir.
ffmpeg -i input.mp3 -ab 128 output.mp3
Ses oynatma hızını artırmak veya azaltmak
Benzer şekilde, sesin oynatma hızını hızlandırmak veya yavaşlatmak için de FFmpeg kullanabiliriz. Bu durumda, “atempo” ses filtresini kullanacağız. Ses için 0,5 ile 2,0 arasında herhangi bir değer kullanılabilir. Örneğin, aşağıdaki komut sesin hızını iki katına çıkaracaktır.
ffmpeg -i input.mp3 -filter:a "atempo=2.0" -vn output.mp3
Sese görüntü eklemek
Hiç YouTube’a bir MP3 ses yüklemeyi denediniz ve başarısız oldunuz mu? Cevabınız evet ise, FFmpeg ile sese bir görüntü eklemek bu duruma yardımcı olabilir. Aşağıdaki komut, sesinizi belirli bir görüntüye sahip bir MP4 videoya dönüştürecektir. Sesinizin kodlama biçimine göre başka bir uyumlu konteyner de seçebilirsiniz.
ffmpeg -loop 1 -i image.jpg -i input.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4
FFmpeg’ten yardım almak
ff* araçlarında (FFmpeg dahil) belirli bir öğe hakkında yardım almak için her zaman -h parametresini kullanarak yardım çıktılarını ekranınıza yazdırabilirsiniz.
ffmpeg -h
Yukarıdaki içerik, en yaygın olarak kullanılan FFmpeg parametrelerinden bazılarını FFmpeg’in örnekleriyle anlatıyor. Daha fazla bilgi ve kullanım örnekleri için her zaman resmi FFmpeg belgelerine başvurabilirsiniz.