Ilustrasi M3U8 ke MP4

Mengapa M3U8 Perlu "Dikonversi" dan Bukan Langsung Disimpan Sebagai File?

Saat Anda memutar sebuah stream M3U8, di balik layar browser sebenarnya terus-menerus meminta paket data .ts satu demi satu, lalu mendekodenya secara real-time untuk diputar. Fragmen-fragmen ini:

  • Berformat MPEG-2 Transport Stream (.ts)
  • Biasanya berukuran durasi video 2-10 detik
  • Tidak dapat diputar secara langsung dengan kebanyakan pemutar (format tidak didukung secara luas sebagai file tunggal)

Untuk mendapatkan video yang dapat diputar di perangkat mana pun, Anda perlu:

  1. Mengunduh semua fragmen .ts
  2. Menggabungkannya sesuai urutan
  3. Mengemas ulang (remux) ke dalam wadah (container) .mp4 (Opsional: mengodekan ulang untuk mengubah format encoding)

Struktur Dua Lapis M3U8

Sebelum mulai mengunduh, Anda harus memahami bahwa M3U8 bisa memiliki dua lapisan:

Master Playlist (Daftar Putar Utama)

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1280x720
720p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=854x480
480p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=700000,RESOLUTION=640x360
360p/index.m3u8

File ini sendiri tidak berisi fragmen, hanya mencantumkan jalur (path) Media Playlist untuk berbagai kualitas gambar.

Media Playlist (Daftar Putar Media)

#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:3
#EXTINF:6.006,
segment-001.ts
#EXTINF:6.006,
segment-002.ts
...
#EXT-X-ENDLIST

Inilah daftar yang sebenarnya berisi jalur menuju fragmen-fragmen .ts.

Penjelasan Metode Konversi

Metode 1: FFmpeg -c copy (Pengemasan ulang langsung, paling cepat)

ffmpeg -i "https://stream.example.com/720p/index.m3u8" \
       -c copy \
       -movflags +faststart \
       output.mp4

Penjelasan: - -c copy: Tidak mengodekan ulang (re-encode), langsung mengambil data H.264 + AAC dari TS dan mengemasnya ulang ke dalam wadah MP4. - -movflags +faststart: Memindahkan moov atom ke awal file, sehingga MP4 mendukung pemutaran sambil mengunduh (ramah streaming). - Kecepatan sangat tinggi, hampir tidak mengonsumsi resource CPU, ukuran output hampir sama dengan aslinya.

Metode 2: FFmpeg Pengodean Ulang (Mengurangi ukuran file)

ffmpeg -i "https://stream.example.com/720p/index.m3u8" \
       -c:v libx264 -crf 23 -preset medium \
       -c:a aac -b:a 128k \
       output.mp4

Penjelasan: - Cocok jika Anda perlu mengompres video yang awalnya memiliki bitrate tinggi. - Nilai CRF yang lebih rendah berarti kualitas lebih baik namun file lebih besar (disarankan 18-28). - Kecepatan jauh lebih lambat dibanding -c copy, karena memerlukan CPU untuk mengodekan ulang.

Metode 3: FFmpeg.wasm di Browser (Tanpa instalasi)

Alat Riset HLS di situs ini menggunakan FFmpeg.wasm untuk menyelesaikan penggabungan di dalam browser, yang setara dengan menjalankan perintah berikut di browser Anda:

ffmpeg -f concat -safe 0 -i concat.txt -c copy output.mp4

Skenario penggunaan: Saat Anda perlu menggabungkan sedikit tautan publik secara mendadak dan tidak ingin menginstal perangkat lunak apa pun.

Perbandingan Alat Konversi

Alat Persyaratan Instalasi Kecepatan Batasan CORS Target Pengguna
Baris Perintah FFmpeg Perlu instalasi ★★★★★ Bisa dilewati Pengembang, Pengguna Teknis
Pemutar VLC Perlu instalasi ★★★ Bisa dilewati Pengguna Umum
Alat Browser (Situs ini) Tanpa instalasi ★★★ Terbatas Pengujian Cepat
Situs Konversi Online Tanpa instalasi ★★ Tergantung Server Pengguna Non-Teknis

Masalah Umum

Video tidak ada suara setelah konversi?

Biasanya karena trek audio berformat AC-3 (Dolby), yang tidak didukung oleh beberapa pemutar MP4. Solusi:

ffmpeg -i input.m3u8 -c:v copy -c:a aac output.mp4

Memaksa konversi audio ke format AAC biasanya akan menyelesaikan masalah ini.

Video tidak sinkron (Suara dan gambar tidak pas)?

Jika suara dan gambar tidak sinkron, biasanya karena timestamp PTS/DTS pada fragmen TS mengalami lompatan. Gunakan -async 1 atau -fflags +genpts untuk membuat ulang timestamp:

ffmpeg -fflags +genpts -i input.m3u8 -c copy output.mp4

Bagaimana jika M3U8 dienkripsi?

Jika di dalam M3U8 terdapat #EXT-X-KEY:METHOD=AES-128,URI=..., itu berarti fragmen dienkripsi. FFmpeg dapat menangani AES-128 secara otomatis, namun DRM (seperti Widevine, FairPlay) adalah perlindungan tingkat hardware yang saat ini tidak dapat ditangani oleh alat publik.

Detail lebih lanjut mengenai enkripsi: Analisis Lengkap Enkripsi M3U8 dan DRM

Sumber Daya Terkait

Ingin menguji tautan M3U8 Anda sekarang?

🚀 Uji Pemutar M3U8 Online Sekarang