Бесстыдный разъем PowerShell (потому что я думаю кривая обучения, боль, так обучение чего-то в любой возможности, может помочь)
Get-Content file1,file2
Примечание, которое type
является псевдонимом для Получать-содержания, поэтому если Вам нравится он лучше, можно записать:
type file1,file2
В нашем проекте мы используем 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();
Вы можете попробовать посмотреть SharpFFmpeg . Он лицензируется с использованием GPL, хотя вы можете увидеть, как они написали свою оболочку, и вы можете написать свою собственную или получить идеи о том, как исправить ваше текущее решение.
Изменить:
На сайте code.google.com есть похожая оболочка ffmpeg-sharp , в которой используется LGPL - вы можете использовать ее в коммерческих приложениях. Я подозреваю, что обе эти оболочки делают примерно то же самое, хотя SharpFFmpeg старше и, вероятно, более зрелый.
Я написал VideoRendererElement еще тогда, когда не было эффективных способов рендеринга видео в WPF (v3.0). Он использует некоторые хакерские приемы, чтобы заставить его работать.
Если вы хотите немного упростить ситуацию, отбросьте VRE и используйте InteropBitmap для рендеринга (WriteableBitmap в порядке, но не так эффективно). Также отбросьте SWIG и сделайте свою C ++ dll DLL-библиотекой CLI / C ++, таким образом вы можете напрямую общаться со своим C ++ из C # (и наоборот).
Другой путь, которым вы можете пойти, это просто создать исходный фильтр DirectShow, содержащий ваш транспортировать / декодировать материал, и вы можете использовать что-то вроде моего WPF MediaKit для его рендеринга в WPF (он использует хаки D3DImage. 0).
Также не бойтесь LGPL. Пока вы храните его в собственной DLL и не меняете источник, вы находитесь в рамках лицензионных ограничений.
Мы конвертируем видеофайлы в различные выходные форматы (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 #.
Вы также можете ознакомиться с различными пакетами SDK для Microsoft Windows Media, которые доступны для загрузки. Несколько лет назад в проекте мы использовали SDK формата Windows Media для извлечения эскизов из загруженного видео. Эти SDK также содержат пример кода .NET.
У меня были разные проблемы с использованием 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), но это единственное, что у меня получилось хорошо работать. Удачи!
DirectShow - ваш друг. DirectShow - это низкоуровневый уровень, используемый большинством "мультимедийных" приложений Windows, таких как Media Player, Audio Encoders и т. Д.
Даже если эта библиотека была создана для разработчиков, использующих собственный код, вы можете получить к ней доступ из управляемого мира благодаря DirectShow.net. http://directshownet.sourceforge.net Это хорошо известная и стабильная управляемая оболочка для DirectShow.
Единственное, что вам нужно сделать, это немного изучить DirectShow, чтобы понять концепцию графиков и фильтры, а затем создавать свои собственные фильтры и графики, чтобы использовать возможности DirectShow!