Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 1
Регистрация: 30.08.2016
Сообщений: 58
1

Сжатие видео. Не запускается ffmpeg

17.06.2017, 20:50. Показов 1856. Ответов 12

Добрый вечер, форумчане. Столкнулся с проблемой того, что не запускается ffmpeg. Подскажите, с чем может быть связана ошибка. Ниже фрагмент кода, где я запускаю ffmpeg для сжатия видео
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
                string baseDirectory = Thread.GetDomain().BaseDirectory + @"CompressedVideos";
                string inpFile = inputFile.Text;
                string fps = fpsNum.Text;
                string outFile = outputFile.Text;
                label4.Visible = true;
                compressProgress.Visible = true;
                CompressProcess = new Process();
                var info = CompressProcess.StartInfo;
                CompressProcess.Exited += new EventHandler(CompressProcess_Exited);
                info.FileName = @"C:\Users\User\Documents\Visual Studio 2013\Projects\CompressVideo\CompressVideo\ffmpeg-20170605-4705edb-win64-static\bin\ffmpeg.exe";
                info.Arguments = " -i " + inpFile + " -r " + fps + baseDirectory + outFile;
                info.UseShellExecute = false;
                info.RedirectStandardError = true;
                info.RedirectStandardOutput = true;
                CompressProcess = Process.Start(info);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.06.2017, 20:50
Ответы с готовыми решениями:

видео из ffmpeg
Подскажите можно ли сделать с помощью ffmpeg видео из картинок png, если картинки не через равные...

Ffmpeg не режет видео
Здравствуйте. Не могу заставить ffmpeg резать ролик на кадры. Выполняю avconv -ss 00:00:02 -i...

Потоковое видео с ffmpeg
Есть несжатое видео с камеры 320x240, и его нужно передавать на удалённый компьютер в реальном...

Видео из фото в ffmpeg
Всем привет Кто может помочь разобратся с батником. Хотел по примеру склейки видео сделать...

12
Администратор
Эксперт .NET
13171 / 10727 / 4425
Регистрация: 17.03.2014
Сообщений: 21,625
Записей в блоге: 1
17.06.2017, 22:21 2
LoKi_MoKi, в чем именно выражается "не запускается"? Попробуй запустить ffmpeg из командной строки передав в точности те же аргументы что передает программа. Ошибку я пока вижу только одну
C#
1
CompressProcess = Process.Start(info);
Запуская процесс таким образом ты затираешь старое значение где у тебя была подписка на событие Exited. Нужно так
C#
1
CompressProcess.Start();
0
0 / 0 / 1
Регистрация: 30.08.2016
Сообщений: 58
17.06.2017, 22:54  [ТС] 3
При запуске с консоли, с теми же параметрами всё работает и сжимает
Сжатие видео. Не запускается ffmpeg

Я немного переделал и всё равно не тот результат. Я хочу сделать так, чтобы по нажатию кнопки начал работу ffmpeg, а как закончит, то вылезает MessageBox о завершении и в папке с проектом лежит сжатое видео"
Вот изменения:
C#
1
2
3
4
5
6
7
8
9
10
11
12
                var ProcessObj = new Process();
                ProcessObj.EnableRaisingEvents = true;
                ProcessObj.Exited += new EventHandler(ProcessObj_Exited);
                ProcessObj.StartInfo.FileName = @"C:\Users\User\Documents\Visual Studio 2013\Projects\CompressVideo\CompressVideo\ffmpeg-20170605-4705edb-win64-static\bin\ffmpeg.exe";
                ProcessObj.StartInfo.Arguments = " -i " + inputFile.Text + " -r " + fpsNum.Text + outputFile.Text + "." + format.Text;
                ProcessObj.StartInfo.UseShellExecute = false;
                ProcessObj.StartInfo.RedirectStandardError = true;
                ProcessObj.StartInfo.RedirectStandardOutput = true;
                ProcessObj.StartInfo.CreateNoWindow = true;
                ProcessObj.Start();
                label4.Visible = true;
                compressProgress.Visible = true;
0
0 / 0 / 1
Регистрация: 30.08.2016
Сообщений: 58
18.06.2017, 00:21  [ТС] 4
И вот вопросик. в поле
C#
1
ProcessObj.StartInfo.Arguments
нужно передавать параметры, которые будут использоваться в качестве параметров сжатия, а я правильно их задаю?

Добавлено через 1 час 23 минуты
Подскажите, пожалуйста, очень надо
0
Администратор
Эксперт .NET
13171 / 10727 / 4425
Регистрация: 17.03.2014
Сообщений: 21,625
Записей в блоге: 1
18.06.2017, 07:32 5
Цитата Сообщение от LoKi_MoKi Посмотреть сообщение
Я немного переделал и всё равно не тот результат.
Результат нам нужно угадать или ты расскажаешь что это означает?

