将提取的帧名存储在一个数组中 - ffmpeg

问题描述:

我是一个C的完整新手。我来自PHP背景,但碰巧我在PHP中编写的代码需要转换为C.它是Java在第一,但现在的要求是C.将提取的帧名存储在一个数组中 - ffmpeg

通过一些教程去后,我得到了C的基础知识和编码下面从交流程序中

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 

    char *app = "D:\\ffmpeg\\bin\\ffmpeg.exe -i"; 
    char *input = " D:\\video.mpg"; 
    char *output = " D:\\frames\\image%d.jpg"; 
    char *param = " -r 10"; 
    char str[300];  
    snprintf(str, sizeof str, "%s%s%s%s", app, input, param, output); 
    // str contains "D:\ffmpeg\bin\ffmpeg.exe -i D:\video.mpg -r 10 D:\frames"\image%d.jpg 
    system(str); // <-- working fine, frames are being extracted 
    /* 
     do something here to store each extracted frame in an array 
     so that the array contains image1.jpg, image2.jpg, image3.jpg...and so on 
    */ 
    getch(); 
    return 0; 
} 

运行ffmpeg.exe编译和运行程序,我正在按照预期的方式获取输出文件夹中的帧。问题是我想将每个帧名称存储在数组中,因为它被提取。到目前为止,我还没有遇到类似的问题,所以我决定为它创建一个新线程。我希望这是可能的,并希望在正确的方向推动。

+0

确实命令d:\ ffmpeg的\ BIN \ ffmpeg.exe -i d:\ video.mpg -r 10 d:\帧“\图像%D.JPG输出文件在标准输出的名称??? – Anshul 2013-02-19 10:18:35

+0

我不知道'stdout' ....它的使用或如何在屏幕/终端上使用它 – asprin 2013-02-19 10:19:35

+0

,可能你希望所有的文件名创建为D:\ frames \ image%d。 jpg在一个数组的权利??? – Anshul 2013-02-19 10:20:12

现在由于文件名不会显示为使用popen输出到系统命令或fork不起作用。我会推荐你​​在输出目录(D:\ frames)上执行一个nftw。它会列出文件夹中的所有文件。

样品的编号: http://linux.die.net/man/3/nftw

+0

Yeh。其实这个选择在我心中。但是,在循环目录内的文件时,文件不会按照正确的升序排列。这很重要,因为我需要数组按照升序包含文件。正确的顺序 - image1,image2,image3 ..等等。在循环目录时显示的顺序 - image1,image100,image101,..等等 – asprin 2013-02-19 10:28:52

+2

在这种情况下只计算文件夹中存在的所有文件。文件名将按顺序排列,因此您可以在运行时创建文件名。例如,如果有100个文件,则顺序文件名将从图像1到图像100 – Anshul 2013-02-19 10:31:01

+0

这是一个很好的技巧。但我认为'nftw'是基于Linux的...而我在Windows上。 – asprin 2013-02-19 10:41:17