Daftar bagian terjemahan seri:
- Memasak (Anda disini)
- Kompilasi dengan Emscripten
- Konversi avi ke mp4
Dari bagian ini Anda akan belajar:
- Mengapa semua ini perlu?
- Cara mengompilasi FFmpeg di Docker
Mengapa semua ini perlu?
Tugas utama dari serangkaian publikasi adalah sebagai berikut:
- Buat tutorial tentang menggunakan Emscripten untuk mengkompilasi pustaka C / C ++ dalam JavaScript (lebih rinci dan berguna daripada yang ditulis sebelumnya)
- Memo pribadi
Kenapa ffmpeg?
FFmpeg adalah proyek open source gratis yang terdiri dari sekumpulan perpustakaan dan program untuk memproses video, audio, dan file multimedia / siaran lainnya. (dari Wikipedia)
Pustaka JavaScript yang akan menyediakan kemampuan seperti itu tidak ada. Jika Anda Google "ffmpeg.js", Anda akan menemukan beberapa solusi yang mirip dengan apa yang akan kita lakukan:
Perpustakaan-perpustakaan ini, tentu saja, dapat digunakan, tetapi mereka memiliki kekurangan:
- Versi FFmpeg dan Emscripten yang digunakan sudah tidak digunakan lagi
- Proyek tidak didukung untuk waktu yang lama
Awalnya, saya berencana untuk mulai mendukung salah satu dari dua perpustakaan, tetapi karena terlalu banyak perubahan telah terakumulasi selama bertahun-tahun, saya memutuskan untuk melakukan semuanya dari awal, secara bersamaan membuat tutorial tentang cara menggunakan Emscripten untuk mengkompilasi perpustakaan C / C ++ yang besar.
Cara mengompilasi FFmpeg di Docker
Pertama, kami mengkloning sumber FFmpeg, dan karena cabang master digunakan untuk pengembangan, kami akan memilih cabang dengan versi tertentu.
Pada saat menulis tutorial, FFmpeg versi terbaru adalah 4.1.4, jadi kami akan menggunakannya.
$ git clone --depth 1 --branch n4.1.4 https://github.com/FFmpeg/FFmpeg
--depth 1 adalah opsional, tetapi ini akan mempercepat kloning karena kita tidak perlu mengunduh semua komitmen.
Setelah kloning berhasil, kompilasi sumber dengan gcc untuk memastikan semuanya berfungsi.
Tentu saja, Anda dapat melewati langkah ini, tetapi pengalaman saya mengatakan bahwa selalu baik untuk menyentuh sistem build terlebih dahulu. (FFmpeg menggunakan make standar, yang lebih mudah port daripada Bazel)
Petunjuk untuk mengkompilasi dan menginstal FFmpeg dapat ditemukan di file INSTALL.md yang terletak di direktori root:
# Pasang FFmpeg:
1. Ketik `. / Configure` untuk membuat konfigurasi. Daftar opsi untuk konfigurasi dapat diperoleh dengan menjalankan `configure - help`.
`configure` dapat dijalankan dari direktori selain dari sumber FFmpeg. Untuk melakukan ini, lewati jalur absolut untuk mengonfigurasi, mis. `/ ffmpegdir / ffmpeg / configure`.
2. Sekarang ketik `make` untuk membangun FFmpeg. Anda akan membutuhkan GNU Make 3.81 atau lebih tinggi.
3. Ketikkan `make install` untuk menginstal binari dan perpustakaan.
PEMBERITAHUAN
- - -
- Ketergantungan non-sistem (mis. Libx264, libvpx) dinonaktifkan secara default.
Karena kita tidak akan menginstal FFmpeg, hanya dua langkah pertama yang diperlukan.
Saat mengkompilasi dengan gcc, kami akan menggunakan Docker untuk menciptakan lingkungan yang akan mengisolasi seluruh proses dan mencapai keseragaman pada mesin yang berbeda.
Mari kita membuat skrip bash build-with-docker.sh di direktori root dengan konten berikut:
#!/bin/bash docker pull gcc:4 docker run -it \ -v $PWD:/usr/src \ gcc:9.1 \ sh -c 'cd /usr/src && ./configure --disable-x86asm && make -j4'
--disable-x86asm perlu ditambahkan ketika ffmpeg memintanya
Jalankan skrip:
$ chmod +x build-with-docker.sh $ ./build-with-docker.sh
Tergantung pada kecepatan koneksi Internet Anda dan perangkat keras Anda, kompilasi akan memakan waktu sekitar 10-30 menit.
Perhatikan bahwa Anda akan melihat banyak peringatan, karena gcc 9.1 lebih ketat dari versi sebelumnya. Ini normal.
Jika semuanya selesai dengan sukses, Anda dapat mencoba menjalankan ffmpeg :
$ ./ffmpeg
Atau
$ docker run -it -v $PWD:/usr/src gcc:9.1 /usr/src/ffmpeg
Anda akan melihat sesuatu seperti:
ffmpeg versi n4.1.4 Hak cipta 2000–2019 para pengembang FFmpeg
dibangun dengan gcc 9.1.0 (GCC)
konfigurasi: - disable-x86asm
libavutil 56.22.100 / 56.22.100
libavcodec 58.35.100 / 58.35.100
libavformat 58.20.100 / 58.20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
Encoder Audio dan Video yang sangat cepat
penggunaan: ffmpeg [opsi] [[opsi infile] -i infile] ... {[opsi pengarsipan] outfile} ...
Gunakan -h untuk mendapatkan bantuan penuh atau, lebih baik lagi, jalankan 'man ffmpeg'
Di bagian selanjutnya, kita akan mulai mengkompilasi FFmpeg dengan Emscripten.