Terminalin Görsel Gücü: FFmpeg ile Profesyonel Video İşleme

FFmpeg, multimedya dünyasının "İsviçre Çakısı" gibidir. Grafik arayüzü olmamasına rağmen, birkaç satır kodla devasa video düzenleme yazılımlarının saatlerce uğraştığı işleri saniyeler içinde halledebilirsiniz.


🛠️ Temel Kavramlar ve Kurulum

FFmpeg'in gücünü kullanmadan önce, sisteminizde yüklü olup olmadığını kontrol etmek için terminale şu komutu yazın:

Bash:
ffmpeg -version

Eğer yüklü değilse, Linux için sudo apt install ffmpeg, macOS için brew install ffmpeg yükleyerek başlayabilirsiniz.


🚀 En Çok Kullanılan "Hayat Kurtarıcı" Komutlar

1. Format Dönüştürme (Hızlı ve Verimli)

Bir videoyu kalitesini bozmadan farklı bir formata dönüştürmek en temel ihtiyaçtır.

Bash:
ffmpeg -i input.mp4 output.mkv

2. Videodan Sesi Ayıklamak

Sadece sesi almak istiyorsanız, görüntü kanalını (-vn) devre dışı bırakmanız yeterlidir:

Bash:
ffmpeg -i video.mp4 -vn -ab 192k audio.mp3
  • -vn: Video yok.

  • -ab: Ses bitrate değeri (192kbps).

3. Videoyu Yeniden Boyutlandırmak (Scaling)

4K bir videoyu hızlıca 720p (HD) formatına çekmek için:

Bash:
ffmpeg -i input.mp4 -vf scale=1280:720 output_720p.mp4

İpucu: Oranı korumak için genişliği yazıp yüksekliğe -1 verebilirsiniz: scale=720:-1.

4. Videoyu Kesmek ve Kırpmak

Videonun sadece belirli bir kısmını almak için saat:dakika:saniye formatını kullanırız:

Bash:
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:20 -c copy output_cut.mp4
  • -ss: Başlangıç zamanı.

  • -to: Bitiş zamanı.

  • -c copy: Yeniden kodlama yapmadan (inanılmaz hızlı) kopyalar.


🪄 İleri Seviye Sihirbazlıklar

Videodan Yüksek Kaliteli GIF Yapma

Sıradan bir dönüştürme işlemi GIF'lerin renklerini bozar. Bu komut en iyi paleti oluşturur:

Bash:
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos" output.gif

Sesi Geciktirme veya Öne Çekme

Ses ve görüntü senkronizasyonu bozuksa, sesi 2 saniye kaydırmak için:

Bash:
ffmpeg -i input.mp4 -itsoffset 2.0 -i input.mp4 -map 0:v -map 1:a -c copy output.mp4

İki Videoyu Birleştirme (Concatenate)

Aynı özelliklere sahip iki videoyu birleştirmek için önce bir .txt dosyası oluşturun (list.txt):

file 'video1.mp4'

file 'video2.mp4'

Ardından şu komutu çalıştırın:

Bash:
ffmpeg -f concat -safe 0 -i list.txt -c copy final_video.mp4

💡 Bilmeniz Gereken Önemli Parametreler

KomutAçıklama
-iGirdi (Input) dosyasını belirtir.
-rKare hızını (FPS) ayarlar.
-anSesi tamamen devre dışı bırakır (Sessiz video).
-crfSabit Oran Faktörü (0-51 arası). 23 varsayılandır, 18 "gözle görülür kayıpsız" demektir.

FFmpeg dünyası uçsuz bucaksız bir deryadır. Terminalde bu komutları kullanmaya alıştığınızda, ağır video edit programlarını açma ihtiyacınızın azaldığını fark edeceksiniz.

FFmpeg dünyasının derinliklerine inmeye hazır mısınız? İlk bölümde temel ve orta seviye komutları incelemiştik. Şimdi, iş akışınızı bir üst seviyeye taşıyacak, otomasyon ve profesyonel düzenleme odaklı "ileri seviye" yeteneklere göz atalım.


🎭 Filtreler ve Görsel Sihirbazlık

FFmpeg'in en güçlü yanı Filtergraph (filtre grafiği) yapısıdır. Bu yapı, videoyu bir fabrikadaki montaj hattı gibi işlemenizi sağlar.

1. Videoya Logo (Watermark) Ekleme

Videonun sağ alt köşesine şeffaf bir PNG logosu eklemek için:

