Pull to refresh

Comments 6

итог. cli проще и понятней, чем портянка, не требует дополнительной компиляции и тиражирования при изменении/расширении версии и параметров.

Для однократного применения - да.

для многократного применения оберни в bash скрипт и будет счастье

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

А зачем сразу делать вторую статью о том же самом? (прошлая https://habr.com/ru/articles/901132/)?

По сути вопроса, мотивация завернуть FFMpeg в Rust понятна. Как учебный проект по изучению Rust, FFI, и FFMpeg, вполне имеет смысл. Но есть фундаментальный изъян в подходе. FFMpeg растет стихийно, и за года развития превратился в монолитный комбайн, чем и решает вообще все возникающие проблемы. При этом наличие libav* библиотек в составе, не предполагает их использование во внешних программах как есть без приличного объема логики, реализованной в самом ffmpeg/ffprobe/ffplay инструменте. Точкой входа для траскодирования всего во все с сотней опций является именно исполняемый файл, который склеивает библиотеки в полезный инструмент. И FFI - будучи лишь пустой абстракцией - не уменьшает сложность использования, а лишь увеличивает. Большая часть требуемых операций при транскодировании сосредоточена в транскодирующем конвейере, который как раз в приложении и реализован. Зачем мне брать вашу библиотеку и городить еще один огород конвейера, если я могу сразу написать 200 опций в командлайн?

При использовании FFMpeg функционала в своем приложении не хватает немного другой функции - точки интеграции своего компонента(на любом удобном языке) в транскодирующий конвейер. Другими словами, мой проект может обладать уникальным функционалом по работе с сжатым или несжатым медиаконтентом. Я не хочу заморачиваться с поддержкой отдельных форматов и протоколов и хотел бы взять FFMpeg и расширить его конвейер. Интеграция напрямую - это C, легаси, и 15 лет стихийной разработки. В то же время, FFMpeg позволяет подключить внешние источники такие как Unix-сокеты, пайпы, сырые байтовые массивы и прочее. Было бы неплохо иметь нативные для конкретного языка абстракции, которые будут до и после моего компонента поднимать например инстансы FFMpeg, сматывать их не на уровне конвейера, а на уровне медиапотока, и предлагать вменяемую абстракцию в мой компонент.

Конкретный пример на злобу дня: Yolo детектор объектов в видео. FFMpeg в пайп-> Python из пайпа с метаданными в пайп -> FFMpeg из пайпа. По типу https://github.com/PyAV-Org/PyAV/blob/main/examples/numpy/generate_video_with_pts.py . Хотя используемые там абстракции мне не нравятся, так как они напрямую унаследованы от низкоуровнего FFMpeg API.

Спасибо за ваш подробный комментарий и ценные предложения! Ваши замечания очень полезны и помогают мне лучше понять направление развития ez-ffmpeg.

По поводу схожести статей, вы правы, новая статья частично пересекается с предыдущей (https://habr.com/ru/articles/901132/). Я хотел показать новые сценарии использования, но понимаю, что это может показаться повторением. В будущем постараюсь делать акцент на уникальном контенте.

Ваша точка зрения о сложности FFmpeg верна: это мощный инструмент, где командная строка даёт полный контроль. Моя цель с ez-ffmpeg — упростить типичные задачи (например, конвертацию или извлечение аудио) для Rust-разработчиков, снижая порог входа. Но я согласен, что для сложных сценариев командная строка остаётся предпочтительной.

Ваше предложение интегрировать свои компоненты в конвейер FFmpeg очень вдохновляет! Хочу отметить, что ez-ffmpeg уже поддерживает:

  1. Все способы ввода FFmpeg, включая пайпы, для гибкой работы с данными.

  2. Пользовательские ввод и вывод, включая данные в памяти или через приватные протоколы (https://github.com/YeautyYE/ez-ffmpeg/tree/main/examples/custom_input_output).

  3. Пользовательские фильтры на Rust, аналогично PyAV (https://github.com/YeautyYE/ez-ffmpeg/tree/main/examples/custom_volume_filter).

Я пока не очень знаком с YOLO, но идея интеграции через пайпы выглядит перспективной! Если у вас есть опыт или конкретные предложения, как реализовать такую функциональность в ez-ffmpeg, буду рад вашим идеям или совместной работе над этим.

Спасибо ещё раз! Ваши идеи помогают улучшать проект. Приглашаю продолжить диалог и, возможно, вместе доработать ez-ffmpeg.

Sign up to leave a comment.

Articles