目录文章描述开发环境开发工具实现代码实现效果文章描述 在前面两篇写完了对于GIF动态图片的分割和合成,这一篇来写下将视频文件分割成一帧帧图片的方法。 开发环境 .net Frame
在前面两篇写完了对于GIF动态图片的分割和合成,这一篇来写下将视频文件分割成一帧帧图片的方法。
.net Framework版本:4.5
Visual Studio 2013
public static void Run(string cmd)
{
try
{
string FFmpeg = AppDomain.CurrentDomain.BaseDirectory + "ffmpeg.exe";
ProcessStartInfo startInfo = new ProcessStartInfo(ffmpeg);
startInfo.UseshellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.windowstyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = cmd;
Process process = Process.Start(startInfo);
process.WaitForExit(5000);
process.Kill();
}
catch { }
}
/// <summary>
/// 分割视频
/// </summary>
/// <param name="videoPath">视频路径</param>
/// <param name="outPath">输出图片路径</param>
public static void Split(string videoPath, string outPath)
{
Run(string.FORMat(" -i {0} -r 10 -y -f image2 -ss 00:00:01 {1}\\%d.jpg", videoPath, outPath));
}
/// <summary>
/// 按时间获取某帧图片
/// </summary>
/// <param name="videoPath">视频路径</param>
/// <param name="outPath">输出图片路径</param>
/// <param name="frameTime">时间(格式:00:00:01)</param>
public static void GetFrame(string videoPath, string outPath, string frameTime)
{
Run(string.Format("-ss 00:00:01 -i {1} {2}", frameTime, videoPath, outPath));
}
private void btn_select_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "视频|*.mp4;*.avi";
ofd.Title = "请选择视频文件";
ofd.InitialDirectory = Application.StartupPath;
if (ofd.ShowDialog() == DialogResult.OK)
{
axWindowsMediaPlayer1.URL = ofd.FileName;
string outPath = Application.StartupPath + "\\cover.jpg";
FFmpegUtil.GetFrame(ofd.FileName, outPath, "00:00:01");
pictureBox1.Image = Image.FromFile(outPath);
}
}
private void btn_split_Click(object sender, EventArgs e)
{
if(!File.Exists(axWindowsMediaPlayer1.URL)){
MessageBox.Show("未选择视频");
return;
}
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.Description = "选择存储位置";
fbd.ShowNewFolderButton = true;
if (fbd.ShowDialog() == DialogResult.OK)
{
string[] files = Directory.GetFiles(fbd.SelectedPath);
foreach (string file in files)
{
File.Delete(file);
}
FFmpegUtil.Split(axWindowsMediaPlayer1.URL, fbd.SelectedPath);
if (MessageBox.Show("视频分割完成,是否打开文件夹?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
Process.Start(fbd.SelectedPath);
}
}
}
代码解析:视频分割技术主要是利用了FFMpeg来实现的,C#在这里其实只是一个调用者。这个在方法Run
中可以看的出来,首先是需要将FFMpeg放到debug目录下的,然后使用Process类来调用;这里有个问题需要注意下,就是调用后经常会被卡住,没办法退出来,所以使用了WaitForExit(2000)
来处理。并且在等待结束后将该进程给Kill掉了,这个方式可能不太规范,如有更好的方法,感谢指教。
调用的话就直接输入命令就可以了,代码中分别使用了以下两条命令:
到此这篇关于详解C#如何实现分割视频的文章就介绍到这了,更多相关C#分割视频内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: 详解C#如何实现分割视频
本文链接: https://lsjlt.com/news/176181.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0