4 puan yazan GN⁺ 2026-03-23 | 1 yorum | WhatsApp'ta paylaş
  • Ses ve videoyu kodlayıp çözebilen, transcode edebilen ve yayınlayabilen FFmpeg framework’ünün yapısı ve kullanımını ele alıyor
  • ffmpeg, ffplay, ffprobe gibi komut satırı araçlarının ve libavcodec, libavformat, libavfilter gibi çekirdek kütüphanelerin rollerini ayrıntılı biçimde açıklıyor
  • AVFormatContext, AVCodecContext, AVPacket, AVFrame etrafında akış analizi ve decoding sürecini adım adım uyguluyor
  • meson/ninja build sistemi ile örnek kodları otomatik indirip derliyor, örnek medya dosyalarını analiz ederek sonuçları yazdırıyor
  • FFmpeg’in iç çalışma mantığını ve decoding pipeline’ını anlamaya yönelik uygulamalı bir giriş kaynağı olarak kullanılabilir

FFmpeg paket yapısı

  • FFmpeg, çeşitli ses ve video formatlarını kodlayıp çözebilen, transcode edebilen ve ağ üzerinden yayınlayabilen araçlar ve kütüphaneler koleksiyonundan oluşur
  • FFmpeg araçları

    • ffmpeg: Komut satırı tabanlı multimedya format dönüştürme aracı
    • ffplay: SDL ve FFmpeg kütüphaneleri tabanlı basit bir medya oynatıcı
    • ffprobe: Multimedya akışlarını analiz eden araç
  • FFmpeg kütüphaneleri

    • libavformat: Girdi/çıktı ve muxing/demuxing işlevleri sağlar
    • libavcodec: Encoding/decoding işlevleri sağlar
    • libavfilter: Graf tabanlı filtreler üzerinden ham medya işleme
    • libavdevice: Girdi/çıktı aygıt desteği
    • libavutil: Ortak multimedya yardımcı araçları sağlar
    • libswresample: Ses yeniden örnekleme, örnek formatı dönüşümü ve ses miksleme desteği
    • libswscale: Renk dönüşümü ve görüntü ölçekleme işlevleri
    • libpostproc: Video son işleme (deblocking, gürültü filtresi vb.) işlevleri

Basit FFmpeg oynatıcı

  • FFmpeg’in temel kullanım biçimi, bir multimedya akışını demux ederek ses ve video akışlarına ayırmak ve bunları ham ses/video verisine decode etmekten oluşur
  • Başlıca yapılar

    • AVFormatContext: Akış senkronizasyonunu, metadata’yı ve muxing’i yöneten üst yapı
    • AVStream: Sürekli bir ses veya video akışı
    • AVCodec: Verinin encoding ve decoding yöntemini tanımlar
    • AVPacket: Akış içindeki kodlanmış veri
    • AVFrame: Decode edilmiş ham video karesi veya ses örnekleri
  • Akış analizi ve demux süreci

    • avformat_alloc_context() ile AVFormatContext için bellek ayrılır
    • avformat_open_input() ile multimedya dosyası açılır
    • avformat_find_stream_info() ile dosya içindeki akış bilgileri analiz edilir
    • Her akışın time base’i, frame rate’i, başlangıç zamanı, süresi, tipi ve FourCC kodu yazdırılır
    • avformat_close_input() ile dosya kapatılır ve bellek serbest bırakılır
  • Codec bulma ve başlatma

    • avcodec_find_decoder() ile AVStream’in codec ID’sine uygun decoder bulunur
    • Video akışında çözünürlük (width, height), ses akışında ise kanal sayısı ve sample rate yazdırılır
    • avcodec_alloc_context3() ile AVCodecContext oluşturulur
    • avcodec_parameters_to_context() ile akışın codec parametreleri decoder context’ine uygulanır
    • avcodec_open2() ile decoder açılır
  • Paket okuma ve decoding

    • AVPacket ve AVFrame yapıları, sırasıyla kodlanmış paketleri ve decode edilmiş frame’leri saklamak için ayrılır
    • av_read_frame() ile giriş dosyasından paketler sıralı olarak okunur
    • Paketin stream_index değeri üzerinden hangi akıştan geldiği belirlenir
    • Yalnızca seçilen video akışının (first_video_stream_index) paketleri decoder’a gönderilir
    • avcodec_send_packet() ile paket decoder’a iletilir
    • avcodec_receive_frame() ile decode edilmiş frame’ler döngü içinde alınır
    • Her frame’in numarası, tipi (I/P/B), formatı, PTS değeri ve keyframe olup olmadığı yazdırılır
    • av_packet_unref() ile paket belleği yeniden kullanıma hazırlanır
    • Tüm işlemler tamamlandığında av_packet_free(), av_frame_free(), avcodec_free_context(), avformat_close_input() ile bellek serbest bırakılır
  • Çalıştırma ve örnek çıktı

    • Örnek kod GitHub deposunda sunuluyor
    • meson ve ninja ile build edilebilir (pip3 install meson ninja)
    • meson setup build çalıştırıldığında FFmpeg otomatik olarak indirilip yapılandırılır
    • ninja -C build ile build edildikten sonra ./build/ffmpeg-101 sample.mp4 ile çalıştırılır
    • Çıktı olarak dosya formatı, akış bilgileri (video/ses), codec, çözünürlük, sample rate, her paketin PTS değeri ve decode edilen frame bilgileri yazdırılır
  • Çıktı örneği özeti

    • Video akışı: H.264 (avc1), çözünürlük 206x80, frame rate 30fps
    • Ses akışı: AAC (mp4a), 2 kanal, 44.1kHz
    • Her paketin PTS değeri ve frame tipi (I/P) sırayla gösterilir, decoding süreci konsolda yazdırılır

Build ve çalışma ortamı

  • Gerekli araçlar: Python, pip, meson, ninja
  • Kurulum komutu: pip3 install meson ninja
  • Build adımları

    • Örnek arşiv dosyasını ffmpeg-101 klasörüne çıkarın
    • meson setup build komutunu çalıştırın
    • ninja -C build ile build edin
    • ./build/ffmpeg-101 sample.mp4 ile çalıştırın
    • FFmpeg sistemde kurulu değilse otomatik olarak indirilip yapılandırılır

1 yorum

 
GN⁺ 2026-03-23
Hacker News yorumları
  • FFmpeg ve libav'in iç işleyişini derinlemesine anlamak isteyenlere Leandro Moreira'nın eğitimini şiddetle tavsiye ediyorum
    Şahsen şimdiye kadar gördüğüm en eksiksiz ve en net anlatım bu
    FFmpeg-libav eğitim bağlantısı

    • Bu eğitim gerçekten çok yardımcı oldu. Teşekkürler
    • Orijinal metindeki komutlar pek ilgimi çekmemişti, ama bu eğitim çok daha pratik görünüyor
  • Daha şimdiden ffmpeg 101 olması şaşırtıcı. Sanki ffmpeg 8 daha dün çıkmış gibi

    • İnsan uyurken ajan kodu push'layıp, onaylayıp, yayınlamış gibi bir sonuç
  • Bir başka rehber daha paylaşılmış
    HN'deki ilgili rehber bağlantısı

  • FFmpeg, gerçekten bayıldığım bir araç

  • ffmpeg için harika bir başlangıç kaynağıydı. Teşekkürler

  • ffmpeg tam anlamıyla bir süper güç
    Birden fazla video parçasını oynatılabilir tek bir biçimde birleştirmek gerektiğinde hep onu kullanıyorum