Вот командная строка ffmpeg, которую мы используем для перекодирования в MPEG-4 h.264 в нашей производственной среде. Мы протестировали вывод на нескольких устройствах Android, а также на iOS. Вы можете использовать это как отправную точку, просто настраивая такие параметры, как размер кадра / частота кадров и qfactor.
ffmpeg -y
-i #{input_file}
-s 432x320
-b 384k
-vcodec libx264
-flags +loop+mv4
-cmp 256
-partitions +parti4x4+parti8x8+partp4x4+partp8x8
-subq 6
-trellis 0
-refs 5
-bf 0
-flags2 +mixed_refs
-coder 0
-me_range 16
-g 250
-keyint_min 25
-sc_threshold 40
-i_qfactor 0.71
-qmin 10 -qmax 51
-qdiff 4
-acodec libfaac
-ac 1
-ar 16000
-r 13
-ab 32000
-aspect 3:2
#{output_file}
Вот некоторые из важных параметров, влияющих на совместимость с Android:
-coder 0 Uses CAVLAC rather than CABAC entropy encoding (CABAC not supported on Android)
-trellis 0 Should be shut off, requires CABAC
-bf 0 Turns off B-frames, not supported on Android or other h.264 Baseline Profile devices
-subq 6 Determines what algorithms are used for subpixel motion searching. 7 applies to B-frames, not supported on Android.
-refs 5 Determines how many frames are referenced prior to the current frame. Increasing this number could affect compatibility
После кодирования нашего видео с помощью этого рецепта ffmpeg мы также передаем видео через qt-faststart. На этом шаге видео повторно используется для потоковой передачи. Мы транслируем его через HTTP во встроенный VideoView в нашем приложении для Android. Никаких проблем с потоковой передачей на любое известное нам Android-устройство.
Обновление 2013-06-17: Я просто хотел добавить примечание, что лучше всего придерживаться «базового» профиля для кодирования H.264 для максимальной совместимости на всех устройствах Android. В приведенной выше командной строке явно не указан профиль H.264, но ffmpeg имеет -profile
флаг командной строки, который полезен, если вы используете его предустановки. Тебе, наверное, не стоит связываться с -profile
. Я закодировал видео для своего планшета ASUS Transformer 300 (Android 4.2), используя «основной», а не «базовый» профиль (через Handbrake). В «основном» профиле возникали проблемы с рассинхронизацией звука с видео при воспроизведении.
person
mportuesisf
schedule
15.06.2011