1

我在 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();
}
4

1 回答 1

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选项实际上表示ffmpeg在不询问的情况下覆盖文件

描述

在命令行上找到的任何不能被解释为选项的东西都被认为是输出文件名。

这意味着ffmpeg将其\output\dir\path\视为输出文件,这在您的情况下不起作用。

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

编辑2:

要让它们进入所选目录,请从以下更改您的格式字符串:

frame-%1d.png

对此:

\output\path\frame-%1d.png 
于 2012-12-11T20:15:43.223 回答