4 poin oleh GN⁺ 2026-03-23 | 1 komentar | Bagikan ke WhatsApp
  • Membahas struktur dan cara penggunaan framework FFmpeg untuk encoding, decoding, transcoding audio dan video, serta streaming
  • Menjelaskan secara konkret peran alat command line seperti ffmpeg, ffplay, ffprobe dan library inti seperti libavcodec, libavformat, libavfilter
  • Mengimplementasikan analisis stream dan prosedur decoding berbasis AVFormatContext, AVCodecContext, AVPacket, AVFrame secara bertahap
  • Menggunakan sistem build meson/ninja untuk mengunduh dan mengompilasi kode contoh secara otomatis, lalu menganalisis file media sampel dan menampilkan hasilnya
  • Dapat digunakan sebagai materi pengantar berbasis praktik untuk memahami prinsip kerja internal FFmpeg dan pipeline decoding

Komposisi paket FFmpeg

  • FFmpeg terdiri dari kumpulan alat dan library yang dapat melakukan encoding, decoding, transcoding berbagai format audio dan video, serta streaming melalui jaringan
  • Alat FFmpeg

    • ffmpeg: alat konversi format multimedia berbasis command line
    • ffplay: pemutar media sederhana berbasis SDL dan library FFmpeg
    • ffprobe: alat untuk menganalisis stream multimedia
  • Library FFmpeg

    • libavformat: menyediakan fungsi input/output dan muxing/demuxing
    • libavcodec: menyediakan fungsi encoding/decoding
    • libavfilter: pemrosesan media mentah melalui filter berbasis graf
    • libavdevice: dukungan perangkat input/output
    • libavutil: menyediakan utilitas multimedia umum
    • libswresample: mendukung resampling audio, konversi format sampel, dan mixing audio
    • libswscale: fungsi konversi warna dan penskalaan gambar
    • libpostproc: fungsi post-processing video (deblocking, filter noise, dll.)

Pemutar sederhana FFmpeg

  • Cara dasar penggunaan FFmpeg adalah melakukan demux pada stream multimedia untuk memisahkannya menjadi stream audio dan video, lalu mendekodenya menjadi data audio/video raw
  • Struktur utama

    • AVFormatContext: struktur tingkat atas yang mengelola sinkronisasi stream, metadata, dan muxing
    • AVStream: stream audio atau video yang berkelanjutan
    • AVCodec: mendefinisikan metode encoding dan decoding data
    • AVPacket: data terenkode di dalam stream
    • AVFrame: frame video mentah atau sampel audio hasil decoding
  • Proses analisis stream dan demux

    • Alokasi memori AVFormatContext dengan avformat_alloc_context()
    • Membuka file multimedia dengan avformat_open_input()
    • Menganalisis informasi stream di dalam file dengan avformat_find_stream_info()
    • Menampilkan time base, frame rate, waktu mulai, durasi, tipe, dan kode FourCC dari tiap stream
    • Menutup file dan membebaskan memori dengan avformat_close_input()
  • Pencarian dan inisialisasi codec

    • Mencari decoder yang sesuai dengan codec ID dari AVStream menggunakan avcodec_find_decoder()
    • Untuk stream video, menampilkan resolusi (width, height); untuk stream audio, menampilkan jumlah channel dan sample rate
    • Membuat AVCodecContext dengan avcodec_alloc_context3()
    • Menerapkan parameter codec stream ke context decoder dengan avcodec_parameters_to_context()
    • Membuka decoder dengan avcodec_open2()
  • Membaca packet dan decoding

    • Mengalokasikan struktur AVPacket dan AVFrame masing-masing untuk menyimpan packet terenkode dan frame hasil decode
    • Membaca packet secara berurutan dari file input dengan av_read_frame()
    • Mengidentifikasi stream asal packet melalui stream_index
    • Hanya mengirim packet dari stream video yang dipilih (first_video_stream_index) ke decoder
    • Mengirim packet ke decoder dengan avcodec_send_packet()
    • Menerima frame hasil decode berulang kali dengan avcodec_receive_frame()
    • Menampilkan nomor, tipe(I/P/B), format, PTS, dan apakah keyframe untuk tiap frame
    • Mendaur ulang memori packet dengan av_packet_unref()
    • Setelah semua proses selesai, membebaskan memori dengan av_packet_free(), av_frame_free(), avcodec_free_context(), avformat_close_input()
  • Contoh eksekusi dan hasil

    • Kode contoh tersedia di repositori GitHub
    • Dapat dibangun menggunakan meson dan ninja (pip3 install meson ninja)
    • Menjalankan meson setup build akan mengunduh dan mengonfigurasi FFmpeg secara otomatis
    • Setelah build dengan ninja -C build, jalankan dengan ./build/ffmpeg-101 sample.mp4
    • Hasil eksekusi menampilkan format file, informasi stream (video/audio), codec, resolusi, sample rate, PTS tiap packet, dan informasi frame hasil decode
  • Ringkasan contoh output

    • Stream video: H.264 (avc1), resolusi 206x80, frame rate 30fps
    • Stream audio: AAC (mp4a), 2 channel, 44.1kHz
    • PTS tiap packet dan tipe frame (I/P) ditampilkan secara berurutan, dan proses decoding dicetak ke konsol

Lingkungan build dan eksekusi

  • Alat yang dibutuhkan: Python, pip, meson, ninja
  • Perintah instalasi: pip3 install meson ninja
  • Prosedur build

    • Ekstrak file arsip contoh ke folder ffmpeg-101
    • Jalankan meson setup build
    • Build dengan ninja -C build
    • Jalankan dengan ./build/ffmpeg-101 sample.mp4
    • Jika FFmpeg belum terpasang di sistem, FFmpeg akan diunduh dan dikonfigurasi secara otomatis

1 komentar

 
GN⁺ 2026-03-23
Komentar Hacker News
  • Sangat merekomendasikan tutorial Leandro Moreira bagi siapa pun yang ingin memahami cara kerja internal FFmpeg dan libav secara mendalam
    Secara pribadi, ini adalah penjelasan paling lengkap dan paling jelas yang pernah saya lihat sejauh ini
    Tautan tutorial FFmpeg-libav

    • Tutorial ini benar-benar membantu. Terima kasih
    • Perintah-perintah di artikel asli tidak terlalu menarik, tetapi tutorial ini tampak jauh lebih praktis
  • Agak mengejutkan ini sudah ffmpeg 101. Rasanya seperti ffmpeg 8 baru keluar kemarin

    • Terasa seperti hasil ketika agen mendorong kode, menyetujui, dan merilis semuanya saat kita tidur
  • Membagikan panduan lain
    Tautan panduan terkait di HN

  • FFmpeg benar-benar alat yang sangat saya sukai

  • Ini adalah materi pengantar ffmpeg yang luar biasa. Terima kasih

  • ffmpeg adalah superpower sejati
    Saya selalu memakainya saat merakit beberapa potongan video menjadi satu bentuk yang bisa diputar