Bash:
ffmpeg -i video.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" output_branded.mp4
  • W-w-10: Videonun genişliğinden logonun genişliğini ve 10 piksellik boşluğu çıkar (Sağ kenar).

  • H-h-10: Videonun yüksekliğinden logonun yüksekliğini ve 10 piksellik boşluğu çıkar (Alt kenar).

2. Belirli Bir Bölgeyi Bulanıklaştırma (Blur)

Videodaki hassas bir bölgeyi (örneğin bir plaka veya yüz) gizlemek için:

Bash
ffmpeg -i input.mp4 -vf "delogo=x=100:y=200:w=150:h=100:show=0" output_blurred.mp4
  • x, y: Koordinatlar.

  • w, h: Bulanıklaştırılacak alanın genişlik ve yüksekliği.


⚡ Donanım Hızlandırma (Hardware Acceleration)

Eğer NVIDIA veya Intel bir grafik kartınız varsa, işlemciyi (CPU) yormadan çok daha hızlı render alabilirsiniz.

NVIDIA (NVENC) Kullanımı

Bash:
ffmpeg -i input.mp4 -c:v h264_nvenc -preset slow output.mp4
  • Normalde kullanılan libx264 yerine h264_nvenc kullanmak, render süresini bazen 5-10 kat hızlandırabilir.


📸 Ekran Kaydı ve Yayıncılık

FFmpeg sadece dosya dönüştürmez, canlı veri akışını da yönetir.

Masaüstü Ekranını Kaydetme (Linux için)

Bash:
ffmpeg -f x11grab -framerate 30 -video_size 1920x1080 -i :0.0 output.mp4
  • Windows için x11grab yerine -f gdigrab kullanmalısınız.

Videodan Thumbnail (Küçük Resim) Alma

Videonun tam 5. saniyesinden yüksek kaliteli bir kare yakalamak için:

Bash:
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 output.jpg

📊 Teknik Detaylar ve FFprobe

Bazen bir dosyanın içine bakmanız gerekir. FFprobe, FFmpeg ile birlikte gelen muhteşem bir analiz aracıdır.

Dosya Bilgilerini JSON Olarak Alma

Bash:
ffprobe -v quiet -print_format json -show_format -show_streams video.mp4

Bu komut, videonun çözünürlüğü, codec bileşenleri, bit hızı ve süresi gibi tüm teknik detayları yazılımların okuyabileceği temiz bir formatta sunar.


🛠️ Pratik Bir İpucu: Toplu İşlem (Batch Processing)

Klasördeki tüm .mov dosyalarını .mp4 yapmak için terminalde şu basit döngüyü kullanabilirsiniz (Linux/macOS):

Bash:
for i in *.mov; do ffmpeg -i "$i" "${i%.mov}.mp4"; done

🚀 Özet Tablo: İleri Parametreler

ParametreNe İşe Yarar?
-filter_complexBirden fazla girdi veya karmaşık filtre zincirleri için kullanılır.
-mapHangi ses/video kanalının çıktıya gideceğini seçer (Örn: Çok dilli videolar).
-shortestSes veya video bittiğinde kodlamayı durdurur (Müzik eklerken faydalı).
-aspectGörüntü oranını (16:9, 4:3 vb.) zorla değiştirir.

FFmpeg'in "kara büyü" olarak adlandırılan, genellikle profesyonel yayıncıların ve video mühendislerinin kullandığı daha spesifik ve güçlü özelliklerine göz atalım.


🔊 Ses Mühendisliği ve Manipülasyon

Sadece görüntü değil, ses üzerinde de inanılmaz bir hakimiyet kurabilirsiniz.

1. Ses Normalizasyonu (Loudnorm)

Eğer elinizdeki videonun sesi çok kısık veya dengesizse, EBU R128 standartlarında profesyonel bir ses normalizasyonu uygulayabilirsiniz:

Bash:
ffmpeg -i input.mp4 -af loudnorm=I=-16:TP=-1.5:LRA=11 output.mp4
  • I=-16: Hedeflenen entegre ses şiddeti (LUFS).

  • TP=-1.5: Maksimum tepe noktası.

2. Videodan Belirli Bir Ses Kanalını Seçme

Çok dilli bir videonuz (örneğin hem İngilizce hem Türkçe ses barındıran bir MKV) varsa ve sadece Türkçe olanı (genelde 2. kanaldır) almak istiyorsanız:

