如何使用ffmpeg从视频文件中提取图像流

时间:2013-11-25 15:56:35

标签: c# ffmpeg

我想使用ffmpeg从视频文件中提取图像流。

我知道我可以使用这些参数将它们直接提取到硬盘驱动器:

-i - -qscale 1 h:\ out \ img-%05d.jpg

但我想直接提取到一个流。

到目前为止,这是我的代码:

private void ExtractImagesFromVideo(byte[] data,string _args)
    {
        try
        {
            serverBuild = new Process();
            serverBuild.StartInfo.WorkingDirectory = Environment.CurrentDirectory;
            serverBuild.StartInfo.Arguments = _args;
            serverBuild.StartInfo.FileName = Environment.CurrentDirectory + @"\ffmpeg.exe";
            serverBuild.StartInfo.UseShellExecute = false;
            serverBuild.StartInfo.RedirectStandardOutput = true;
            serverBuild.StartInfo.RedirectStandardError = true;
            serverBuild.StartInfo.RedirectStandardInput = true;
            serverBuild.StartInfo.CreateNoWindow = true;
            serverBuild.StartInfo.LoadUserProfile = false;
            serverBuild.EnableRaisingEvents = true;
            serverBuild.Start();

            using (BinaryWriter bw = new BinaryWriter(serverBuild.StandardInput.BaseStream))
            {
                bw.Write(data);
            }

            mStandardOutput = serverBuild.StandardOutput.BaseStream;
            mStandardOutput.BeginRead(mReadBuffer, 0, mReadBuffer.Length, StandardOutputReadCallback, null);
            serverBuild.WaitForExit();
            byte[] _data = mStandardOutputMs.ToArray();
            mStandardOutput.Close();

        }
        catch (Exception _ex)
        {

        }
        finally
        {               
            serverBuild.Dispose();
        }
    }

我打电话就像这样:

     string _argsOut = @"-i pipe:0 -qscale 1 -f mjpeg pipe:1 ";
     ExtractImagesFromVideo(data, _argsOut);

它挂在这一行:

bw.Write(data);

感谢

1 个答案:

答案 0 :(得分:-1)

前几天我在尝试使用FFMPEG从视频中提取单张图片时意外地这样做了。

这是你想要的命令行:“ - i input.flv -f image2 -vf fps = fps = 1 out%d.png”

输入.flv是源,fps = fps = 1将在视频的每一秒创建一个图像,而%d.png将是输出的文件。文件名和文件扩展名之间需要“%d”,因为这将创建一个如下的模式:out1.png,out2.png,out3.png等等。