что значит формат видео не поддерживается кодирования h264
Чем открыть файл в формате H264 – конвертация видео из H264 в AVI и MP4
Разработчики мультимедийных плееров стараются делать свои продукты универсальными с тем, чтобы они воспроизводили как можно больше форматов. К сожалению, даже самые лучшие и известные мультимедиа-проигрыватели не могут охватить весь спектр видеоформатов, нередко качественно отличающихся друг от друга даже при использовании одного расширения. Больше всего проблем возникает со специальными или проприетарными форматами, для воспроизведения которых требуются особое ПО или, по меньшей мере, особые кодеки.
Что за формат H264 и где используется
Примером таких «трудных» форматов может послужить H264, разработанный специалистами ITU Video Coding Experts Group и используемый для сохранения видео в файл с наружных камер наблюдения и автомобильных видеорегистраторов. Помимо записи видеопотока формат H264 применяется для передачи видео в мобильных сетях. Использование h264 в камерах наблюдения обуславливается, прежде всего, превосходной компрессией данных, при которой даже продолжительное видео получается компактным и достаточно качественным.
Так, сжатое с помощью кодека H.264 видео будет занимать на диске почти в два раза меньше места, чем MPEG-4 того же качества. Это позволяет экономить интернет-трафик и место на физическом носителе, но есть у формата и свои недостатки, в частности, он более требователен к ресурсам записывающего устройства, чем тот же DivX или XviD. Другой недостаток – проприетарность. Несмотря на то, что файлы имеют одно расширение H264, их алгоритм кодирования может отличаться в зависимости от того, каким устройством они были записаны.
Программы для просмотра файлов в формате H264
Возникает резонный вопрос – как открыть файл h264 и какие программы для этого нужны. Соответствующее программное обеспечение обычно поставляется вместе с записывающими устройствами, если же видео было найдено вами в интернете, попробовать открыть формат h264 можно с помощью сторонних плееров. Попробовать, потому что нельзя дать стопроцентной гарантии, что видео таки откроется.
Рекомендуем установить x264 Video Codec – кодек, предназначенный для сжатия видео в формат H.264/AVC, а также пакет K-Lite Codec Pack Mega.
Default Player H.264
Проигрыватель видеофайлов формата Н264 от разработчика Shenzhen VStarcam Technology. Плеер оснащен простейшим файловым менеджером, конвертером h264 в AVI, поддерживается перемотка видео, воспроизведение аудио, ускоренный просмотр, захват стоп-кадров и вывод на печать. Из недостатков текущей версии следует отметить некорректное отображение картинки с отличными от стандартных пропорциями, изображение при этом может быть растянуто по вертикали.
VLC Player
Один из самых популярных и мощных медиаплееров, умеющих воспроизводить большинство известных мультимедийных форматов, к которым относится и H264/AVC. Способен открыть файл h264 с камер наблюдения, но не всех моделей, а вот кодированное H264/AVC видео с расширением MP4 плеер открывает без проблем. VLC Player имеет встроенный конвертер, с помощью которого видео можно преобразовать в более распространенный формат. Если сходу открыть h264 в VLC не удается, рекомендуется установка декодеров ffdshow tryouts, AC3Filter и Haali Media Splitter.
Datakam Player
Чем еще просмотреть файл h264 с видеорегистратора? Поищите в интернете специальное приложение Datakam Player, он же Registrator Viewer. Является альтернативой плеерам, поставляемым вместе с автомобильными регистраторами, поддерживает воспроизведение видео, записанного с помощью DATAKAM, DOD, ProCam, CamBox, Papago, Digma, xDevice, AdvoCam и многих других устройств. Возможности плеера включают работу с картами, масштабирование видео и покадровый просмотр, поиск и группировку файлов.
Десктопные программы для конвертирования H264 в AVI
Если видео H264 нужно выложить в интернет для свободного доступа, его желательно сконвертировать в AVI или MP4, чтобы не создавать скачавшим его пользователям трудностей с просмотром. Для этого можно использовать следующие программы-конвертеры.
RipBot264
Бесплатный конвертер, предназначенный для преобразования разных форматов между собой. Программа заточена под конвертирование видео в форматы, поддерживаемые мобильными устройствами, но может использоваться и для преобразования H264. Относительно прост, удобен, позволяет настраивать битрейт, FPS и другие параметры видео, поддерживает распределенное кодирование с использованием серверов локальной сети. Для работы требует установки ffdshow tryouts, Haali Media Splitter, программы AVisynth и компонента Net Framework.
AVS Video Converter
Мощный видеоконвертер со встроенными кодеками и широкой поддержкой мультимедийных форматов, включая H264. Отличается гибкостью настроек, позволяет изменять параметры преобразуемого видео, добавлять меню, субтитры и прочие элементы. В использовании программа проста – в поле «Исходный файл» перетаскиваем H264-видео, на вкладке «Форматы» выбираем предпочитаемый формат и жмем кнопку «Старт».
Онлайн-конвертеры H264 в AVI
Преобразовать записанное камерой наблюдения или видеорегистратором видео можно также с помощью онлайн-сервисов. Способ удобен тем, что не требует установки на компьютер сторонних программ и дополнительных кодеков.
Online-Convert.com
Популярный в Рунете онлайновый конвертер файлов. Нельзя сказать, чтобы он был заточен под работу только с видео, но формат H264 он поддерживает и это главное. Конвертирование может выполняться с настройками по умолчанию или с элементами редактирования. Сервис позволяет изменять размер видео, его битрейт, поддерживает удаление звуковой дорожки, обрезку, поворот по вертикали и горизонтали. Имеется также возможность выбора кодека. В качестве выходного формата можно выбрать AVI, MKV, MOV, MP4, 3GP, 3G2, FLV и MPEG.
Online-Converting.ru
Похожий по функционалу сервис, который также можно использовать как конвертер H264 в AVI онлайн. Поддерживает изменение размера, битрейта и FPS видео, кадрирование и реверс. Кроме AVI, загруженное видео можно преобразовать в GIF, WMV, OGG, MOV, MKV, MP4 и WEBM.
x264 или как кодировать видео
Проблема с кодированием видео и его сжатием его из гигабайтов в мегабайты, по-моему, всегда была актуальной. Если более менее профессиональные операторы, монтажники и т.д. уже не одну кошку съели на этой теме, то например любители и те, кто записывают видео с экрана своего монитора, порой долго чешут затылок, прежде чем добиться каких либо серьезных результатов. В итоге куча потерянного времени, никому не нужные гигабайты исходящего трафика для загрузки
домашнего видео на ютуб. Конечно, можно использовать в какой-то степени готовые решения в лице одной программы, и сжать видео буквально тремя кликами, но это не наш подход, когда абсолютно все шаги можно контролировать и влиять на них. Покопавшись в поиске, Хабр так и не выдал ничего похожего. Хотя возможно, что просто плохо поискал.
Сразу оговорюсь, что изначально статья не моя. Я наткнулся на неё, лет пять назад, когда встала задача что-то делать с записанными моментами из тогда любимой многими игры Battlefield 2, на популярном отечественном ресурсе мувимейкеров. Постепенно статья допиливалась и публиковалась, то там, то там. Не исключаю, что первоначально статья пришла из-за «бугра» и всего на всего была переведена на наш могучий язык.
Итак, кодек х264 пришел на смену таким монстрам своего времени как DivX и XviD и удачно положил обоих на лопатки. Для того, что бы добиться действительно впечатляющего результата, нам понадобится следующие вещи:
1. MeGUI — этим мы сжимаем само видео. Вернее, сжимает сам кодек, а это только GUI объединивший в себе десятки разных специализированных утилит.
2. Avisynth — фреймсервер. Если вдруг кто не знает, что это такое, то он является посредником между нашим не сжатым видео и кодеком.
3. VLC media player — Тут совсем все просто. Всеядный плеер, умеющий работать с потоковым видео. Достаточно популярный.
4. K-Lite Codec Pack — пакет все возможных кодеков, на все случаи жизни. Нам нужна сборка Mega.
Настоятельно рекомендую обновлять K-Lite Codec Pack, как минимум всегда перед сжатием видео. Это конечно не обязательно, но опыт подсказывает, что если вы столкнетесь с непонятными ошибками/косяками/глюками/etc то в 50%, а то и больше, обновление кодеков избавит вас от лишнего геморроя.
Кстати, MeGUI достаточно быстро и часто обновляется и дополняется. Скриншоты приведенные ниже, могут уже не соответствовать текущей версии, но это не страшно. Как правило, меняется расположение элементов, что то пододвинули вправо, что-то перенесли в другую закладку. Пропажа находится очень быстро, поэтому не пугайтесь.
Поехали. Устанавливаем Avisynth, а затем MeGUI. После того, как MeGUI обновится, идем в папку, где лежит наш опытный образец, и для удобства создаем там файл с расширением *.avs. Открываем блокнотом и пишем заветные строки:
Первая строка, подскажет MeGUI с каким файлом требуется работать. Вторая строка, указывает на используемую систему цветов.
Существует несколько различных способов представление цвета. Например: цветовое пространство YUV и RGB. В YUV цветовом пространстве есть один компонент, который представляет яркость (сигнал яркости) и два других компонента, которые представляют цвет (сигнал цветности). В то время как яркость передается со всеми деталями, некоторые детали в компонентах сигнала цветности могут быть удалены путем понижения разрешения отсчетов (фильтрация или усреднение), что может быть сделано несколькими способами (т.е. есть много форматов для сохранения изображения в цветовом пространстве YUV). YV12 — один из таких форматов (тут сигнал цветности общий для каждого блока пиксел 2×2), который поддерживается AviSynth.
У нас получился скрипт. Идем дальше. Открываем MeGUI и указываем месторасположение скрипта. Если скрипт AviSynth находится в той же папке где и ваше видео, то вторая строка заполнится автоматически.
Открываем настройки кодека, нажатием на кнопку Config, справа от Encoder settings. Ставим галочку, подтверждая, что нам действительно нужны расширенные настройки. Дальше нам остается поставить галочки в соответствии со скриншотами.
Нажимаем на кнопку queue и идем спать, пить кофе и т.д. в зависимости от предпочтений и мощностей ПК.
Хочу оговориться, что данный конфиг подходит для исходного видео 720p. Для 1080p нужно немного под редактировать конфиг:
Так же можно указать, сколько кодеру можно использовать ядер:
Что мы получаем в итоге. Я имел в наличии следующий видео-ролик:
Format: RGB
Codec ID: 0x00000000
Codec ID/Info: Basic Windows bitmap format. 1, 4 and 8 bpp versions are palettised. 16, 24 and 32bpp contain raw RGB samples
Duration: 3mn 42s
Bit rate: 663 Mbps
Width: 1 280 pixels
Height: 720 pixels
Display aspect ratio: 16:9
Frame rate: 29.970 fps
Bit depth: 8 bits
Bits/(Pixel*Frame): 24.000
Stream size: 17.2 GiB (100%)
После ожидания около 15-16 минут, я получил на выходе 184 Мб.
Если Хабру интересны подобные статьи на тематику сжатия видео, то я продолжу и поделюсь своим опытом. Если хотите меня поправить и указать на ошибку, то с радостью отвечу на всю критику и замечания.
Как воспроизводить файлы H.264 и H.265 на плеере VLC и конвертировать в MP4?
Как воспроизводить файлы H.264 и H.265 на плеере VLC и конвертировать в MP4?
Видеокодеки H.264 и H.265 сегодня являются наиболее распространенным для сжатия видео в системах видеонаблюдения. Но как воспроизводить сжатые этими кодеками файлы на компьютере под управлением Windows или Mac OS?
Проще и лучше всего для этого использовать видео проигрыватель VLC. Для этого нужно выполнить несколько действий:
Шаг 1. Загрузите последнюю версию VLC здесь и установите ее на свой компьютер.
Шаг 2. Запустите медиаплеер VLC. Перейдите в Инструменты, а затем нажмите Настройки.
Шаг 3. Отметьте параметр «Все», чтобы отобразить все настройки.
Шаг 4. Выберите «H264 video demuxer» или HEVC/H.265 video demuxerв модуле Demux. Затем нажмите Сохранить.
После этого сжатое одним из этих кодеков видео можно просматривать на ПК или ноутбуке пол любой операционной системой в медиаплеере VLC.
Кому проще увидеть один раз, чем 10 раз прочесть, предлагаем посмотреть видеоролик.
Если у вас возникают проблемы и вы не можете воспроизводить видео H.264 или H.265 на проигрывателе VLC, попробуйте следующие советы по устранению неполадок, которые могут помочь решить проблемы:
Как конвертировать файлы H.264 в MP4
Другой способ воспроизвести видео H.264 на VLC заключается в том, чтобы сначала преобразовать файлы H.264 или H.265 в формат MP4, а затем воспроизвести видео на медиаплеере VLC. Однако в настоящее время большинство производителей видеонаблюдения предоставляют встроенные конвертеры, поэтому при экспорте видео они уже находятся в формате MP4.
Для преобразования файлов H.264 / H.265 в MP4 нужно:
Шаг 3. Выберите « MP4 » в качестве формата видео, в который вы хотите преобразовать.
После того, как вы закончите преобразование файлов H.264 в формат MP4, вы сможете воспроизводить и просматривать видео в проигрывателе VLC.
Ну а мы напоминаем, что наша компания «Запишем всё» с 2010 года занимается монтажом, модернизацией и обслуживанием любых систем видеонаблюдения, а также видеодомофонов в Москве и Подмосковье.
Мы работаем быстро, качественно и по доступным ценам. Перечень услуг и цены на их вы можете посмотреть здесь.
Звоните +7 (499) 390-28-45 с 8-00 до 22-00 в любой день недели, в том числе и в выходные. Мы будем рады Вам помочь!
WebRTC на Android: как включить аппаратное кодирование на множестве устройств
Для видеозвонков в Badoo мы используем стандарт WebRTC и кодек H.264. Если верить документации, этот кодек должен без проблем работать на любых устройствах Android начиная с Android 5.0. Но на практике всё оказалось не совсем так. В этой статье я расскажу про особенности реализации аппаратного кодирования для кодека H.264 в WebRTC и о том, как заставить его работать на большем количестве устройств.
Почему именно H.264?
При соединении по WebRTC все устройства, участвующие в сеансе, передают различные параметры связи, в том числе видео- и аудиокодеки. Если устройства поддерживают несколько кодеков (например, VP8 и H.264), приоритетные для платформы кодеки указываются первыми. Эти данные используются на этапе согласования в WebRTC, после которого остаются только кодеки, поддерживаемые всеми устройствами. Пример таких данных с расшифровкой можно увидеть в этом документе.
В случае с видеозвонками при отсутствии на одном из устройств поддержки кодека H.264 оба устройства могут перейти, например, на кодек VP8, который не зависит от аппаратной реализации на устройстве. Но наше приложение доступно на самых разных гаджетах, в том числе на смартфонах предыдущих поколений. Поэтому для видеосвязи мы хотели по возможности использовать аппаратное кодирование: оно снижает нагрузку на процессор и не так сильно ест батарею, что критично для устаревших гаджетов. Поддержка аппаратного кодирования H.264 реализована на большом количестве устройств, в отличие от того же VP8.
Поддержка H.264 на Android
Если верить описанию поддержки форматов мультимедиа, декодирование H.264 Baseline Profile должно работать на всех Android-устройствах, а кодирование — начиная с Android 3.0. В Badoo мы поддерживаем устройства начиная с Android 5.0, так что у нас не должно было возникнуть проблем. Но всё оказалось не так просто: даже в гаджетах с пятой версией мы обнаружили большое количество особенностей.
С чем это может быть связано?
Как известно, при разработке нового устройства на Android любому производителю необходимо пройти набор тестов Compatibility Test Suite. Он запускается на подключённом к устройству ПК, а его результаты необходимо отправить в Google для подтверждения того, что устройство соответствует требованиям ОС Android указанной версии. Только после этого гаджет можно выпустить на рынок.
Нас в этом наборе тестов интересуют мультимедиа-тесты, а конкретнее — тесты на кодирование и декодирование видео. Я решил остановиться на тестах EncodeDecodeTest, MediaCodecTest, DecoderTest и EncoderTest, так как они присутствуют на всех версиях Android начиная с 4.3. График количества строк кода в этих тестах выглядит так:
До версии 4.3 большинства из этих тестов просто не существовало, и значительный их прирост пришёлся на версии 5 и 7. Поэтому можно говорить о том, что до версии Android 4.3 Google никак не проверяла соответствие устройств своей спецификации по кодированию и декодированию видео, а в версии 5.0 значительно улучшила эту проверку.
Казалось бы, это указывает на то, что начиная с версии 5.0 с кодированием всё должно быть в порядке. Но, учитывая предыдущий мой опыт работы с декодированием потокового видео на Android, я был уверен, что это не так. Достаточно было посмотреть на количество топиков про кодирование в Google-группе discuss-webrtc.
Искать подводные камни нам помогали исходные файлы WebRTC, которые находятся в свободном доступе. Рассмотрим их подробнее.
Поддержка H.264 в WebRTC
Тут есть метод с говорящим названием isHardwareSupportedInCurrentSdkH264:
Как мы видим, поддержка аппаратного кодирования на Android реализована только для чипсетов Qualcomm и Exynos. Почему же в стандартной реализации WebRTC нет поддержки других чипсетов? Вероятнее всего, это связано с особенностями реализации аппаратных кодеков производителей. И выявить эти особенности часто можно только на продакшене, поскольку найти те или иные устройства не всегда представляется возможным.
Все описания кодеков на устройстве хранятся в файле media_codecs.xml. Вот, например, этот файл для Pixel XL и для HUAWEI P8 lite. При получении списка кодеков с помощью метода getCodecInfos() объекта MediaCodecList этот файл парсится — и возвращаются кодеки, хранящиеся в нём. Эта операция и правильность заполнения этого файла производителем покрываются в CTS тестом MediaCodecListTest, который также увеличился со 160 строк кода в Android 4.3 до 740 строк в Android 10.
В Badoo мы поменяли код метода isHardwareSupportedInCurrentSdkH264, отказавшись от «белого» списка кодеков и заменив его «чёрным» списком префиксов программных кодеков, которые перечислены в WebRTC:
Но нельзя просто так взять и реализовать поддержку всех кодеков, не обращая внимания на особенности производителей. Из названий топиков, посвящённых аппаратному кодированию на Android в группе discuss-webrtc, можно понять, что в этом случае у нас точно возникнут ошибки. В основном они появляются на этапе конфигурации кодека.
Параметры конфигурации кодека
Инициализация кодека для кодирования выглядит так:
В некоторых из этих параметров легко допустить ошибку, что вызовет исключение при конфигурации кодека и нарушит работу приложения. Также при работе с кодеком может понадобиться регулировать его битрейт в зависимости от различных факторов, так как сам кодек делает это неправильно. За это в WebRTC отвечает класс BaseBitrateAdjuster, у которого есть два наследника:
Разрешение потока
После получения для кодека объекта MediaCodecInfo можно изучить кодек подробнее, получив его возможности в классе CodecCapabilities. Из них можно узнать, поддерживает ли кодек выбранные разрешение и частоту кадров. Если он поддерживает эти параметры, их можно устанавливать безопасно.
Однако иногда это правило не работает. Мы столкнулись с тем, что кодеки с префиксом “OMX.MARVELL.” кодировали неправильно, показывая зелёные полосы по краям экрана, если разрешение потока отличалось от 4:3. При этом сам кодек утверждал, что выбранные разрешение и частота кадров поддерживаются.
Режим битрейта
Стандартный режим для всех видеокодеков — постоянный битрейт. Однако однажды нам пришлось использовать переменный битрейт:
Произошло это на устройстве Lenovo A1000 с чипсетом компании Spreadtrum (теперь Unisoc), начинающимся с префикса “OMX.sprd.”. Поиск в Интернете привёл нас к посту шестилетней давности о Firefox OS, описывающему эту проблему и способ её решения.
Цветовой формат
При использовании кодека в режиме байт-буферов необходимо выбрать правильный формат. Обычно это делается с помощью функции следующего вида:
Грубо говоря, всегда выбирается первый из поддерживаемых цветовых форматов.
Однако в случае с кодеками HUAWEI, начинающимися с префиксов «OMX.IMG.TOPAZ.», «OMX.hisi.» и «OMX.k3.», это не работало, и после долгих поисков мы нашли решение: вне зависимости от того, какой формат возвращают эти кодеки, необходимо использовать формат COLOR_FormatYUV420SemiPlanar. Разобраться в этом нам помог тред на одном китайском форуме.
Регулировка битрейта
Стандартный код WebRTC содержит следующее:
Как видно из этого кода, для всех чипсетов, кроме Exynos, регулировка битрейта выключена. Но это относится только к Qualcomm, так как в стандартном коде поддерживаются только Exynos и Qualcomm. Поэкспериментировав с различными значениями этой настройки, а также поискав в Интернете, мы выяснили, что для кодеков с префиксами «OMX.MTK.» её тоже нужно включить. Также необходимо сделать это для кодеков HUAWEI, начинающихся с префикса «OMX.IMG.TOPAZ.», «OMX.hisi.» или «OMX.k3.». Это связано с тем, что эти кодеки не используют временные метки кадров для регулировки битрейта, считая, что все кадры приходят с одинаковой частотой, установленной при конфигурации кодека.
В завершение приведу список кодеков, которые мы получили для устройств на Android 5.0 и 5.1. Они были нам интересны в первую очередь потому, что на более новых версиях Android ситуация улучшается и нестандартных кодеков становится всё меньше.
Это видно на графике ниже. Шкала логарифмическая, чтобы лучше показать редкие случаи.
Как мы видим, у большинства устройств были чипсеты Spreadtrum, MediaTek, HUAWEI и MARVELL — поэтому наши изменения помогли включить аппаратное кодирование на этих гаджетах.
Результат
Хотя мы и предполагали, что на некоторых устройствах при работе с H.264 будут возникать проблемы, Android опять смог нас удивить. Как мы видим из статистики пользователей Badoo, на руках у пользователей ещё достаточно много устройств 2014–2016 года выпуска, которые они не хотят или не могут обновлять. И хотя ситуация с выходом обновлений Android для новых устройств уже гораздо лучше, чем несколько лет назад, доля гаджетов предыдущего поколения сокращается довольно медленно и поддерживать их придётся ещё достаточно долго.
Сейчас WebRTC активно развивается Google из-за его использования в проекте Stadia (вот видео с подробностями на эту тему), поэтому он будет становиться всё лучше и лучше и, скорее всего, станет стандартом для реализации видеосвязи. Надеюсь, что эта статья поможет вам понять особенности работы с H.264 в WebRTC и использовать это в своих проектах.