Jawaban:
Ini adalah jawaban untuk komentar terakhir oleh Anda @ abrahab.
Anda tidak perlu mp4box
sebuah file untuk dapat melakukan pseudo streaming melalui nginx. Modul streaming MP4 merawatnya terlepas dari posisi atom moov ( mp4box
menggeser atom moov ke awal file).
Sekarang untuk kesalahan 500 server, apakah Anda menggunakan opsi "-frag" dengan mp4box? Modul streaming MP4 tidak dapat membaca file MP4 terfragmentasi. Penggunaan mp4box
pseudo streaming yang baik adalah untuk menyisipkan video untuk pencarian yang lebih baik. Pergeseran atom Moov adalah keuntungan tambahan.
Saya selalu melakukan ini pada mp4box
file yang disandikan FFmpeg
MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4
Ini juga akan interleave file MP4 dalam 500 milidetik potongan secara default.
Secara umum, Anda ingin membuat video x264 dalam wadah MP4. Opsi ini pada dasarnya didukung oleh semua perangkat dan browser.
Berikut ini harus cukup. Pastikan untuk mengganti nama input dan opsi CRF. Yang terakhir menentukan kualitas, di mana nilai waras berkisar antara 19 hingga 25 - lebih rendah berarti kualitas yang lebih baik, tetapi juga bitrate lebih tinggi:
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4
Anda juga dapat menggunakan Handbrake untuk penyandian jika Anda menyukai cara GUI.
faststart
opsiSekarang, apa yang perlu Anda lakukan adalah memindahkan atom MOOV penampung MP4 ke awal. Atom ini (pada dasarnya, satu unit data dalam wadah MP4) akan berisi metadata penting tentang aliran video / audio itu sendiri. -movflags faststart
harus melakukan hal itu.
Jika versi FFmpeg Anda tidak memiliki opsi ini, pertimbangkan untuk memutakhirkan. Jika Anda tidak dapat memutakhirkan, Anda dapat mencapai hal yang sama dengan alat di bawah ini:
QTIndexSwapper , aplikasi Adobe AIR
MP4Box , sumber bebas dan terbuka, menjalankan perintah yang mirip dengan yang berikut, tempat Anda dapat mengubah interval (di sini, 500):
mp4box -inter 500 input.mp4
qt-faststart in Python , yang bekerja di mana-mana di mana Python diinstal.
qtfaststart input.mp4
Itu saja.
Sekarang, tentu saja, untuk streaming, Anda mungkin sebenarnya ingin membatasi bitrate agar tetap dalam batas tertentu. Anda dapat membaca lebih lanjut tentang itu di posting blog saya tentang metode kontrol tingkat .
Misalnya, dengan menambahkan -maxrate 2M -bufsize 2M
opsi pengkodean, Anda membatasi pengkodean menjadi 2 Mbit / dtk, yang mungkin cukup untuk video 720p. Kecepatan bit yang dibutuhkan akan tergantung, tentu saja, pada seberapa kompleks kontennya. Ini membutuhkan beberapa trial and error.
ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4
kemudian mp4box
dan mp4 tidak bisa mencari dan laporan nginx 500 internal server error
untuk parameter awal yang lebih yang 0
. saat video dikodekan tanpa -vcoded libx264
(default mp4 coder) semua berkas kerja (tapi kualitas! sakit!) :( (maaf, sekarang, tidak diizinkan untuk mengubah pendapat Anda)
-movflags faststart
apa yang saya butuhkan
Anda cukup mengonversi AVI atau MP4 yang tidak dapat di-stream, juga tanpa meng-enkode ulang semuanya, dengan melakukan ini:
ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4
Tidak perlu menyandikan ulang apa pun, karena hanya atom moov yang harus dipindahkan.
Anda dapat mencoba ini dengan ffmpeg:
ffmpeg.exe -i "INPUT_FILE.AVI" -threads 2 -s 800x600 -r 25.00 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 2048k -async 1 -acodec pcm_s16le -ar 22050 -ac 1 -ab 128k -y "OUTPUT_FILE.mp4"
-acodec pcm_s16le
(error:) Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
. Alasan yang bagus seperti draft IETF mengapa memilih persis parameter ini tampaknya juga tidak ada.
MP4Box -isma -inter 500 Myvideo.mp4