Dalam foto - sepeda roda empat terbang pertama. SumberSaat ini, karena ketersediaan layanan yang diperlukan, memposting video di jaringan bukanlah tugas yang sulit. Namun, tidak ada begitu banyak bahan tentang struktur internal sistem tersebut, terutama di segmen berbahasa Rusia.
Saya telah terlibat dalam desain dan pengembangan platform video berkualitas tinggi selama beberapa waktu. Pada artikel ini saya ingin menggambarkan momen-momen yang ingin saya ketahui pada awal pengembangan.
Artikel ini tidak mengklaim status kepemimpinan, di dalamnya saya akan mencoba untuk menggambarkan hanya poin yang menarik atau tidak jelas yang mempengaruhi pemrosesan dan pengiriman konten video berbasis HTML5.
Materi dirancang untuk mereka yang sudah dalam subjek, atau siap untuk mencari rincian singkatan, istilah dan konsep.
Bagian kedua.Format
H264 High-profil, meskipun popularitasnya, ternyata tidak bekerja di mana-mana - beberapa browser tidak menyertakan dukungannya. Untungnya, pada perangkat modern, hampir di mana-mana di mana H264 tidak didukung, VP8 / 9 berfungsi. VP9 lebih baik digunakan, karena Saya belum melihat versi decoder yang dapat VP8, tetapi tidak VP9 atau H264. VP9 memberikan kualitas gambar yang sebanding dengan H264 ketika bitrate ~ 30% lebih rendah - ini penting untuk mengurangi beban pada saluran. Selain itu, jika penggunaan codec MPEG berpotensi memiliki klaim hukum (cerita yang sangat rumit), maka VP9 melakukannya dengan baik. Benar, kecepatan pengkodean VP9 adalah sekitar urutan besarnya lebih rendah, oleh karena itu, lebih banyak sumber daya harus dialokasikan untuk pemrosesan.
Jika ada kebutuhan untuk mendukung peralatan lama yang tidak dapat mengatasi H264 High, maka Anda dapat menambahkan 480p H264 Main dengan bitrate lebih rendah sebagai format ketiga.
Hi10P jauh lebih baik untuk tidak menggunakan karena dukungan decoding perangkat keras yang buruk.
H265 jelas akan memerlukan biaya lisensi, yang bukan untuk semua orang.
Lembut vs keras
Pembuat enkode perangkat keras tidak menggunakan sebagian besar fitur lanjutan dari codec (menghemat ruang pada chip), memberikan file yang disandikan secara tidak optimal. Pilihan format terbatas, tidak semua dapat dikonfigurasi dengan parameter pengkodean - seringkali, dari nilai-nilai yang benar-benar mempengaruhi hasil, hanya ada bitrate, dan bahkan yang dirasakan sangat aneh. Jika semuanya dilakukan sebagaimana mestinya, maka pada chip normal Anda bisa mendapatkan hasil yang benar-benar waras dengan linear (efek dalam adegan dinamis) dan bitrate sedikit lebih tinggi.
Dan, tentu saja, agar hardware encoder berfungsi, Anda memerlukan perangkat - kartu video atau prosesor dengan inti video, yang tidak dimiliki semua server.
Tapi mereka cepat. Sangat Dibandingkan dengan pemrosesan perangkat lunak, kecepatannya dapat tumbuh beberapa ratus kali, ke tingkat di mana disk IO mungkin tidak cukup.
Pemrosesan dengan metode perangkat keras sangat tergantung pada penyedia solusi - setiap vendor memiliki kumpulan perpustakaan dan utilitas sendiri untuk ini, dan ada banyak pilihan: Intel Quick Sync, NVenc, AMD VCE.
Dengan pemrosesan perangkat lunak, tidak ada batasan seperti itu, dan dengan bitrate setara, hasilnya lebih baik. Untuk bekerja dengan berbagai format dan codec ada ffmpeg; "Apparatchik" tidak memiliki kemewahan (dengan pemesanan).
Kriteria Kualitas Video
Untuk menentukan kualitas target, paling mudah dibaca dalam bit per pixel, BPP. Pengaturan ini tidak tergantung pada resolusi, kecepatan bingkai, dan durasi. Dari situ sudah mempertimbangkan bitrate sesuai dengan formula
BPP * Framerate * Width * Height
Nilai BPP terbaik dipilih oleh eksperimen independen untuk video yang akan Anda proses. Nilai awal yang baik untuk H264 adalah sekitar 0,09 bps. Untuk codec berkinerja tinggi, seperti H265 dan VP9, โโparameter ini dapat dikurangi secara proporsional dengan perbandingan kompresi komparatif. Juga, BPP dapat sedikit dikurangi untuk video resolusi tinggi, seperti efisiensi codec tumbuh sedikit dengan resolusi, tetapi untuk koreksi ini Anda harus memperhitungkan resolusi dari bagian pengkodean (irisan, fitur codec yang memungkinkan Anda untuk menyandikan video dengan blok semi-independen dari resolusi fraksional).
Untuk bitrate yang diperoleh dengan rumus di atas, disarankan untuk menentukan sebelumnya nilai maksimum berdasarkan kecepatan Internet yang diharapkan dari klien - beberapa orang akan merasa nyaman menonton video yang sangat berkualitas tinggi, tetapi terus-menerus disangga.
Itulah mengapa tidak nyaman menggunakan parameter-Q dari codec (parrot kualitas) - nilai tetap memberikan bitrate akhir yang tidak dapat diprediksi.
maxRate lebih baik dilakukan dengan margin, karena codec mungkin tidak secara akurat mempertahankan nilai yang diperlukan, bahkan dengan pengkodean dua-pass.
Untuk menjaga kualitas adegan dinamis, lebih baik mengaktifkan mode VBR dari codec, namun, minRate lebih baik untuk mengatur setidaknya 90% dari total bit rate sehingga tingkat puncak tidak mengarah ke buffer underruns.
Utilitas seperti Intel VPA, ffprobe, dan Python berguna dalam kontrol kualitas. Dengan menggunakan yang terakhir, akan lebih mudah untuk membuat perbandingan sumber dan video yang dikonversi, membaca metrik yang berubah-ubah, seperti rata-rata penyimpangan piksel.
Perhitungan PSNR dan SSIM dalam praktiknya sangat tidak efisien karena optimasi psikovisual, yang secara default dimasukkan dalam codec. Jika Anda ingin menghitung metrik ini kurang lebih secara memadai, Anda dapat mematikan optimasi melalui
-tune [psnr|ssim]
Namun, file terakhir, tentu saja, akan berbeda dari yang dibuat tanpa flag-flag ini.
Pratinjau
Masalah utama menghasilkan gambar thumbnail adalah sumber fuzzy. Definisi dan pencarian gambar yang jelas adalah tugas yang sangat tidak sepele dan membutuhkan banyak sumber daya. Untungnya, solusi untuk masalah ini di sebagian besar codec termasuk dalam proses encoding video. Anda dapat mengambil bingkai kunci yang paling dekat dengan posisi tertentu, dari semua bingkai di sekitarnya, itu akan menjadi yang paling jelas. Dalam ffmpeg, ini bisa dilakukan seperti ini:
-ss [] -vf \"select='eq(pict_type,PICT_TYPE_I)'\" -vsync vfr
Encoder standar tidak mengkompres dengan cara terbaik, jadi setelah menerima gambar, lebih baik memerasnya dengan sesuatu seperti optipng - menghemat rata-rata 500kB pada pratinjau FHD.
Gambar resolusi tinggi paling baik dilakukan secara interlaced. Dengan demikian, kami akan sedikit meningkatkan ukuran (sebesar 5-10%), tetapi secara serius mengurangi waktu tampilan pada halaman pemuatan.
Artikel itu telah menjadi sangat padat, dan saya ragu bahwa semua informasi harus dikemas dalam satu teks besar. Jika Anda tertarik untuk melanjutkan topik ini, tulis komentar atau tandai dalam survei.
Platform ditutup, tetapi Anda dapat melihat kerjanya di
sini .
* Saya tidak memiliki hubungan dengan penulis situs masing-masing dan tidak boleh berbagi pandangan dan pendapat mereka. Saya tidak dapat mengomentari keputusan tentang siapa dan bagaimana akses ke kode diberikan.Siap menjawab pertanyaan.