Dev*_*ave 3 c# screenshot ffmpeg
我正在尝试使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码在正确的目标(saveThumbnailTo)中成功创建文件时,只有图片是完全黑色的.我已经尝试更改代码中的秒值,以确保我不只是从视频的开头得到一张空白图片.顺便提一下,路径指的是我的视频存储位置.
我目前正在调用上面的代码:
GetVideoThumbnail(videoPath, folderPath + "/poster.jpg", 100)
Run Code Online (Sandbox Code Playgroud)
..然后将它传递给我的视图以显示图片.我只是想知道".jpg"是否是我应该给这个文件的扩展名,因为我不完全确定?
编辑:当我从命令行运行相同的命令时,我收到以下错误:
编解码器'mjpeg'的像素格式'yuv420p'不兼容,自动选择格式'yuvj420p'
它出现在黄色,和
[image2 @ 02S96AE0]无法从模式'poster.jpg'获取帧文件名编号2 an_interleaved_write_frame():无效参数
它以红色显示.
任何人都可以帮助我正常工作,因为我完全不熟悉ffmpeg命令行,不知道我做错了什么.我试过删除vcodec参数并获取相同的错误消息.
试试这个:
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);
}
Run Code Online (Sandbox Code Playgroud)
简短说明:
使用"seconds"参数的不同值尝试多次.另外,请确保"pathToConvertor"正确无误.
这对我有用,最近在Windows机器上构建了ffmpeg.exe.
让我知道事情的后续.