Bash:
ffmpeg -i input.mkv -map 0:v:0 -map 0:a:1 -c copy output.mp4
  • -map 0:v:0: İlk video akışını al.

  • -map 0:a:1: İkinci ses akışını (index 1) al.


⏳ Zaman ve Hız Kontrolü

3. Videoyu Ters Çevirme (Reverse)

Kısa klipler için eğlenceli bir efekt. Not: Bu işlem videoyu RAM'e yüklediği için çok uzun videolarda dikkatli olun.

Bash
ffmpeg -i input.mp4 -vf reverse -af areverse output.mp4

4. Slow Motion (Ağır Çekim) ve Hızlandırma

Videoyu 2 kat hızlandırmak için (ses dahil):

Bash
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -filter:a "atempo=2.0" output.mp4
  • setpts=0.5*PTS: Görüntü karelerini yarı sürede göster (hızlandır).

  • atempo=2.0: Sesi 2 kat hızlandır.


📽️ Karmaşık Görsel Düzenler

5. Videoları Yan Yana Koyma (Comparison)

İki videoyu (örneğin bir düzenleme öncesi ve sonrası) yan yana tek karede birleştirmek için:

Bash:
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex hstack output.mp4
  • Dikey birleştirme için vstack kullanabilirsiniz.

6. Video İçinde Video (Picture-in-Picture)

Bir videoyu diğerinin üzerine küçük bir kutu olarak eklemek için:

Bash:
ffmpeg -i ana_video.mp4 -i kucuk_video.mp4 -filter_complex "overlay=x=20:y=20" output.mp4

📝 Metadeta ve Altyazı Yönetimi

7. Altyazıyı Videoya Gömme (Hardsub)

Altyazı dosyasını (.srt) videonun üzerine kalıcı olarak yazmak (mobil cihazlar için idealdir):

Bash:
ffmpeg -i input.mp4 -vf "subtitles=altyazi.srt" output.mp4

8. Metadata (Künye) Bilgilerini Düzenleme

Videonun "Başlık", "Yıl" veya "Sanatçı" gibi bilgilerini değiştirmek için:

Bash:
ffmpeg -i input.mp4 -metadata title="Harika Bir Film" -metadata artist="Senin Adın" -c copy output.mp4

🗜️ İleri Seviye Sıkıştırma: 2-Pass Encoding

Dosya boyutunu hedeflenen bir megabaytta (örneğin tam 50MB) tutarken en yüksek kaliteyi almak istiyorsanız 2 geçişli kodlama yapılır:

1. Geçiş: (Analiz yapar, çıktı dosyası oluşturmaz)

Bash:
ffmpeg -y -i input.mp4 -c:v libx264 -b:v 1000k -pass 1 -an -f null /dev/null

2. Geçiş: (Analiz verilerini kullanarak videoyu oluşturur)

Bash:
ffmpeg -i input.mp4 -c:v libx264 -b:v 1000k -pass 2 -c:a aac -b:a 128k output.mp4

🛠️ Gizli Mücevher: -frames:v 1

Videonun sadece ilk karesini veya belirli bir andaki karesini yüksek çözünürlüklü bir fotoğraf olarak kaydetmek için kullanılır:

Bash:
ffmpeg -i input.mp4 -ss 00:00:15 -frames:v 1 kapak_resmi.png

Özet: Neden FFmpeg?

ÖzellikGeleneksel Yazılımlar (Premiere/Resolve)FFmpeg
HızArayüz yüklemesi ve render uzun sürer.Komut verildiği an başlar, çok hızlıdır.
OtomasyonTek tek elle yapılması gerekir.Script yazılarak 1000 dosya aynı anda işlenebilir.
Kaynak TüketimiÇok yüksek RAM ve GPU ister.Minimum kaynakla sunucularda bile çalışır.

FFmpeg'in "derin sularına" hoş geldiniz. Bu aşamada, sadece dosya dönüştürmenin ötesine geçip, videonun dokusuna müdahale eden ve profesyonel yayın standartlarını belirleyen teknik parametrelere bakacağız.


🏗️ Profesyonel Yayın ve Dağıtım Parametreleri

1. Web Optimizasyonu: -movflags +faststart

Bir videoyu web sitesine yüklediğinizde, videonun tamamı inmeden oynamaya başlaması için "moov atom" bilgisinin dosyanın başına taşınması gerekir.

Bash:
ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4

Neden Önemli? Bu parametre olmazsa, tarayıcı videonun sonundaki meta veriyi okuyana kadar kullanıcıyı bekletir.

2. Segmentlere Ayırma (HLS - HTTP Live Streaming)

