FFmpeg, ses ve görüntü kayıtlarını dönüştürme, sıkıştırma ve yayın işlemlerini sadece komutlarla gerçekleştirmeyi sağlayan muhteşem bir araç.

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.