【问题标题】:Getting a poster frame(thumbnail) with ffmpeg使用 ffmpeg 获取海报框架(缩略图)
【发布时间】:2012-07-04 01:51:15
【问题描述】:

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

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

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

以黄色显示,并且

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

以红色显示。

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

【问题讨论】:

  • 你试过去掉-vcodec参数吗?
  • 是的,但仍然收到相同的错误消息,我会更新我的问题
  • 你可以尝试添加:-r 1
  • 您需要 -r 1 的原因是因为如果不是,它将尝试创建一系列图像,我认为这就是您收到有关模式名称的错误的原因。

标签: c# ffmpeg screenshot


【解决方案1】:

试试这个:

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窗口

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

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

告诉我进展如何。

【讨论】:

  • @Fengari .. 请让我知道 pathToConverter 应该是什么.. 我真的很困惑.. 是 ffmpeg.exe 的位置吗.. :O
  • @GuruprasadRao 变量 pathToConverter 是您拥有 FFMPEG 的字符串路径。该字符串通常存储在您的 Web.config 中。例如............ processInfo.FileName = Convert.ToString(ConfigurationManager.AppSettings["FFMPEGExePath"]);
猜你喜欢
  • 1970-01-01
  • 2012-09-19
  • 2011-12-31
  • 2012-07-10
  • 1970-01-01
  • 2012-04-14
  • 2017-05-06
  • 2021-02-27
  • 1970-01-01
相关资源
最近更新 更多