Videoyu internet üzerinden (Netflix tarzı) parça parça sunmak için .m3u8 playlist dosyası ve .ts parçaları oluşturmak:

Bash:
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f hls -hls_time 10 -hls_list_size 0 output.m3u8
  • -hls_time 10: Her video parçasını 10 saniye yapar.

  • -hls_list_size 0: Tüm parçaları listede tutar.


🎨 İleri Filtreleme ve Görsel Denetim

3. Dinamik Metin Ekleme (Drawtext)

Videonun üzerine gerçek zamanlı saat, kare sayısı veya herhangi bir yazı yazdırmak:

Bash:
ffmpeg -i input.mp4 -vf "drawtext=text='Kamera 01':x=10:y=10:fontsize=24:fontcolor=white:shadowcolor=black:shadowx=2:shadowy=2" output.mp4

Sihirli Parametre: Eğer videonun üzerine zaman kodu (timecode) eklemek isterseniz:

drawtext="text='%{pts\:hms}':x=w-100:y=h-50:fontcolor=white"

4. Yeşil Ekran (Chroma Key) Kaldırma

Arka planı yeşil olan bir videoyu şeffaf hale getirip başka bir arka planla birleştirmek:

Bash:
ffmpeg -i on_plan.mp4 -i arka_plan.mp4 -filter_complex "[0:v]colorkey=0x00FF00:0.3:0.2[ckout];[1:v][ckout]overlay" output.mp4
  • 0x00FF00: Hedeflenen yeşil renk kodu.

  • 0.3: Benzerlik payı.


⚙️ Teknik Uyumluluk ve Renk Uzayı

5. Piksel Formatı Zorlama (-pix_fmt)

Bazı eski cihazlar veya QuickTime, her MP4 dosyasını açamaz. En uyumlu format yuv420p formatıdır:

Bash
ffmpeg -i input.mp4 -c:v libx264 -pix_fmt yuv420p output.mp4

6. Video ve Sesin Senkronizasyonunu Sağlamak

Eğer ses ve görüntü arasında kayma varsa, FFmpeg'e ses karelerini görüntüye göre yeniden hizalamasını söyleyebilirsiniz:

Bash:
ffmpeg -i input.mp4 -af "aresample=async=1" output.mp4

🧪 Analiz ve Test Parametreleri

7. Video Kalitesini Ölçme (SSIM / PSNR)

Bir sıkıştırma işleminin orijinal videoya göre ne kadar kalite kaybı yaşattığını matematiksel olarak görmek için:

Bash:
ffmpeg -i orijinal.mp4 -i sikistirilmis.mp4 -filter_complex ssim -f null -

8. Boş (Test) Video Üretme

Kendi test videonuzu oluşturmak için (Örn: 5 saniyelik, 1080p, 25fps renkli bar):

Bash:
ffmpeg -f lavfi -i testsrc=duration=5:size=1920x1080:rate=25 output.mp4

🛠️ Hayat Kolaylaştıran Diğer Parametreler

ParametreFonksiyonu
-tSüre belirtir (Örn: -t 30 sadece ilk 30 saniyeyi işler).
-toBitiş zamanını belirtir (Örn: -to 00:05:00).
-volSes seviyesini değiştirir (Örn: -vol 512 sesi iki katına çıkarır).
-an / -vnSesi kaldır (-an) / Videoyu kaldır (-vn).
-threadsİşlemci çekirdek kullanımını ayarlar (Örn: -threads 4).
-yÇıktı dosyası varsa sormadan üzerine yazar.

💡 "Süper Komut" Örneği

Aşağıdaki komut; videoyu NVIDIA kartıyla hızlandırır, 1080p'ye ölçekler, logo ekler, sesini normalize eder ve web için faststart yapar:

Bash:
ffmpeg -hwaccel nvdec -i video.mp4 -i logo.png \
-filter_complex "[0:v]scale=1920:1080[v];[v][1:v]overlay=10:10" \
-c:v h264_nvenc -preset slow -c:a aac -af loudnorm \
-movflags +faststart output_final.mp4

FFmpeg’in artık "mühendislik" seviyesindeki özelliklerine, yani bir videonun piksellerinden veri akış mimarisine kadar uzanan derin yeteneklerine dalıyoruz. İşte daha spesifik ve teknik özellikler:


🏗️ Multimedya Mimarisi ve Akış Kontrolü

1. Video Mozaik (Thumbnail Sheet) Oluşturma

