21

Как я могу конвертировать some.flv some.avi или some.wmv с помощью FFmpeg, чтобы быть уверенным, что это видео будет воспроизводиться и искать в JW Player?

4 ответа4

40

H.264 в MP4

Как правило, вы хотите создать видео 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. Конечно, требуемый битрейт будет зависеть от того, насколько сложен контент. Это требует проб и ошибок.

9

Это ответ на ваш последний комментарий @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 миллисекунд.

3

Вы можете просто преобразовать неконтролируемый AVI или MP4, также без перекодирования, выполнив это:

ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4

Нет необходимости перекодировать что-либо, потому что нужно просто переместить атом moov.

-1

Вы можете попробовать это с помощью 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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .