LINUX.ORG.RU

Целесообразность разработка собственного кодека для ffmpeg

 


0

1

Есть типичная и хорошо известная проблема - обеспечить взаимодействие различных систем. Создать один формат на все времена - утопия. Более того, даже в процессе разработки новой версии системы формат может измениться и когда у тебя уже есть тесты отказаться от старых форматов не всегда просто. В результате имеем кучу форматов. В ходе размышлений как все это дело упростить пришел к идее которая в том же ffmpeg и иже с ним называется контейнеры и кодеки, планирую сделать что-то вроде этого. Но потом возникла мысль - у меня данные все равно нужно визуализировать и прокручивать по времени, чтобы смотреть как изменилось состояние системы и возникла мысль, а что если сделать свой кодек для того же ffmpeg который данные будет рендерить в картинку? Тогда данные можно будет воспроизводить в любом проигрывателе (при установке кодека, конечно), что с точки зрения заказчика будет несомненным плюсом. Плюс с помощью кодеков я планирую решать проблему разных форматов и версий форматов.

Главный вопрос - насколько это глупая идея? Может быть проще просто сделать свой упрощенный adhoc вариант и не связываться с чужим кодом?

Уточняющие вопросы:

  1. сложно ли добавить кодек к ffmpeg? В первую очередь интересует трудоемкость по времени, абстрактно - навыков разобраться и реализовать у меня хватит, но если там просто много разного бойлер плейта, то тратить на это время я бы не хотел, тогда лучше adhoc вариант.
  2. какой контейнер из существующих лучше использовать? я смотрю на matroska, но это просто выбор пальцем в небо
  3. сложно ли добавить свой контейнер? хотя надеюсь что это лишнее
★★

Последнее исправление: yetanother (всего исправлений: 2)

сложно ли добавить кодек к ffmpeg?

Никто не добавляет «свой» кодек в ffmpeg. Это ffmpeg-овцы добавляют кодеки в свой проект, если считают нужным. Разработчики кодеков пилят их независимо и без оглядки на ffmpeg. См. примеры:

Deleted
()
Ответ на: комментарий от Deleted

Да, неправильно выразился. Я не имел в виду добавление в ffmpeg, а имел в виду создания кодека, совместимого с ffmpeg.

За ссылки спасибо, нашел в качестве примера еще вот FFmpeg codec HOWTO

yetanother ★★
() автор топика

Не понятно, какие данные будут засовываться в видеофайл??? Статичные картинки со SCADA-подобной системы? Которые меняются через некоторые промежутки времени?

В чем необходимость кодека, из темы не очевидно

Или идея писать данные какие-то текстовые или даже бинарные, а потом кодек из будет типа картинку воссоздавать? Если так, идея интересная

anonymous
()

Современные кодеки - это до смешного сложные системы. Проще использовать H.264, H.265, AV1.

RazrFalcon ★★★★★
()
Ответ на: комментарий от anonymous

Не понятно, какие данные будут засовываться в видеофайл??? Статичные картинки со SCADA-подобной системы? Которые меняются через некоторые промежутки времени?

Типа того, но не картинки, а технологическая информация. И есть задача их воспроизводить с прокруткой по времени, доступом к произвольному кадру как в медиаплейере

Или идея писать данные какие-то текстовые или даже бинарные, а потом кодек из будет типа картинку воссоздавать? Если так, идея интересная

Да, именно это я имею в виду.

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

yetanother ★★
() автор топика

Если на чистоту, то FFMPEG раздутое от кодеков гумно, каких поискать. Так что лучше выкиньте из него пару кодеков и будет збс. Почему такие штуки делают монолитными, только одному Анону известно.

anonymous
()
Ответ на: комментарий от anonymous

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

yetanother ★★
() автор топика

какой то бред
о каких системах идет речь ? и о каких форматах идет речь ?
ffmpeg уже может выступать ой прослойкой которая переводит один формат в другой
а она их поддерживает в достаточном количестве
так в чем вопрос ?

anonymous
()

Я или кодек, или контейнер писал для ffmpeg. Разобрался. Правда, это было лет так ацать назад.

mv ★★★★★
()

нецелесообразно.

Ты путаешь кодек, контейнер, механизм воспроизведения.

Сначала разберись в принципиальной разнице между h264 и matroska, потом будет понятнее.

max_lapshin ★★★★★
()
Ответ на: комментарий от anonymous

какой то бред

Ты же разобрался, тебе виднее ))

о каких системах идет речь ? и о каких форматах идет речь ?

неважно какие системы. есть проприетарные, внутренние форматы.

ffmpeg уже может выступать ой прослойкой которая переводит один формат в другой
а она их поддерживает в достаточном количестве

эти форматы, естественно, ffmpeg не поддерживает, поскольку они внутренние

