Sekumpulan skrip ffmpeg yang saya perlukan untuk mendapatkan "Video untuk semua orang" yang kompatibel dengan HTML5?

12

Apa daftar perintah yang harus saya lakukan di ffmpeg / mencoder / some_other_CLI_app untuk mendapatkan video dalam semua format yang tepat untuk menggunakan Video untuk Semua Orang ?

yaitu Apakah ada kehalusan yang mencegah ada tutorial mekanik yang mengatakan

VIDEO=video.mp4
TYPE=$(ffmpeg --find-information-about-the-video ... )
ffmpeg ... > video.mov
ffmpeg ... > video.flv
ffmpeg ... > video.webm
ffmpeg ... > video.h.264
...

Lalu salin dan tempel kode Video untuk Semua Orang ke halaman Anda?

Tujuan saya adalah memiliki video tertanam di laman web pribadi saya yang dihosting oleh saya. HTML5 dengan flashbackback lebih disukai, jadi cara paling sederhana tampaknya adalah Video untuk Semua Orang. Tetapi halaman itu meninggalkan bagian yang paling rumit, menyandikan video ke dalam semua format yang berbeda, untuk dibaca pembaca dengan membaca artikel yang panjang dan lengkap tentang format video . Tentunya ini tidak perlu. Saya bisa memberikan daftar perintah bagi pengguna untuk secara buta mengkonversi file audio ke banyak format yang berbeda. Semoga seorang guru ffmpeg dapat melakukan hal yang sama untuk video.

John Baber-Lucero
sumber
1
Komentar kecil untuk contoh kode pseudocode Anda: Tidak ada .movuntuk video HTML5, dan tidak ada h.264ekstensi juga. Ada adalah .264 , yang merupakan baku bytestream Annex B untuk unit NAL. Pengkodean video bukanlah ilmu roket, tetapi Anda perlu menginvestasikan sedikit waktu untuk mengenal konsepnya.
slhck

Jawaban:

21

Catatan: Jawaban ini sangat diedit sejak posting aslinya. Sekarang tahun 2017; streaming berfungsi berbeda dari biasanya. Panduan ini mengasumsikan pengunduhan progresif sederhana dari satu aliran video pada satu resolusi yang diberikan - tidak ada streaming adaptif.

Persyaratan

Pertama, pastikan untuk mengunduh ffmpegversi terbaru (unduh versi statis; jangan panggil apt-get install ffmpegatau sejenisnya). Idealnya, kompilasi sendiri . Tidak butuh waktu lama.

Untuk menghasilkan video yang didukung oleh sebagian besar browser, selalu periksa tabel kompatibilitas terbaru . Tidak ada satu codec / format yang berfungsi di setiap browser, tetapi jika Anda menghasilkan H.264 di MP4 dan VP9 di WebM, dengan masing-masing codec audio, Anda akan memiliki dukungan untuk Chrome, Firefox, Safari, dan beberapa versi IE.

WebM (VP9 / Vorbis)

Ikuti rekomendasi dalam panduan FFmpeg VP9 dan gunakan pendekatan pengkodean dua jalur dengan batasan laju:

ffmpeg -y -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 1 -f webm /dev/null && \
ffmpeg -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 2 output.webm

Bitrate target tergantung pada resolusi Anda, frame rate, jenis konten, dan kualitas apa yang Anda inginkan. 2,5 MBit / s harus menjadi kompromi yang baik untuk video HD pada 30 fps. Lihat panduan Google ini untuk beberapa rekomendasi.

MP4 (H.264 / AAC)

Ikuti rekomendasi dalam panduan FFmpeg H.264 dan gunakan pendekatan pengkodean dua-pass dengan batasan laju:

ffmpeg -y -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 1 -c:a aac -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 2 -c:a aac -movflags faststart output.mp4

Di sini, bitrate target harus sekitar 50% lebih tinggi daripada untuk video VP9, ​​karena H.264 tidak begitu efisien. Tambahkan -movflags faststartopsi ke pass kedua untuk membuat pemuatan awal video lebih cepat.

Untuk mengatur opsi audio, lihat panduan pengkodean AAC .

slhck
sumber
1
Versi 2013-12-19 dari salah satu paragraf Anda terpotong di tengah kalimat. "Audio default ke 128 kBit / s lagi, tetapi Anda dapat mengatur q: a untuk bitrate variabel, di mana nilainya berkisar dari 0 hingga 500. 100 adalah default dan lebih tinggi berarti lebih baik. Jika"
Alan De Smet
@ Slhck masuk akal, tapi dua sen saya adalah bahwa Anda menjatuhkan Ogg dan menggantinya dengan mpegts / m3u8 untuk mendukung semua perangkat iOS atau mereka yang menerima HLS. Anda dapat menggunakan kembali file .mp4 dan cukup menambahkan pemrosesan mpeg-ts di ffmpeg.
Paul Gregoire
@Mainain Memang, tapi MPEG-TS / .m3u8 umumnya bukan video yang kompatibel dengan HTML5. Anda memerlukan server HLS dan Anda perlu tahu lebih banyak tentang streaming, yang sebenarnya tidak berada dalam cakupan pertanyaan ini.
slhck
Poin bagus, tetapi dari pengalaman saya sejauh ini, server http sederhana dapat menayangkan m3u8 ke tag video. Satu-satunya hal yang biasanya perlu dilakukan adalah menambahkan tipe mime untuk m3u8 dan ts ke konfigurasi server masing-masing.
Paul Gregoire