Untuk belajar lebih detail tentang transcoding, kita langsung ke tools yang sangat populer yang digunakan untuk transcoding yaitu FFMPEG.
Berikut adalah diagram cara kerja FFMPEG:
1. Demux: memisahkan antara stream video, stream audia, stream caption, dll
2. Decode: mengubah compressed video ke uncompressed video (frame-frame gambar utuh)
3. Filter: melakukan editing frame-frame gambar dan menjdaikan uncompresed video
4. Encode: membuat uncompresed video dan audio menjadi compressed video
5. Mux: menggabungkan stream compresed video dengan compresed audio ke dalam container
Di gambar juga dijelaskan 3 jenis task yang bisa dilakukan:
1. Editing: mengedit frame-frame gambar (menggunakan filter option)
2. Transcoding: mengubah codec dengan melakukan decode kemudian encode
3. Change Container: mengubah container spt: mengubah mp4 menjadi ogg
Berikut ini diberikan contoh lengkap proses Transcoding + Editing:
ffmpeg -i 1280x720p.mp4 -filter:v "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" mirror.flv |
Hasil Transcoding + Editing --> file: mirror.flv
Kurang lebih cara kerja ffmpeg sbb:
1. Pertama-tama ffmpeg membaca informasi file input 1280x720p.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1280x720p.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf56.15.105 Duration: 00:00:15.04, start: 0.036281, bitrate: 1990 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1859 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default) Metadata: handler_name : SoundHandler |
Terlihat bahwa file tsb tersebut terdiri dari 2 stream: Compressed Video (Stream #0:0(und): Video: h264 (High)) dan Compressed Audio ( Stream #0:1(und): Audio: aac (LC)).
2. Proses DEMUX memisahkan ke dua stream tsb.
3. Selanjutnya di lakukan proses DECODE menggunakan codec yang sesuai yaitu Video menggunakan decoding h264 dan Audio menggunakan decoding aac. Proses ini menghasilkan Raw Video (dalam bentuk frame-frame bitmap uncompressed) dan Raw Audio (dalam bentuk PCM).
4. Selanjutnya terjadi proses Editing (di ffmpeg proses ini di lakukan modul FILTER). Perintah -filter:v "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" merupakan perintah untuk melakukan Editing (pada modul Filter).
Proses filter tsb: lakukan split video menjadi main dan tmp. Lalu tmp di crop 1/2 bagian atas. Setelah itu balikkan (flip) video tsb. Lalu lakukan overlay (tempel) video hasil flip tsb ke 1/2 bagian bawah video main.
INGAT: proses filter (editing) hanya bisa terjadi pada uncompressed video dan audio.
5. Setelah proses filter selesai maka terbentuk Video baru yang uncompressed. Proses selanjutnya adalah melakukan ENCODING dari uncompressed video ke compressed video. Diperlukan codec disini.
Karena file output adalah FLV, maka codec yang digunakan adalah codec flv1 (library flv).
Output #0, flv, to 'mirror.flv': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf56.15.105 Stream #0:0(und): Video: flv1 (flv) ([2][0][0][0] / 0x0002), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 24 fps, 1k tbn, 24 tbc (default) Metadata: handler_name : VideoHandler encoder : Lavc56.15.100 flv Stream #0:1(und): Audio: mp3 (libmp3lame) ([2][0][0][0] / 0x0002), 44100 Hz, stereo, fltp (default) Metadata: handler_name : SoundHandler encoder : Lavc56.15.100 libmp3lame |
6. Selanjutnya setelah file compressed video dan audio terbentuk, kedua file tsb di gabung dengan proses MUX untuk masuk ke dalam container FLV
Mapping proses MUX sbb:
Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> flv1 (flv)) Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame)) |
Stream #0:0 (stream input pertama pada file input pertama) dimapping dari h264 ke Stream #0:0(stream output pertama pada file output pertama) dengan codec flv
Stream #0:1 (stream input kedua pada file input pertama) diubah dari aac ke Stream #0:1 (stream output kedua pada file output pertama) dengan codec mp3
No comments:
Post a Comment