【问题标题】:Store extracted frame name inside an array - ffmpeg将提取的帧名称存储在数组中 - ffmpeg
【发布时间】:2013-02-03 23:29:13
【问题描述】:

我是C的新手。我是PHP背景的,但是碰巧我用PHP编写的代码需要转换为C。最初是Java,但现在要求是C .

在学习了一些教程后,我掌握了 C 的基础知识并编写了以下代码以在 c 程序中运行 ffmpeg.exe

#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;
}

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

【问题讨论】:

  • 命令 D:\ffmpeg\bin\ffmpeg.exe -i D:\video.mpg -r 10 D:\frames"\image%d.jpg 是否在标准输出上输出文件名? ??
  • 我不知道stdout....它的用途或如何使用它
  • 在屏幕/终端上,可能您希望将所有文件名创建为 D:\frames\image%d.jpg 在一个数组中????
  • 程序一运行,就会打开一个dos窗口,ffmpeg开始运行......似乎每秒都会显示很多信息......但我不认为文件名正在dos窗口中打印出来
  • 是的,文件名或整个路径进入一个数组

标签: c arrays image-processing ffmpeg


【解决方案1】:

现在,由于文件名不显示为系统命令的输出,因此使用 popen 或 fork 将无法正常工作。我建议您在输出目录(D:\frames)上执行 nftw。它将列出文件夹中的所有文件。

示例代码: http://linux.die.net/man/3/nftw

【讨论】:

  • 是的。实际上,这种选择越过我的脑海。但问题是在从目录中循环文件时,文件没有按正确的升序提取。这很重要,因为我需要数组以升序包含文件。正确的顺序 - image1、image2、image3..等等。遍历目录时显示的顺序 - image1、image100、image101、..等等
  • 在这种情况下,只需计算文件夹中存在的所有文件。文件名将按顺序排列,因此您可以在运行时创建文件名。例如,如果有 100 个文件,则顺序文件名将从 image1 到 image100
  • 这是个好技巧。但我认为nftw 是基于 linux 的......而我在 windows 上。
  • 这段代码也应该在windows上工作......gnu.org/savannah-checkouts/gnu/libc/manual/html_node/…
  • 我想这会有所帮助。 +1 顺便说一句
猜你喜欢
  • 2020-12-20
  • 1970-01-01
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 2017-05-28
相关资源
最近更新 更多