У меня есть проект (ASP.NET Core, в Linux), где находятся несколько задач, связанных с преобразованием и извлечением кадров из видеофайла.
Я подумал о двух возможных вариантах:
ffmpeg
P/Invoke
с библиотекой libavcodec
и другими, которые ffmpeg
используетВторой вариант - намного сложнее и может быть очень непрактичным, потому что он напоминает мне разработку новой оболочки/библиотеки вместо использования готовых продуктов.
Я сделал googling, но нет неплохих проектов для платформы С#/ASP.NET Core на платформе Linux. Есть несколько полезных для C++ и Python, но НЕ для С# в Linux/.NET Core.
Я решил посмотреть на первый вариант, который, я полагаю, был бы более простым и практичным. Но есть некоторые слабые места, которые могут вызвать множество проблем. Мы понимаем (я полагаю), что с использованием 1-го варианта конечный разработчик должен использовать процесс forking. Таким образом, возможны проблемы с процессом бездействия и другими возможными проблемами...
Я спрашиваю о вашей практике, потому что это мой первый опыт на платформе Linux с преобразованием/выборкой видео с использованием С#. Я использовал библиотеку Expression Encoder.NET на платформе Windows, но это другая история, и это не имеет смысла, прямо сейчас.
Может быть, есть и другие варианты, которые я сейчас не вижу. Мне не нравится первый вариант из-за возможных необработанных исключений, потому что ffmpeg
с такой ролью становится черным ящиком для бэкэнда ASP.NET Core.
У меня была та же проблема, и я создал собственную минимальную оболочку FFMPEG
на основе FFmpeg.AutoGen
. Wrapper хорошо работает на linux, но этот путь требует больше времени, чтобы FFMPEG
как FFMPEG
libs
Некоторое время назад для тестирования я создал также первый вариант с помощью new Process()
. Великая вещь таким образом - простота
Process process = new Process();
process.StartInfo.FileName = "ffmpeg.exe";
process.StartInfo.Arguments = "example arguments";
process.Start();
Вы должны решить сами, но помните - вызывать функции C на С# - это удивительная вещь