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はその2番目を好みません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 に答える