SOS! Помогите разобраться с ffmpeg

digitalboy228

Client
Регистрация
27.09.2018
Сообщения
51
Благодарностей
5
Баллы
8
Итак, постараюсь вкратце всё изложить:
Пишу я значит простой шаб по генерации слайд шоу в FFMPEG с музыкой.

Естественно сначала я прогнал команды в командной строке, чтобы убедиться, что команда работает.

C:\zennoprod\VideoMaker\edit_video\bin\ffmpeg.exe -framerate 1/8 -f image2 -i C:\zennoprod\VideoMaker\vidstart\video1\image%d.jpg -i C:\zennoprod\VideoMaker\music\zvuk.mp3 -vf scale=1280:720 C:\zennoprod\VideoMaker\vidstart\video1\imagestovideo.mp4
Всё в консоли работает, музыка подставляется, картинки по фрейму листаются и тд.

Делаю тоже самое через "запуск программы" и получаю "пирожок с ничем" :

68803

68804

68805


EXIT CODE -1 (Что это значит так и не понял до сих пор)

Потом, значит я решил попробовать С#

НО!!! Так как абсолютно в нём понимаю ничего, то использовал то, что нашёл :


C#:
string comand = "";
comand = @"C:\zennoprod\VideoMaker\edit_video\bin\ffmpeg.exe -framerate 1/8 -f image2 -i C:\zennoprod\VideoMaker\vidstart\video1\image%d.jpg -i C:\zennoprod\VideoMaker\music\zvuk.mp3 -vf scale=1280:720 C:\zennoprod\VideoMaker\vidstart\video1\imagestovideo.mp4";
//comand = @"C:\zennoprod\VideoMaker\edit_video\bin\ffmpeg.exe -framerate 1/8 -f image2 -i C:\zennoprod\VideoMaker\vidstart\video1\image%d.jpg -i C:\zennoprod\VideoMaker\music\zvuk.mp3 -vf scale=1280:720 C:\zennoprod\VideoMaker\vidstart\video1\imagestovideo.mp4"; //
При отработке пишет, что "ОК" , но видео не генерится вообще, значит что-то не правильно написал. Но разобраться самостоятельно не получилось.

Тем временем просто руками в консоли всё создаётся и работает (ТОЙ ЖЕ САМОЙ КОМАНДОЙ)
*на всякий случай дублирую моменты, ну мало ли*

Потом решил создать батник :

68806

Запускаю его также в "запуск программы" и просто самостоятельно прокликивая мышью в папке.

Также результата не дало.

Что у меня в библиотеках и директивах :

68807

68808

68809

Вопрос : ПОЧЕМУ ТАК ?

Если кому-то не сложно, мне деревянному, помочь, то самое время!
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 804
Баллы
113
Снимите чекбоксы "Записать STD OUT" и "Записать STD ERR"

Стоит учесть то, что если по пути сохранения итогового файла будет найден существующий файл, то экшен будет ждать указанное количество секунд в настройке Таймаут и, потом, выйдет по красной ветке.

UPDATE:
ffmpeg можно "попросить" перезаписывать файлы без лишних вопросов, для этого надо указать команду -y. Либо, наоборот, НЕ перезаписывать, команда - -n (в этом случае ffmpeg завершит работу сразу, как-только увидит, что файл уже существует. Экшен завершится ошибкой).

 
Последнее редактирование:
  • Спасибо
Реакции: digitalboy228

artomka

Client
Регистрация
23.08.2018
Сообщения
159
Благодарностей
93
Баллы
28
C#:
string command = "/c echo y |ffmpeg -i " + project.Variables["vid_to_make"].Value + " -i " + project.Variables["pic_to_use"].Value + " -filter_complex \"[0:v][1:v] overlay=70:110:enable='between(t,0,20)'\" -pix_fmt yuv420p -c:a copy " + project.Variables["vid_rdy"].Value;
    System.Environment.CurrentDirectory = project.Variables["folder"].Value;
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.FileName = "cmd.exe";
    startInfo.Arguments = command;
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;
    Process.Start(startInfo).WaitForExit();
Всегда испльзую вот так.

FFMPEG прописан в PATH чтоб напрямую вызывать из консоли не указывая путь к нему.

Просто замените мою комманду на свою и все будет работать.

П.С. для отлова ошибок можно удалить строку startInfo.WindowStyle = ProcessWindowStyle.Hidden; и тогда будет выскакивать окошко CMD,

UPDATE:
ffmpeg можно "попросить" перезаписывать файлы без лишних вопросов, для этого надо указать команду -y. Либо, наоборот, НЕ перезаписывать, команда - -n (в этом случае ffmpeg завершит работу сразу, как-только увидит, что файл уже существует. Экшен завершится ошибкой).
За -y спасибо, всегда пользовался echo y | перед командой, теперь буду как надо :D
 
  • Спасибо
Реакции: digitalboy228

digitalboy228

Client
Регистрация
27.09.2018
Сообщения
51
Благодарностей
5
Баллы
8
Снимите чекбоксы "Записать STD OUT" и "Записать STD ERR"

Стоит учесть то, что если по пути сохранения итогового файла будет найден существующий файл, то экшен будет ждать указанное количество секунд в настройке Таймаут и, потом, выйдет по красной ветке.

UPDATE:
ffmpeg можно "попросить" перезаписывать файлы без лишних вопросов, для этого надо указать команду -y. Либо, наоборот, НЕ перезаписывать, команда - -n (в этом случае ffmpeg завершит работу сразу, как-только увидит, что файл уже существует. Экшен завершится ошибкой).

Я в **уе, но это сработало. Просто галочки убрал с записей и всё. Святой человек благодарю, что откликнулся.
 
  • Спасибо
Реакции: nicanil

digitalboy228

Client
Регистрация
27.09.2018
Сообщения
51
Благодарностей
5
Баллы
8
C#:
string command = "/c echo y |ffmpeg -i " + project.Variables["vid_to_make"].Value + " -i " + project.Variables["pic_to_use"].Value + " -filter_complex \"[0:v][1:v] overlay=70:110:enable='between(t,0,20)'\" -pix_fmt yuv420p -c:a copy " + project.Variables["vid_rdy"].Value;
    System.Environment.CurrentDirectory = project.Variables["folder"].Value;
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.FileName = "cmd.exe";
    startInfo.Arguments = command;
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;
    Process.Start(startInfo).WaitForExit();
Всегда испльзую вот так.

FFMPEG прописан в PATH чтоб напрямую вызывать из консоли не указывая путь к нему.

Просто замените мою комманду на свою и все будет работать.

П.С. для отлова ошибок можно удалить строку startInfo.WindowStyle = ProcessWindowStyle.Hidden; и тогда будет выскакивать окошко CMD,



За -y спасибо, всегда пользовался echo y | перед командой, теперь буду как надо :D
Спасибо, что отозвался, только немного не понял :
"FFMPEG прописан в PATH чтоб напрямую вызывать из консоли не указывая путь к нему." - Имеется ввиду прописан в коде ? Мне надо как-то перемещать папку с ffmpeg или в переменную куда-то прописать?
А если у меня команда с переменными, то нужно грамотно её оформить ведь , правильно? чтобы код корректно работал :

-framerate 1/{-Variable.framerate-} -f image2 -i {-Variable.dir_video-}\i%d.jpg -i {-Variable.music_path-} -vf scale={-Variable.width_v-}:{-Variable.hieght_v-} {-Variable.dir_video-}\%d.mp4

моя команда с переменными.
Как будет выглядеть в коде? Напиши, если не трудно, пожалуйста.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)