C++ 将ffmpeg ffprobe与Visual C++;
我有以下命令行,它为我提供了视频文件的持续时间: ffprobe.exe-i Video.mp4 show_entries format=duration-v quiet-of csv=“p=0” 当我运行这个程序时,我成功地从命令提示符下恢复了视频的持续时间。现在,我是一个C++初学者,所以我不确定如何把这个持续时间放入程序中的一个浮动中。我在网上浏览了很多文章和问答论坛,找到了一些可能的答案……使用stdout/stdin获取信息。。。?我不确定 我现在的策略是使用CreateProcess()运行该进程,然后使用WaitForSingleObject(),然后以某种方式使用一些命令从ffprobe进程获取输出数据。也许我正在寻找的数据可以通过CreateProcess()函数检索到?我觉得我很接近,但我在这方面非常需要帮助C++ 将ffmpeg ffprobe与Visual C++;,c++,visual-studio-2010,video,ffmpeg,ffprobe,C++,Visual Studio 2010,Video,Ffmpeg,Ffprobe,我有以下命令行,它为我提供了视频文件的持续时间: ffprobe.exe-i Video.mp4 show_entries format=duration-v quiet-of csv=“p=0” 当我运行这个程序时,我成功地从命令提示符下恢复了视频的持续时间。现在,我是一个C++初学者,所以我不确定如何把这个持续时间放入程序中的一个浮动中。我在网上浏览了很多文章和问答论坛,找到了一些可能的答案……使用stdout/stdin获取信息。。。?我不确定 我现在的策略是使用CreateProcess
作为一个旁注,由于我使用VisualC++快速表2010,所以我不能访问MFC。
如果有人能为我提供正确的信息,我将不胜感激。我自己没有使用过ffmpeg,但您可以在程序中使用libavcodec/ffmpeg库,以编程方式获取持续时间
有关更多信息,请参见此处:我自己没有使用ffmpeg,但您可以在程序中使用libavcodec/ffmpeg库,以编程方式获取持续时间
请参见此处了解更多信息:因此,我在jiggunjer的建议中使用了生成批处理文件。我正在编程的软件旨在通过加载vlc电影播放器的外部实例(或者可以使用任何其他电影播放器)以编程方式播放电影 此代码位于PlayMovie(char*MovieFileName)函数中 这将使用一行代码创建批处理文件,然后执行批处理文件,然后获取从Movies//文件夹中生成的ini文件发布的数据
//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);
因此,我在最后使用了jiggunjer关于生成批处理文件的建议。我正在编程的软件旨在通过加载vlc电影播放器的外部实例(或者可以使用任何其他电影播放器)以编程方式播放电影 此代码位于PlayMovie(char*MovieFileName)函数中 这将使用一行代码创建批处理文件,然后执行批处理文件,然后获取从Movies//文件夹中生成的ini文件发布的数据
//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);
您可以创建一个批处理文件,将ffmpeg信息打印到文本文件中,然后调用读取txt文件的程序。这是解决你问题的办法,但不是回答你的问题。听起来不错。我也会尝试一下,然后告诉你它是如何运行的。你可以制作一个批处理文件,将ffmpeg信息打印成文本文件,然后调用你的程序读取txt文件。这是解决你问题的办法,但不是回答你的问题。听起来不错。我也会试试,然后告诉你怎么样。谢谢。我将尝试将库集成到我的项目中,看看我能想出什么。谢谢。我将尝试将这个库集成到我的项目中,看看我能想出什么。