Bir videonun genel içeriğini tek bir resimde (örneğin 4x4 bir ızgara şeklinde) görmek için:

Bash:
ffmpeg -i input.mp4 -vf "select=not(mod(n\,100)),scale=320:180,tile=4x4" -frames:v 1 output.png
  • select=not(mod(n\,100)): Her 100 kareden birini seçer.

  • tile=4x4: Seçilen kareleri 4 sütun ve 4 satır halinde birleştirir.

2. Gelişmiş Stream Eşleme (-map)

Bir dosyanın içinde 5 farklı dil ve 3 farklı altyazı varsa, tam olarak neyi dışarı aktaracağınızı kontrol edebilirsiniz:

Bash:
ffmpeg -i input.mkv -map 0:v:0 -map 0:a:2 -map 0:s:0 -c copy output.mp4
  • 0:v:0: Birinci girişin, birinci video akışı.

  • 0:a:2: Birinci girişin, üçüncü ses akışı (index 0'dan başlar).

  • 0:s:0: Birinci girişin, birinci altyazı akışı.


🔊 Profesyonel Ses İşleme

3. Ses Sıkıştırıcı (Compressor) ve Equalizer

Sesin çok yüksek kısımlarını baskılayıp düşük kısımlarını yükseltmek (Dinamik aralığı daraltmak) için:

Bash:
ffmpeg -i input.mp3 -af "acompressor=threshold=-21dB:ratio=4:attack=5:release=50" output.mp3

Belirli bir frekansı (örneğin 1000Hz) 10 desibel düşürmek için:

Bash
ffmpeg -i input.mp3 -af "equalizer=f=1000:width_type=h:width=200:g=-10" output.mp3

🌐 Canlı Yayın ve Ağ Protokolleri

4. RTMP ile Canlı Yayın Gönderme

YouTube veya Twitch gibi platformlara doğrudan terminalden yayın yapmak için:

Bash:
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 128k -f flv rtmp://live.twitch.tv/app/YAYIN_ANAHTARI
  • -re: Videoyu gerçek zamanlı hızda okur (yayın için kritiktir).

  • -g 50: Keyframe aralığını (GOP) ayarlar.

5. UDP Üzerinden Yerel Ağ Yayını

Aynı ağdaki başka bir bilgisayara (VLC ile izlenebilir) veri basmak:

Bash:
ffmpeg -i input.mp4 -f mpegts udp://192.168.1.50:1234

🎨 Görüntü İyileştirme ve Restorasyon

6. Parazit Giderme (Denoising)

Grenli veya karlı görüntüleri temizlemek için hqdn3d filtresi kullanılır:

Bash:
ffmpeg -i input.mp4 -vf "hqdn3d=1.5:1.5:6:6" output.mp4

7. HDR'dan SDR'a Dönüştürme (Tone Mapping)

HDR videoların renklerinin SDR ekranlarda soluk görünmesini engellemek için:

Bash:
ffmpeg -i hdr_input.mp4 -vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=reinhard:desat=0,zscale=t=bt709:m=bt709:r=tv,format=yuv420p" output_sdr.mp4

🕵️ Bitstream Filtreleri (BSF)

Dosyayı yeniden kodlamadan, sadece veri paketlerinin başlıklarını (header) değiştirmek için kullanılır. Örneğin, bir MP4 dosyasındaki H.264 verisinden "aud" (Access Unit Delimiter) eklemek/çıkarmak:

Bash:
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb output.ts

🚀 Parametre Referans Kartı

ParametreAçıklama
-reGirişi gerçek zamanlı (real-time) hızda okur.
-stream_loop -1Giriş dosyasını sonsuz döngüye sokar (Canlı yayın testleri için).
-discardBelirli kareleri (örneğin sadece B-frame'leri) atmayı sağlar.
-copytsOrijinal zaman damgalarını (timestamps) korur.
-f null -Çıktı dosyası oluşturmadan komutu çalıştırır (Hata ayıklama ve hız testi için).

FFmpeg ile artık sadece video düzenlemiyor, adeta bir multimedya sunucusu yönetiyorsunuz.

https://gonullu.pardus.org.tr/muhtesem-ffmpeg-komutlari/

Yorumlar

Bu blogdaki popüler yayınlar

Android Telefon/Tablet Ekranını Pardus ETAP 23 Yüklü Akıllı Tahtaya Yansıtma

Pardus Etap 23’de Unutulmuş Etap Yetkili Parolasını Sıfırlama

Pardus Etap 23 Yazıcı Kurulumu