Рубрика «ffmpeg»

Наверное, вы слышали про технологию Яндекса DeepHD, с помощью которой они как-то раз улучшили качество советских мультфильмов. Увы, в публичном доступе ее еще нет, а у нас, рядовых программистов, вряд ли найдутся силы написать свое решение. Но лично мне, как обладателю Retina-дислея (2880х1800), недавно очень захотелось посмотреть «Рика и Морти». Какого же было мое разочарование, когда я увидел, как мыльно на этом экране выглядит 1080р, в котором существуют оригиналы этого мультсериала! (это прекрасное качество и обычно его вполне достаточно, но поверьте, ретина так устроена, что анимация с ее четкими линиями в 1080р выглядит мыльновато, словно 480р на FHD-мониторе)

Я твердо решил, что хочу увидеть этот мультсериал в 4К, хотя и совершенно не умею писать нейросети. Однако решение было найдено! Любопытно, что нам даже не придется писать код, понадобится лишь ~100 ГБ места на диске и немного терпения. А результат — четкое изображение в 4К, которые выглядит достойнее, чем любая интерполяция.

image
Читать полностью »

Своя видео-платформа — ffmpeg и качество кодирования видео. Part 2 - 1
Lenna любит хорошо выглядеть — фотомодель в конце концов. Ходят легенды, что добавление её в заголовок статьи, связанной с обработкой визуальных данных даёт +5 к шансу на плюсы.

Продолжаю раскрывать особенности работы видео сервисов. Сегодня заметки про параметры кодирования и их выбор.
Первая часть

Большинство кодеков предлагают достаточно сбалансированные значения по умолчанию, позволяя получить нормальный результат без долгого подбора параметров. Однако, когда речь идёт о большом архиве видеоматериала, об ограничениях на битрейт, соображениях совместимости с оборудованием клиента и разумном желании сохранить качество оригинала, всё становится интереснее.
К сожалению, волшебной кнопки «скодировать совсем хорошо» не предусмотрено. Как и аналога caniuse для параметров кодирования. Придётся разбираться в особенностях работы кодеков.
Читать полностью »

image

На заре машинного обучения большинство решений выглядели очень странно, обособленно и необычно. Сегодня множество ML алгоритмов уже выстраиваются в привычный для программиста набор фреймворков и тулкитов, с которыми можно работать, не вдаваясь в детали их реализации.

К слову, я противник такого поверхностного подхода, но для своих коллег хотел бы показать, что эта отрасль движется семимильными шагами и нет ничего сложного, чтобы применять ее наработки в продакшен проектах.

Для примера я покажу, как можно помочь пользователю найти нужный видеоматериал среди сотен других в нашем сервисе документооборота.

В моем проекте пользователи создают и обмениваются сотнями различных материалов: текстом, картинками, видеороликами, статьями, документами в различных форматах.

Поиск по документам представляется достаточно просто. Но что делать с поиском по мультимедиа контенту? Для полноценного сервиса пользователя надо обязать заполнить описание, дать название видеоролику или картинке, не помешает несколько тегов. К сожалению, далеко не все хотят тратить время на подобные улучшения контента. Обычно пользователь загружает ссылку на youtube, сообщает что это новое видео и нажимает сохранить. Что же делать сервису с таким “серым” контентом. Первая идея — спросить у YouTube? Но YouTube тоже наполняют пользователи (часто это один и тот же пользователь). Часто видеоматериал может быть и не с Youtube сервиса.
Так мне пришла идея научить наш сервис “слушать” видеоролик и самостоятельно “понимать”, о чем он.
Читать полностью »

Я уверен, что много разработчиков сталкивались с проблемой когда надо максимально быстро воспроизводить огромные видео файлы (4 GB+) на Вашем сайте. Я тоже люблю посмотреть фильмы в онлайн но мне так надоедает ждать, когда он про грузится перед просмотром.

Столкнулся с интересной проблемой а именно с video stream в браузере Internet Explorer 11 который все так обожают. Теперь перейдем к деталям.

Продукт написан на Laravel 5.3, а для транскодирувания видео файла мы используем ffmpeg (создание preview, thumbnail нужных нам размеров, качества + watermark).

Первое на что надо обратить внимание — это атомы. Видео состоит с атомов, в которых храниться информация об субтитрах, главах, видео и аудио и тд… Но особое внимание надо обратить на moov атом. В нем храниться информация как воспроизвести видео, сколько кадров в секунду, какие размеры. Этот атом может лежать где угодно. Если видео маленькое, оно быстро загрузится, в результате уже есть moov атом и система знает как воспроизвести видео.