так в чем вопрос ?

Что будет с рублем? Стоит ли брать ffmpeg за основу и на ее базе сделать решение или просто взять оттуда идею контейнеров и кодеков и сделать кастомное, полностью свое решение (как это сделано сейчас, но текущей функциональности не хватает).

yetanother ★★
() автор топика
Ответ на: комментарий от boowai

Ты переизобретаешь контнйнеры adobe: pdf, flash, air. Их уже заменяет html5.

Если вкратце - то не переизобретаю. Это разные сущности. Имхо, у меня уровень ниже.

yetanother ★★
() автор топика
Ответ на: комментарий от chenbr0

бабу тебе нужно, барин

Баба всегда нужна. И главное - регулярно. Но с этим я вопрос уже закрыл.

yetanother ★★
() автор топика
Ответ на: комментарий от mv

Я или кодек, или контейнер писал для ffmpeg. Разобрался. Правда, это было лет так ацать назад.

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

yetanother ★★
() автор топика
Ответ на: комментарий от max_lapshin

Сначала разберись в принципиальной разнице между h264 и matroska, потом будет понятнее.

Разницу между кодеком и контейнером я понимаю. Именно это меня и привлекло. Мне как раз и нужно иметь возможность одну и ту же информацию по сути хранить в разных форматах, которые ориентированы на разные задачи. Чтобы я мог одну и ту же информацию преобразовать в формат удобный для передачи по тонкому каналу с допустимым уровнем потери качества и в то же время ее же передать при необходимости по толстому каналу без потерь. А также в архивных целях хранить с максимальным сжатием и без потерь. И еще возможно для целей редактирования нужен будет формат. Все это в одном формате не реализовать, естественно. Да и виды/типы информации постоянно добавляются/удаляются. В общем аналогию я увидел у медиафреймворков, в частности у ffmpeg. Плюс у меня есть задача визуализации этой информации. Отсюда вопрос и возник - возможно стоит сделать мюксер/демюксер + кодек, которые будут из контейнера извлекать данные в моем формате и превращать их в кадры, которые можно будет воспроизводить штатными средствами ОС. Но я уже склоняюсь к варианту собственного решения, а в ffmpeg только идею подсмотреть. Так что вопрос можно считать закрытым.

yetanother ★★
() автор топика

Посмотри ещё https://www.paraview.org/Wiki/ParaView/Data_formats и https://lorensen.github.io/VTKExamples/site/VTKFileFormats/

Там перечислены форматы, используемые для визуализации результатов компьютерного моделирования. Они включают в себя описание геометрических объектов с привязанными к ним числовыми значениями и с развёрткой по времени.

cdslow ★★
()
Ответ на: комментарий от yetanother

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

Обычный open source: без документации и стабильного API, но по образцу и подобию можно сделать. Никаких особых впечатлений не отложилось, или они за 13 лет стёрлись ;)

mv ★★★★★
()
Ответ на: комментарий от yetanother

По-моему тебе просто нужно сделать визуализацию данных, записать ее на видео с помощью ffmpeg и передавать.

goingUp ★★★★★
()
Ответ на: комментарий от cdslow

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

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

yetanother ★★
() автор топика

Исходи из того, что ffmpeg монолитен. Это не фреймворк. Напишешь кодек, фильтр, etc – оно останется только в твоём форке ffmpeg, пока не отправишь патч разрабам, а там уж как решат.

Thetan ★★★
()
Ответ на: комментарий от max_lapshin

Да нет у меня никакой боли. h264 это кодек, mkv это контейнер. И у того, и у того есть свой формат, под форматом я понимаю как данные и в каком представлении расположены в памяти/файле.

У меня мысль была использовать готовый контейнер и в него помещать свой поток данных с помощью своего кастомного кодека.

yetanother ★★
() автор топика
Ответ на: комментарий от mv

Обычный open source: без документации и стабильного API, но по образцу и подобию можно сделать. Никаких особых впечатлений не отложилось, или они за 13 лет стёрлись ;)

Понятно)

yetanother ★★
() автор топика
Ответ на: комментарий от goingUp

По-моему тебе просто нужно сделать визуализацию данных, записать ее на видео с помощью ffmpeg и передавать.

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

yetanother ★★
() автор топика
Ответ на: комментарий от Thetan

Исходи из того, что ffmpeg монолитен. Это не фреймворк. Напишешь кодек, фильтр, etc – оно останется только в твоём форке ffmpeg, пока не отправишь патч разрабам, а там уж как решат.

Да мне это для внутренней кухни нужно, свой форк более чем достаточное решение в принципе. Но я уже отказался от идеи использовать ffmpeg, свое кастомное решение буду развивать, это будет эффективнее.

yetanother ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.