Цитата Сообщение от LoKi_MoKi Посмотреть сообщение
а я правильно их задаю?
С точки зрения C# правильно. С точки зрения программы возможно нет.
0
0 / 0 / 1
Регистрация: 30.08.2016
Сообщений: 58
18.06.2017, 13:01  [ТС] 6
OwenGlendower, я разобрался в чём был косяк. я в поле
C#
1
ProcessObj.StartInfo.Arguments
задавал неправильно параметр. Там два параметра в 1 сливались из-за того что пробела не было, вот и не работало. Теперь прога работает, но не работает ProgressBar, везде пишут что надо работу по сжатию вытащить в отдельный от UI поток, а каким образом это реализовать?
0
Администратор
Эксперт .NET
13171 / 10727 / 4425
Регистрация: 17.03.2014
Сообщений: 21,625
Записей в блоге: 1
18.06.2017, 13:12 7
Цитата Сообщение от LoKi_MoKi Посмотреть сообщение
но не работает ProgressBar
Скорее всего это из-за какой ошибки в твоей программе. Не видя кода и без пояснений что значит "не работает" и как он должен работать, никакого другого ответа дать нельзя.
0
0 / 0 / 1
Регистрация: 30.08.2016
Сообщений: 58
18.06.2017, 13:23  [ТС] 8
OwenGlendower, https://yadi.sk/d/eNTOu3M23KDpwW тут архив с прогой
0
Администратор
Эксперт .NET
13171 / 10727 / 4425
Регистрация: 17.03.2014
Сообщений: 21,625
Записей в блоге: 1
18.06.2017, 13:30 9
LoKi_MoKi, что-то нет желания качать 207 Мб. Выложи код который отвечает за прогресс бар. С пояснениями там где необходимо.
0
0 / 0 / 1
Регистрация: 30.08.2016
Сообщений: 58
18.06.2017, 13:40  [ТС] 10
OwenGlendower, это в конструкторе формы
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        public Form1()
        {
            InitializeComponent();
            //Установка типа ProgressBar-а и скрытие его до начала сжатия
            label4.Visible = false;
            compressProgress.Style = ProgressBarStyle.Marquee;
            compressProgress.Visible = false;
        }
 
//А тут, я запускаю процесс конвертирования и прогресс бар
                var ProcessObj = new Process();
                ProcessObj.Exited += new EventHandler(ProcessObj_Exited);
                ProcessObj.SynchronizingObject = this;
                ProcessObj.EnableRaisingEvents = true;                
                ProcessObj.StartInfo.UseShellExecute = false;
                ProcessObj.StartInfo.RedirectStandardOutput = true;
                ProcessObj.StartInfo.RedirectStandardInput = true;
                ProcessObj.StartInfo.RedirectStandardError = true;
                ProcessObj.StartInfo.FileName = ffmpegPath.Text;
                ProcessObj.StartInfo.Arguments = " -i " + inputFile.Text + " -r " + fpsNum.Text + " " + outputFile.Text + "." + format.Text;
                ProcessObj.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                ProcessObj.StartInfo.CreateNoWindow = true;
                                
                label4.Visible = true;
                compressProgress.Visible = true;
                ProcessObj.Start();
0
Администратор
Эксперт .NET
13171 / 10727 / 4425
Регистрация: 17.03.2014
Сообщений: 21,625
Записей в блоге: 1
18.06.2017, 13:54 11
LoKi_MoKi, я вижу только код отображения прогресс-бара. Чтобы прогресс-бар бежал нужно менять его Value или вызывать метод PerformStep().
0
0 / 0 / 1
Регистрация: 30.08.2016
Сообщений: 58
18.06.2017, 16:49  [ТС] 12
OwenGlendower, у просто не понимаю как мне связать процесс с вызовом консоли и выполнения в ней определённых действий и прогресс бар. Допустим прогресс бар будет работать, пока ffmpeg будет выполнять свои действия, а потом закрываться и прогресс бар тоже будет завершаться
0
Администратор
Эксперт .NET
13171 / 10727 / 4425
Регистрация: 17.03.2014
Сообщений: 21,625
Записей в блоге: 1
18.06.2017, 23:19 13
LoKi_MoKi, думаю для этого нужно будет парсить вывод ffmpeg как например сделано в скрипте ffmpeg-progress.sh. Он сначала запускает ffprobe чтобы получить FPS и DURATION видеофайла; использует их чтобы расчитать TOT_FR (общее количество фреймов). После этого запускает ffmpeg и ищет в выводе номер фрейма. Зная номер фрейма и общее кол-во можно рассчитать процент для progressbar. Завершать прогресс можно в ответ на событие Exited на которое ты уже подписался. Процесс чтения вывода ffmpeg следует запустить в отдельном потоке чтобы не блокировать UI.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2017, 23:19

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Конвертирование видео библиотекой ffmpeg
Я использую ffmpeg для преобразования своего видео, но когда я устанавливаю определенную...

Ffmpeg: потеря качества видео
Здравствуйте уважаемые форумчани. Мне нужно конвертировать много видео в формате mp4 в формат avi....

Работа с видео-потоком, ffmpeg
Здравствуйте. Прошу помочь с поиском решения или разобраться с его возможными вариантами. Итак,...

Ffmpeg wrapper. Не обрезаются длинные видео
Здравствуйте! Мне нужно программно обрезать видеофайл. Как напрямую работать с ffmpeg я не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.