Но а как же быть если у нас огромные видео файлы? Нужно настроить video stream (потоковую передачу видео файла).
Простыми словами работа происходит так, система делает первый запрос и получает начало видео файла и пытается там найти moov атом, если его нет — делает второй запрос с конца. В конце концов moov атом найден и происходит третий запрос на получение нужного кусочка видео файла для того что бы воспроизвести видео.
Читать полностью »

Тянем ролик с YouTube и раздаем по WebRTC в реалтайме - 1

Задача следующая. Провести совместный просмотр ролика с YouTube в реальном времени несколькими пользователями. Зрители должны получать видео одновременно, с минимальной задержкой.Читать полностью »

Внезапно ваш диск под завязку забит фотографиями и видео, а впереди новые поездки. Что делать, покупать новый, арендовать дисковое пространство на облаке, или может лучше сжать видео файлы через ffmpeg?

Укрощаем мультимедиа с помощью ffmpeg - 1

Впрочем зачем себя ограничивать экономией дискового пространства? Предлагаю узнать удивительные возможности обработки фотографий, аудио и видео данных, утилитами командной строки.

Читать полностью »

image

Добрый день, уважаемые жители хаба Asterisk.

Не знаю, как вам, а мне в последнее время безумно интересно применение Asterisk не в качестве стандартной АТС.

В предыдущем посте Asterisk исполнял обязанности охранника на парковке. На этот раз Asterisk в моей конфигурации проигрывал фоновую музыку в торговом павильоне и в случае возникновения экстренной ситуации (или при необходимости сделать какое-то объявление) выступал в роли системы оповещения.

Подробности под катом.

Читать полностью »

Появилась необходимость показывать видео с камеры на сайте в режиме онлайн. Виделось несколько вариантов (дополню вариантами из комментов, если будут):

  • Дать доступ к камере. Просто доступ к камере давать не стоит по соображениям безопасности. Камера ляжет уже при очень небольшой нагрузке.
  • Коммерческая услуга. Мы им доступ к камере и деньги, они нам ссылку для размещения на сайте. Они же решают проблему совместимости камеры и браузеров пользователей, производительности канала и доступности
  • На своих мощностях. Между пользователем и камерой ставится нечто, что отвечает за совместимость с браузерами, производительность и доступность. Проблемы решаем сами.

Этот вариант рассмотрим ниже. Т.к. "flash умер" или "flash вот-вот умрет", вариант с размещением flash плейера на сайте не рассматривался. Тернистый путь поисков решений в интернетах не привел к готовому решению. Пришлось изобрести велосипед.

Подробнее изобретения под катом.
Читать полностью »

Вышел свободный видеотранскодер HandBrake 1.0.0 - 1

После почти 13 лет группа разработчиков выпустила первую версию open source видеотранскодера HandBrake 1.0.0. HandBrake — популярная бесплатная программа для конвертирования и сжатия видео. Кроссплатформенное приложение работает под Linux, macOS и Windows с графическим интерфейсом или из командной строки. Пожалуй, это лучшая программа в своём классе. Сложно найти хотя бы один видеотранскодер близкого качества, функциональности и с открытым кодом. Можно сказать, что это идеальная графическая оболочка для ffmpeg (кстати, команды ffmpeg можно изучать по логам HandBrake, это лучше мануала).
Читать полностью »

Всем доброго времени суток! Появилась тут как-то задача: воспроизвести RTSP-видеопоток с камеры. Т.к. я в достаточной мере знаком с API OpenCV, было принято решение использовать именно его. Для захвата видеопотока в OpenCV используется класс VideoCapture. К сожалению, сеть достаточно часто у нас обрывается, и проблема эта на моем уровне не решается, поэтому необходимым условием комфортной работы стала достаточно быстрая реакция на падение видеопотока — стандартный таймаут на подключение и ожидание следующего кадра составляет 30 секунд, причем внутри VideoCapture вызовы open() и read() блокирующие, что заставляет писать вокруг простого на самом-то деле кода различные обертки вроде вызова их в отдельном потоке и ожидания получения результата в асинхронном режиме. Естественно, никакой радости по этому поводу я не испытывал — все это ресурсы, которые в программе должны были уходить на иные цели, не говоря уже об усложнении кода. Было принято решение: изменить стандартный таймаут, либо добавить возможность его внешней установки. Получился достаточно грязный хак, который, впрочем, может кому-то пригодиться. Возможно, если есть способ лучше — если таковой имеется — очень бы хотелось его узнать, так что прошу комментариев. В идеале — может быть, среди читателей Хабра найдутся разработчики OpenCV, которые таки обратят внимание на данную проблему. Целью было заставить код «работать, как надо, под Windows x64».

Кому интересно — прошу под кат.
Читать полностью »