Как кодировать/декодировать видео с помощью C#?

Бесстыдный разъем PowerShell (потому что я думаю кривая обучения, боль, так обучение чего-то в любой возможности, может помочь)

Get-Content file1,file2

Примечание, которое type является псевдонимом для Получать-содержания, поэтому если Вам нравится он лучше, можно записать:

type file1,file2
13
задан DH. 2 December 2009 в 18:11
поделиться

7 ответов

В нашем проекте мы используем Microsoft Expression Encoder. Это не бесплатно. Он может конвертировать видео в разные форматы и размеры, извлекать эскизы и т. Д.

Вот пример:

using Microsoft.Expression.Encoder;

//...
//skiped
//...

MediaItem mediaItem = new MediaItem(videoToEncode.SourceFilePath);
mediaItem.ApplyPreset(PresetFilePath);

Job job = new Job();
job.ApplyPreset(PresetFilePath); // path to preset file, where settings of bit-rate, codec etc
job.MediaItems.Add(mediaItem);

job.EncodeProgress += OnProgress;
job.EncodeCompleted += EncodeCompleted;

job.DefaultMediaOutputFileName = "{OriginalFilename}.encoded.{DefaultExtension}";
job.CreateSubfolder = false;

job.OutputDirectory = videoToEncode.EncodedFilePath;
job.Encode();
4
ответ дан 2 December 2019 в 00:58
поделиться

Вы можете попробовать посмотреть SharpFFmpeg . Он лицензируется с использованием GPL, хотя вы можете увидеть, как они написали свою оболочку, и вы можете написать свою собственную или получить идеи о том, как исправить ваше текущее решение.

Изменить:

На сайте code.google.com есть похожая оболочка ffmpeg-sharp , в которой используется LGPL - вы можете использовать ее в коммерческих приложениях. Я подозреваю, что обе эти оболочки делают примерно то же самое, хотя SharpFFmpeg старше и, вероятно, более зрелый.

0
ответ дан 2 December 2019 в 00:58
поделиться

Я написал VideoRendererElement еще тогда, когда не было эффективных способов рендеринга видео в WPF (v3.0). Он использует некоторые хакерские приемы, чтобы заставить его работать.

Если вы хотите немного упростить ситуацию, отбросьте VRE и используйте InteropBitmap для рендеринга (WriteableBitmap в порядке, но не так эффективно). Также отбросьте SWIG и сделайте свою C ++ dll DLL-библиотекой CLI / C ++, таким образом вы можете напрямую общаться со своим C ++ из C # (и наоборот).

Другой путь, которым вы можете пойти, это просто создать исходный фильтр DirectShow, содержащий ваш транспортировать / декодировать материал, и вы можете использовать что-то вроде моего WPF MediaKit для его рендеринга в WPF (он использует хаки D3DImage. 0).

Также не бойтесь LGPL. Пока вы храните его в собственной DLL и не меняете источник, вы находитесь в рамках лицензионных ограничений.

0
ответ дан 2 December 2019 в 00:58
поделиться

Мы конвертируем видеофайлы в различные выходные форматы (avi, flv, mp4 с кодировкой divx и т. Д.) Для нашего приложения базы данных медиаданных. Поскольку мы всегда работали с CLI-приложениями для преобразования мультимедиа (поговорим о растеризации файлов EPS в JPG с помощью ImageMagick / GS), мы сильно полагались на FFMPEG-CLI.

В нашей специальной среде мы использовали «тупые» UNIX-серверы в качестве машин для преобразования (установлены только библиотеки sshd, ffmpeg, misc. ffmpeg и samba). Они управляются через CLI PuTTy из C # (веб-сервис WCF) с помощью команд SSH для реального преобразования.

Вызов ffmpeg происходит через ssh и специфичен для каждого TransformationType. CLI шпатлевки запускается через пространство имен C # System.Diagnostics.Process, события для вывода и сообщений об ошибках обрабатываются для целей регистрации.

Интернет предоставляет множество ресурсов, касающихся таких вопросов, как «Как я могу преобразовать mpg в flv с помощью ffmpeg ? ", небольшое исследование поможет вам. Поскольку мы говорим о приложении, защищенном авторскими правами, я не могу публиковать полные отрывки кода. Но он должен дать вам архитектурное представление о надежном и быстром сервере кодирования видео с использованием C #.

0
ответ дан 2 December 2019 в 00:58
поделиться

Вы также можете ознакомиться с различными пакетами SDK для Microsoft Windows Media, которые доступны для загрузки. Несколько лет назад в проекте мы использовали SDK формата Windows Media для извлечения эскизов из загруженного видео. Эти SDK также содержат пример кода .NET.

0
ответ дан 2 December 2019 в 00:58
поделиться

У меня были разные проблемы с использованием ffmpeg, завернутого в DLL. Мой видеопроект был довольно простым - мне просто нужен конвертер, чтобы взять одну миниатюру из WMV.

Попробовав то, что вы описываете, я решил просто скопировать двоичный файл ffmpeg.exe в мой проект в качестве внешней библиотеки. это также аккуратно обходит любые проблемы с лицензированием кода, AFAIK ...

        Guid temp = Guid.NewGuid();

        // just throw our ffmpeg commands at cmd.exe
        System.Diagnostics.ProcessStartInfo psi = 
            new System.Diagnostics.ProcessStartInfo("cmd.exe");

        psi.WorkingDirectory = Page.MapPath(@"~\Lib\ffmpeg.rev12665");

        psi.UseShellExecute = false;
        psi.RedirectStandardError = true;
        psi.RedirectStandardOutput = true;
        psi.RedirectStandardInput = true;

        System.Diagnostics.Process ps = System.Diagnostics.Process.Start(psi);

        StreamReader outputReader = ps.StandardOutput;
        StreamReader errorReader = ps.StandardError;
        StreamWriter inputWrite = ps.StandardInput;

        // uses extra cheap logging facility
        inputWrite.WriteLine("echo \"Ripping " + copiedFile + " " + 
            temp.ToString() + "\" >> log.txt");

        inputWrite.WriteLine("ffmpeg.exe -i \"" + copiedFile + 
            "\" -f image2 -vframes 1 -y -ss 2 tmp\\" + temp.ToString() + 
            ".jpg");

        inputWrite.WriteLine("exit");

        ps.WaitForExit(3000);

        if (ps.HasExited)
        {
            string thumbFile = Page.MapPath(@"~\Lib\ffmpeg.rev12665\tmp") + 
                @"\" + temp.ToString() + ".jpg";
            // ...
        }

Ваша командная строка ffmpeg может сильно отличаться от моего примера, но это самый стабильный способ, который я нашел для получения эскизов. В других материалах, которые я нашел в Интернете относительно ffmpeg, не было этого решения (на основе cmd.exe), но это единственное, что у меня получилось хорошо работать. Удачи!

2
ответ дан 2 December 2019 в 00:58
поделиться

DirectShow - ваш друг. DirectShow - это низкоуровневый уровень, используемый большинством "мультимедийных" приложений Windows, таких как Media Player, Audio Encoders и т. Д.

Даже если эта библиотека была создана для разработчиков, использующих собственный код, вы можете получить к ней доступ из управляемого мира благодаря DirectShow.net. http://directshownet.sourceforge.net Это хорошо известная и стабильная управляемая оболочка для DirectShow.

Единственное, что вам нужно сделать, это немного изучить DirectShow, чтобы понять концепцию графиков и фильтры, а затем создавать свои собственные фильтры и графики, чтобы использовать возможности DirectShow!

6
ответ дан 2 December 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: