Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2013, 22:00   #1
pashka_dos
Пользователь
 
Аватар для pashka_dos
 
Регистрация: 19.11.2011
Сообщений: 83
Вопрос Достать все кадры из видео [C#/WPF]

Доброго времени суток. Есть необходимость достать все кадры с видео файла (avi, mpeg, и другие популярные форматы). При поиске наткнулся на библиотеку DirectShow, но там я так понял можно достать только один кадр и то во время воспроизведения. Можете посоветовать библиотеку для этой цели. Идеально было бы найти такой метод:
Код:
public static Bitmap[] GetFrames(Uri source, double from, double to)
{
   ...
}
Заранее спасибо за все ответы.
pashka_dos вне форума Ответить с цитированием
Старый 13.08.2013, 22:37   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

предпочитаю
Код:
ffmpeg -i ваше.видео -y image%d.jpg
...также можно с некоторого времени по некоторое.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 14.08.2013, 12:54   #3
pashka_dos
Пользователь
 
Аватар для pashka_dos
 
Регистрация: 19.11.2011
Сообщений: 83
Сообщение

Цитата:
Сообщение от raxp Посмотреть сообщение
предпочитаю
Код:
ffmpeg -i ваше.видео -y image%d.jpg
...также можно с некоторого времени по некоторое.
Спасибо за ответ, я знал об этом способе, но он мне немного не подходит, так как мне не нужно сохранять изображения, а держать их в памяти для дальнейшей обработки. Массив, или список Bitmap'ов, наверное то что нужно.
pashka_dos вне форума Ответить с цитированием
Старый 14.08.2013, 14:46   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...не шибко жирно в памяти все держать? Хорошо когда ОЗУ 6-8 гиг или видео небольшое, в ином случае будет крайне нехорошо.

Если будет постобработка и нужны битмапы, сохраняйте в bmp (будет даже быстрее без конвертации в jpeg) и работайте c файлами через tfilestream.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 14.08.2013, 18:25   #5
pashka_dos
Пользователь
 
Аватар для pashka_dos
 
Регистрация: 19.11.2011
Сообщений: 83
Сообщение

Цитата:
Сообщение от raxp Посмотреть сообщение
...не шибко жирно в памяти все держать? Хорошо когда ОЗУ 6-8 гиг или видео небольшое, в ином случае будет крайне нехорошо.

Если будет постобработка и нужны битмапы, сохраняйте в bmp (будет даже быстрее без конвертации в jpeg) и работайте c файлами через tfilestream.
Спасибо за совет. Новая проблема: написал метод для работы с ffMpeg

Код:
static Process proc = new Process();

public static void GetVideoFrames()
{
	string ffmpegPath = @"C:\ffMpeg\ffmpeg.exe";
	string parameters = @"-i c:\test.avi image%d.jpg";

	proc.StartInfo.FileName = ffmpegPath;
	proc.StartInfo.UseShellExecute = false;
	proc.StartInfo.Arguments = parameters;

	proc.Start();
}
НО он не работает, пробовал прописать тоже самое в cmd ffmpeg.exe -i c:\test.avi image%d.jpg - все работает. Вывод на консоль в обоих случаях одинаковый, но программно не работает. В чем может быть проблема?
pashka_dos вне форума Ответить с цитированием
Старый 14.08.2013, 18:49   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...в путях проблема и указании рабочей директории.


http://www.youtube.com/watch?v=ONPKd1Y8FQk

Разбить на кадры:
Код:
var dir: string;
begin
 dir:= extractfilepath(paramstr(0));
 createdir(dir + 'pic');

 // ffmpeg -i *.mp4 -y image%d.jpg
 ExecAndWait(dir + 'res\ffmpeg.exe',
             '-i ' + dir + '*.mp4 -y ' +
             dir + 'pic\image%d.jpg')
Cобрать:
Код:
var dir: string;
begin
 dir:= extractfilepath(paramstr(0));
 createdir(dir + 'output');

 // ffmpeg -f image2 -i image%d.jpg -y video.mp4
 ExecAndWait(dir + 'res\ffmpeg.exe',
             '-f image2 -i ' + dir + 'pic\image%d.jpg -y ' +
             dir + 'output\video.mp4')
p.s.: FFMPEG выгоднее DirectShow тем, что кроссплатформенен.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 15.08.2013, 19:49   #7
pashka_dos
Пользователь
 
Аватар для pashka_dos
 
Регистрация: 19.11.2011
Сообщений: 83
Радость

Цитата:
Сообщение от raxp Посмотреть сообщение
...в путях проблема и указании рабочей директории.


http://www.youtube.com/watch?v=ONPKd1Y8FQk

Разбить на кадры:
Код:
var dir: string;
begin
 dir:= extractfilepath(paramstr(0));
 createdir(dir + 'pic');

 // ffmpeg -i *.mp4 -y image%d.jpg
 ExecAndWait(dir + 'res\ffmpeg.exe',
             '-i ' + dir + '*.mp4 -y ' +
             dir + 'pic\image%d.jpg')
Cобрать:
Код:
var dir: string;
begin
 dir:= extractfilepath(paramstr(0));
 createdir(dir + 'output');

 // ffmpeg -f image2 -i image%d.jpg -y video.mp4
 ExecAndWait(dir + 'res\ffmpeg.exe',
             '-f image2 -i ' + dir + 'pic\image%d.jpg -y ' +
             dir + 'output\video.mp4')
p.s.: FFMPEG выгоднее DirectShow тем, что кроссплатформенен.

Да, так и есть, спасибо огромное
pashka_dos вне форума Ответить с цитированием
Старый 15.08.2013, 22:02   #8
pashka_dos
Пользователь
 
Аватар для pashka_dos
 
Регистрация: 19.11.2011
Сообщений: 83
По умолчанию

Хм...А как мне теперь отследить прогресс кадрирования видео?
pashka_dos вне форума Ответить с цитированием
Старый 15.08.2013, 22:06   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...также как и при работе с любой другой консолью.
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

p.s.: либо работать не со сборкой ffmpeg, а с ее составляющими либами напрямую http://ffmpeg.org/documentation.html.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C# + WPF] Отлов нажатий клавиш, хуки, горячие клавиши в проекте WPF Casper-SC WPF, UWP, WinRT, XAML 3 03.03.2017 15:00
класс Screen в WPF. Есть ли такой? [?] Не добавлять же сборку Forms в WPF Casper-SC Общие вопросы .NET 2 30.07.2010 15:10
Кадры и MediaPlayer DOLBY Компоненты Delphi 2 19.02.2008 08:19
Кадры Балда Общие вопросы Delphi 11 18.12.2007 14:38