Рабочий способ создания видео из изображений на C#

StackOverflow https://stackoverflow.com/questions/539257

  •  22-08-2019
  •  | 
  •  

Вопрос

Есть ли у кого-нибудь известный надежный способ создания видео из серии файлов изображений?Прежде чем вы отругаете меня за то, что я не искал ответ перед публикацией вопроса, и прежде чем отправить простое сообщение типа «используйте FFMPEG», прочитайте остальную часть этого сообщения.

Я пытаюсь создать видео, не имеет особого значения, какой формат, если он широко поддерживается, из серии изображений (.jpg, .bmp и т. д.).Моя платформа — Windows Server 2008, 64-разрядная версия.Если я могу создать видео из своей программы на C#, это здорово, но я не прочь записать серию файлов изображений в каталог, а затем запустить внешнюю программу для создания видео из этих изображений.

Единственными ограничениями являются:он должен работать в моей системе Windows Server 2008 и быть доступным для сценариев.То есть никаких программ с графическим интерфейсом, требующих вмешательства оператора.

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

FFMPEG выглядит отличной программой.Возможно, это так, в Linux.Две загруженные мной сборки Windows не работают.Учитывая эту командную строку:

  ffmpeg -r 1 -f image2 -i jpeg\*.jpg video.avi

Одна из сборок считывает образы, а затем вылетает из-за предотвращения выполнения данных.Другой читает первый файл, а затем выдает сообщение об ошибке «невозможно найти подходящий кодек для файла jpeg/image2.jpg».Полезно, это.В любом случае, FFMPEG выглядит неэффективно под Windows.

Рекомендуется один ответ на предыдущее сообщение Сплайсер .Это выглядит как довольно хороший код.Я скомпилировал образцы и попытался запустить, но получил загадочное сообщение об ошибке о том, что файл не найден.Похоже, класс COM не зарегистрирован.Полагаю, мне нужно что-то установить (возможно, DirectShow, хотя я думал, что оно уже установлено?).В зависимости от того, что требуется, мне может быть сложно обосновать его установку на сервере.("Что?Зачем тебе это нужно на сервере?")

Другой ответ предполагал АвиФайл библиотека из Code Project.Это выглядит достаточно просто:оболочка подсистемы Windows AviFile.За исключением того, что файлы AVI, создаваемые пакетом, содержат все кадры, но при воспроизведении AVI в проигрывателе Windows Media отображается только первый кадр.Ну и еще при попытке создать сжатое видео программа выдает исключение.

Итак, мне интересно, есть ли хороший и надежный способ сделать то, что я хочу:в системе Windows создайте AVI или другой распространенный формат видеофайла из серии изображений либо через .NET API, либо с помощью внешней программы.Любая помощь?

Это было полезно?

Решение

Поработав некоторое время и взглянув на x264 и VideoLan, я вернулся к Splicer.Оказывается, загадочное сообщение об ошибке возникло из-за ошибки в моем коде.

Похоже, Splicer сделает то, что я хочу:программно создавать видео из серии изображений.

Спасибо всем, кто ответил.

Другие советы

Вы можете использовать VideoLan, и я бы порекомендовал его.

У меня был непосредственный опыт работы с приложением C#, когда VideoLan выполнял следующие две вещи:

  1. Встраивание средства просмотра VLC в мое приложение на C# (для средства просмотра VLC есть 3-4 «обертки» C#).
  2. Использование vlc.exe в отдельном процессе, отправив ему аргументы командной строки.

Тот факт, что VideoLan имеет интерфейс командной строки, — это здорово.А VLC поддерживает опцию командной строки, которая отключает любой визуальный элемент;поэтому графический интерфейс VLC не появляется, как и окно командной строки.Таким образом, в приложении C# вы можете передать работу, связанную с видео, клиенту VLC.В C# есть класс Process, который может управлять вашими экземплярами vlc.exe за вас.В конечном итоге это довольно аккуратное решение.

Обработка видео в Windows (кодирование и воспроизведение) — настоящая трясина.И .NET вам вообще не поможет - вы всегда будете либо использовать собственные API-интерфейсы PInvoking/COM-взаимодействия, либо использовать оболочку .NET, созданную кем-то другим, чтобы делать то же самое.

В любом случае, я не могу сказать, что использовал его, но, похоже, хорошей ставкой будет библиотека x264, входящая в состав проекта videolan.Это дает вам автономную библиотеку C, которую вы можете PInvoke, и вам не придется беспокоиться об установке и мусоре DirectShow на вашем сервере.Он будет генерировать видео в формате H.264, которое, насколько я понимаю, можно воспроизводить во Flash.

я использовал плеерMencoder для создания AVI (с кодеками msmpeg4/mp3, которые по умолчанию читаются с помощью проигрывателя Windows Media) из файлов TGA в Linux следующим образом:

mencoder mf://*.tga -mf fps=25:type=tga \
  -audiofile /tmp/test.mp3 -oac copy \
  -of lavf -ovc lavc \          
  -lavcopts vcodec=msmpeg4v2:mbd=2:mv0:trell:cbp:last_pred=3:vbitrate=3000 \
  -o /tmp/test.avi

Я знаю, что у mplayer есть версия для Windows.

Вместо того, чтобы просто проходить через все эти хлопоты, вы можете скопировать все изображения, которые вы хотите включить в ваше видео, в буфер обмена, импортировать их в Windows Live Movie Maker (конечно, динамически!) и скомпилировать их за вас!

Все это МОЖНО сделать с помощью кода, но в этом случае вам не придется создавать его самостоятельно.Как вы сказали, платформой была Windows, и на ВСЕХ Windows-компьютерах установлен Windows Live Movie Maker, так что это не должно быть проблемой для тех, кто использует ваше приложение, кроме случаев, когда

а) Они удалили Windows Live Movie Maker

б) Они используют компьютер под управлением версии Windows старше 8 или 9 лет...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top