我在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();
}
答案 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
选项实际上表示ffmpeg
将overwrite the files without asking。
在命令行中找到的任何无法解释为选项的内容都被视为输出文件名。
意味着ffmpeg
将\output\dir\path\
视为输出文件,这在您的情况下无效。
我认为您最好的选择是尝试将proc.StartInfo.WorkingDirectory
设置为
您想要写入图像的目录。注意:下面的编辑可能是更好的方法。
编辑2:
要让他们进入所选目录,请从以下位置更改格式字符串:
frame-%1d.png
到此:
\output\path\frame-%1d.png