Ответы:
Это ответ на ваш последний комментарий @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
для параметра запуска больше того 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