使用ffmpeg获取海报框(缩略图)

时间:2012-07-03 15:24:56

标签: c# ffmpeg screenshot

我正在尝试使用ffmpeg从视频文件中获取海报帧。

我一直关注此tutorial并提出以下代码(根据我提供的链接采取/改编):

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”是否是我应该给这个文件的扩展名,因为我不完全确定?

编辑:当我从命令行运行相同的命令时,我收到以下错误:

  

不兼容的像素格式'yuv420p'用于编解码器'mjpeg',自动选择   格式'yuvj420p'

以黄色显示,

  

[image2 @ 02S96AE0]无法从模式获取帧文件名编号2   'poster.jpg'an_interleaved_write_frame():参数无效

以红色显示。

任何人都可以帮助我正常工作,因为我完全不熟悉ffmpeg命令行,不知道我做错了什么。我试过删除vcodec参数并得到相同的错误消息。

1 个答案:

答案 0 :(得分: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 :从输入中取一帧
  • y :覆盖输出文件
  • “processInfo.CreateNoWindow = true”:不显示ffmpeg窗口

尝试多次使用“seconds”参数的不同值。 另外,请确保“pathToConvertor”正确无误。

这对我有用,最近在Windows机器上构建了ffmpeg.exe。

让我知道它是怎么回事。