Відповіді:
Це відповідь на останній коментар від @abrahab.
Вам не потрібно, щоб mp4box
файл міг передати його псевдо через nginx. Модуль потокової передачі MP4 забезпечує його незалежно від розміщення атомів moov ( mp4box
зміщує атом moov на початок файлу).
Тепер для помилки на сервері 500 ви використовуєте параметр "-frag" з mp4box? Модуль потокового передавання MP4 не може читати фрагментовані файли MP4. Добре використовувати mp4box
псевдо потокове передавання - це переплетення відео для кращого пошуку. Переміщення атома Moov є додатковою перевагою.
Я завжди роблю це у mp4box
файлі, кодованому FFmpeg
MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4
Це також перемежовує файл MP4 за 500 мілісекунд фрагментів за замовчуванням.
Як правило, ви хочете створити x264 відео в контейнері MP4. Ця опція підтримується в основному будь-яким пристроєм та веб-переглядачем.
Наступного має бути достатньо. Обов’язково замініть ім'я вводу та параметри CRF. Останнє встановлює якість, де здорові значення варіюються від 19 до 25 - нижчі означають кращу якість, але і більш високу бітрейт:
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4
Ви також можете використовувати Handbrake для кодування, якщо вам подобається спосіб GUI.
faststart
опціїТепер, що вам потрібно зробити, це перемістити атом MOOV контейнера MP4 на початок. Цей атом (по суті, одиниця даних у контейнері MP4) містить важливі метадані про самі відео / аудіо потоки. -movflags faststart
повинен робити саме це.
Якщо у вашій версії FFmpeg немає цієї опції, спробуйте оновити. Якщо ви не можете оновити, ви можете досягти того ж, використовуючи будь-який із наведених нижче інструментів:
QTIndexSwapper , програма Adobe AIR
MP4Box , вільний та відкритий код, виконує команду, аналогічну наведеній нижче, де ви можете змінити інтервал (тут, 500):
mp4box -inter 500 input.mp4
qt-faststart в Python , який працює скрізь, де встановлено Python.
qtfaststart input.mp4
Ось про це.
Тепер, звичайно, для потокового потоку ви, можливо, хочете обмежити бітрейт, щоб залишатися в певних межах. Ви можете прочитати більше про це в моєму блозі про методи контролю ставок .
Наприклад, додавши -maxrate 2M -bufsize 2M
до параметрів кодування, ви обмежуєте кодування до 2 Мбіт / с, що може бути достатньо для 720p відео. Необхідний бітрейт залежатиме, звичайно, від того, наскільки складним є вміст. Це вимагає деяких проб і помилок.
ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4
тоді mp4box
і mp4 не можу шукати і звітувати nginx 500 internal server error
для параметра start більше того 0
. коли відео кодується без -vcoded libx264
(за замовчуванням mp4-кодер) весь робочий файл (але якість! хворий!) :( (вибачте, зараз не дозволено просити вас відповісти)
-movflags faststart
саме те, що мені потрібно
Ви можете просто перетворити AVI або MP4, що не розповсюджується, також без перекодування всього, виконавши це:
ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4
Не потрібно нічого перекодувати, тому що просто атом moov повинен бути переміщений.
Ви можете спробувати це за допомогою 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
. Важлива причина, як, наприклад, проект IETF, чому вибрати саме ці параметри, також не вистачає.
MP4Box -isma -inter 500 Myvideo.mp4