3

ffmpegを使用して、ビデオファイルからポスターフレームを取得しようとしています。

私はこのチュートリアルに従っていて、次のコードを思いついています(これは私が与えたリンクから取得/適応されています):

public bool GetVideoThumbnail(string path, string saveThumbnailTo, int seconds)
        {
            string parameters = string.Format("-i {0} {1} -vcodec mjpeg -ss {2} -vframes 1 -an -f rawvideo", path, saveThumbnailTo, seconds);

            if (File.Exists(saveThumbnailTo))
            {
                return true;
            }
            else
            {
                using (Process process = Process.Start(pathToConvertor, parameters))
                {
                    process.WaitForExit();
                }
                return File.Exists(saveThumbnailTo);
            }
        }

現時点では、このコードは正しい宛先(saveThumbnailTo)にファイルを正常に作成しており、画像のみが完全に黒くなっています。ビデオの最初から空白の画像が表示されないように、コードの秒の値を変更してみました。ちなみに、パスは私のビデオが保存されている場所を指します。

私は現在、上記のコードを次のように呼んでいます:

GetVideoThumbnail(videoPath, folderPath + "/poster.jpg", 100)

..そしてそれを私のビューに渡して画像を表示します。完全にはわからないので、「。jpg」がこのファイルに付ける必要のある拡張子かどうか疑問に思います。

編集:コマンドラインから同じコマンドを実行すると、次のエラーが発生します。

コーデック「mjpeg」の互換性のないピクセル形式「yuv420p」、自動選択形式「yuvj420p」

黄色で表示され、

[image2 @02S96AE0]パターン'poster.jpg'からフレームファイル名番号2を取得できませんでしたan_interleaved_write_frame():引数が無効です

赤で表示されます。

私はffmpegコマンドラインに完全に慣れておらず、何が間違っているのかわからないので、誰かがこれを正しく機能させるのを手伝ってもらえますか?vcodecパラメータを削除しようとしましたが、同じエラーメッセージが表示されます。

4

1 に答える 1

8

これを試して:

public bool GetVideoThumbnail(string path, string saveThumbnailTo, int seconds)
{
    string parameters = string.Format("-ss {0} -i {1} -f image2 -vframes 1 -y {2}", seconds, path, saveThumbnailTo);

    var processInfo = new ProcessStartInfo();
    processInfo.FileName = pathToConvertor;
    processInfo.Arguments = parameters;
    processInfo.CreateNoWindow = true;
    processInfo.UseShellExecute = false;

    File.Delete(saveThumbnailTo);

    using(var process = new Process())
    {
        process.StartInfo = processInfo;
        process.Start();
        process.WaitForExit();
    }

    return File.Exists(saveThumbnailTo);
}

簡単な説明:

  • f image2 : 出力は画像
  • vframes 1 : 入力から 1 フレームを取得します
  • y : 出力ファイルを上書きします
  • "processInfo.CreateNoWindow = true" : ffmpeg ウィンドウを表示しない

「seconds」パラメーターの値を変えて、何度か試してください。また、「pathToConvertor」が正しいことを確認してください。

これは、Windowsマシン上のffmpeg.exeの最近のビルドでうまくいきました。

それがどうなるか教えてください。

于 2012-07-03T16:35:39.990 に答える