C++ 将ffmpeg ffprobe与Visual C++;

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

我有以下命令行,它为我提供了视频文件的持续时间:

ffprobe.exe-i Video.mp4 show_entries format=duration-v quiet-of csv=“p=0”

当我运行这个程序时,我成功地从命令提示符下恢复了视频的持续时间。现在,我是一个C++初学者,所以我不确定如何把这个持续时间放入程序中的一个浮动中。我在网上浏览了很多文章和问答论坛,找到了一些可能的答案……使用stdout/stdin获取信息。。。?我不确定

我现在的策略是使用CreateProcess()运行该进程,然后使用WaitForSingleObject(),然后以某种方式使用一些命令从ffprobe进程获取输出数据。也许我正在寻找的数据可以通过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文件。这是解决你问题的办法,但不是回答你的问题。听起来不错。我也会试试,然后告诉你怎么样。谢谢。我将尝试将库集成到我的项目中,看看我能想出什么。谢谢。我将尝试将这个库集成到我的项目中,看看我能想出什么。