libx265 - кодируем видео в самом современном формате
Запись от castaway размещена 14.11.2014 в 21:14
Показов 1836
Комментарии 2
Метки c++, h265, libx265, video encoding, с++
|
В данной статье я опишу простой пример использования библиотеки libx265, которая является реализацией нового стандарта кодирования видео H265/HEVC, пришедшему на замену "относительно" старого H264. Я приведу простейший пример использования библиотеки libx265, остальные возможности останутся "за кадром". Сразу оговорюсь - комментариев в коде мало. Я не стал ими разбрасываться и увеличивать размер примера, т.к. на самом деле там всё очень просто и понятно. Достаточно иметь при себе небольшие знания английского языка и немного логики. К тому же, все непонятные ситуации можно обсудить в комментариях. Итак, я реализовал простой класс для работы с кодировщиком, который имеет четыре метода вместе с конструктором и деструктором. В конструкторе мы задаём параметры потока и callback-функцию для вывода кодированной информации. Метод bool is_valid() позволяет узнать, успешно ли был инициализирован кодировщик. Я специально не использую исключения, не спрашивайте меня почему. ...хотя, если хотите то спросите. Метод bool encode( uint8_t * pY, uint8_t * pU, uint8_t * pV ) производит кодирование 3-х планов - Y, U и V, которые передаются в метод в виде указателей на данные. Как раз он и вызывает нашу callback-функцию. Особенности реализации: * в классе жёстко забит формат входящей картинки I420 * в классе жёстко забита глубина цвета 8 бит * в классе жёстко забит контроль качества CRF (Constant Rate Factor), который варьируется от 0 до 1 включительно, где 0 - лучшее качество, 1 - худшее. Это значение указывается в конструкторе класса. * в классе жёстко забиты предустановки: preset - "normal", tune - "zerolatency" * разрешение видео задаётся в конструкторе * FPS задаётся в конструкторе ** следующий код не претендует на звание "самого лучшего враппера", т.к. был написан целиком и полностью за вчерашний день. Обработка ошибок так же не на самом высоком уровне. В качестве примера я кодирую изображение чёрно-белой шахматной доски, которая двигается вверх и влево: - размер клеток - 16 пикселей - размер изображения - 640x480 пикселей - показатель качества - 0.5 - количество кадров - 100 Внимание! Выходной файл (out.raw) записывается "сырым", т.е. без контейнера, только заголовок формата видео, после чего идут закодированные фреймы. В данный момент выходной файл я могу просмотреть только через FFMPEG, который успешно его читает и показывает. Ссылка на предкомпилированный FFMPEG для ОС Windows находится в конце статьи.
Zeranoe's FFmpeg Builds Home Page - http://ffmpeg.zeranoe.com/builds/ | |||||
Метки c++, h265, libx265, video encoding, с++
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
-
Запись от Crast размещена 13.09.2015 в 09:46
-
Что ужасного?
Ради одного кодека "тянуть" FFMPEG неразумно.Запись от castaway размещена 13.09.2015 в 14:19


