Использование ffmpeg ffprobe с визуальным переполнением стека

У меня есть следующая командная строка, которая дает мне продолжительность видео файла:

ffprobe.exe -i Video.mp4 формат show_entries = длительность -v quiet -of csv = «p = 0»

Когда я запускаю это, я возвращаю длительность моего видео успешно, запуская его из командной строки. Теперь я начинающий с C ++, так что я не уверен, как я могу получить эту длительность для плавания внутри моей программы. Я просмотрел множество статей, форумов по вопросам и ответам в Интернете и нашел возможные ответы с помощью … использования stdout / stdin для получения информации …? Я не уверен.

Моя стратегия сейчас заключается в том, чтобы использовать CreateProcess () для запуска процесса, затем WaitForSingleObject (), а затем каким-то образом использовать какую-то команду для получения выходных данных из процесса ffprobe. Возможно, данные, которые я ищу, могут быть получены с помощью функции CreateProcess ()? Я чувствую, что я очень близок, но мне нужна помощь с этим …

В качестве примечания, поскольку я использую Visual C ++ Express 2010, у меня нет доступа к MFC.

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

0

Решение

Я сам не использовал ffmpeg, но вы можете использовать библиотеку libavcodec / ffmpeg в своей программе, чтобы получить продолжительность программным путем.

Смотрите здесь для более подробной информации: как использовать libavcodec / ffmpeg, чтобы узнать продолжительность видео файла

0

Другие решения

Таким образом, я использовал предложение Джигганджера о создании командного файла. Программное обеспечение, которое я программирую, предназначено для воспроизведения фильма программно с помощью загрузки внешнего экземпляра видеоплеера vlc (или любого другого видеоплеера).

Этот код находится внутри функции PlayMovie (char * MovieFileName).

Это создает пакетный файл с одной строкой кода, затем выполняет пакетный файл, а затем извлекает данные, отправленные из INI-файла, созданного в папке Movies //.

        //Create batch file
FILE * pFile;
//char* movieinfowritebuffer = "ffprobe -v quiet -print_format ini -show_format -show_streams Movies/Kai.mp4 > Movies/Kai.mp4.ini";
//Minf_wrBuffer = Minf_finalpath
char* Minf_wrBuffer = &Minf_finalpath[0u];

pFile = fopen ("MPlayer_MovieInfo.bat", "wb+");
fwrite (Minf_wrBuffer,strlen(Minf_wrBuffer),1, pFile);
fclose (pFile);

Sleep(250);

//MessageBox(NULL,"Next, we use ShellExecuteA to launch the .bat file.","LAUNCHER",NULL);
//Run batch file to create mp4 info ini
ShellExecuteA(NULL,"open","MPlayer_MovieInfo.bat",NULL,NULL,SW_HIDE);

Sleep(250);

//MessageBox(NULL,"Now, we grab the duration of the movie file from the ini file using GetPrivateProfileString.","LAUNCHER",NULL);
//Get duration from ini file

//Get the filename to create...
std::string iniFileToCreate = "Movies\\" + Minf_MovieName + ".ini";

char MovieDurationBuffer[256];
GetPrivateProfileString("streams.stream.1",
"duration",
"Default",
MovieDurationBuffer,
256,
iniFileToCreate.c_str());

float MovieDuration = atof(MovieDurationBuffer);
//Now play with MovieDuration
float MovieDurationTruncated = MovieDuration;
int tmp = MovieDurationTruncated * 100000; // 44.8 truncated to 44
MovieDurationTruncated = tmp / 100.0; // 4.4

char MovieDurationChar[20]; sprintf(MovieDurationChar, "%1.0f", MovieDurationTruncated-3);

int MovieDurationInt;
sscanf(MovieDurationChar, "%d", &MovieDurationInt);
0

По вопросам рекламы [email protected]