Рабочий способ сделать видео из изображений в C # - PullRequest
18 голосов
/ 12 февраля 2009

Есть ли у кого-нибудь известный надежный способ создания видео из серии файлов изображений? Перед тем, как вы отредактируете меня, чтобы не искать ответ, прежде чем отправлять вопрос, и перед тем, как запустить простое сообщение типа «использовать 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.

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

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

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

Ответы [ 5 ]

10 голосов
/ 13 февраля 2009

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

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

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

6 голосов
/ 12 февраля 2009

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

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

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

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

1 голос
/ 12 февраля 2009

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

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

0 голосов
/ 30 ноября 2010

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

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

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

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

0 голосов
/ 12 февраля 2009

Я использовал mencoder mplayer для создания 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.

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