Подтвердить что ты не робот

Рабочий способ сделать видео с изображений в С#

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

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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

  • Встраивание VLC-просмотра в мое приложение С# (для VLC-версии есть 3-4 С# -компьютера).
  • Использование vlc.exe в отдельном Процессе путем отправки его аргументов командной строки.

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

Ответ 3

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

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

Ответ 4

Я использовал mplayer mencoder для создания AVI (с кодеками msmpeg4/mp3, которые можно читать по умолчанию с помощью Windows Media Player) из Файлы 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.

Ответ 5

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

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

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

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