从ffmpeg保存帧

时间:2012-12-11 19:43:32

标签: c# ffmpeg

我在C#中使用ffmpeg将电影丢弃到其帧图像并将每个帧保存为.png图像。但是,我无法保存帧!代码运行,但后来我无法将它们保存到文件夹中!我想知道如何将ffmpeg的输出保存到文件夹中。

public static void GetVideoFrames(string saveTo)
{
    string mpegpath = @"E:\Csharp\ffvideo\";
    string ffmpegPath = Path.Combine(mpegpath, "ffmpeg.exe");
    string inputMovie = @"E:\Csharp\ffvideo\test.mp4";
    string parameters = string.Format("ffmpeg -i {0} -f image2 frame-%1d.png -y {1}",
        inputMovie, saveTo);
    Process proc = new Process();
    proc.StartInfo.FileName = ffmpegPath;
    proc.StartInfo.UseShellExecute = false;
    proc.StartInfo.Arguments = parameters;
    proc.Start();
}

1 个答案:

答案 0 :(得分:1)

您正在设置proc.StartInfo.FileName = ffmpegPath;,但您的parameters字符串

string.Format("ffmpeg -i {0} -f image2 frame-%1d.png -y {1}", inputMovie, saveTo);

尝试从此字符串中取出ffmpeg,使其看起来像:

string.Format("-i {0} -f image2 frame-%1d.png -y {1}", inputMovie, saveTo);

我建议在这里发生的是实际执行的命令是:

\path\to\ffmpeg.exe ffmpeg -i E:\Csharp\ffvideo\test.mp4 -f image2 frame-%1d.png -y \output\dir\path\

EXE不喜欢第二个ffmpeg

修改

我可以使用以下命令将视频分割为单个图像:

ffmpeg.exe -i Test.mp4 -f image2 frame-1%d.png

-y选项实际上表示ffmpegoverwrite the files without asking

来自description

  

在命令行中找到的任何无法解释为选项的内容都被视为输出文件名。

意味着ffmpeg\output\dir\path\视为输出文件,这在您的情况下无效。

我认为您最好的选择是尝试将proc.StartInfo.WorkingDirectory设置为 您想要写入图像的目录。注意:下面的编辑可能是更好的方法。

编辑2:

要让他们进入所选目录,请从以下位置更改格式字符串:

frame-%1d.png

到此:

\output\path\frame-%1d.png