C#批量剪切视频文件

news/2024/10/17 4:52:37/

  近期需要批量处理视频,将视频开头和结尾的部分去掉。最初想用格式工厂,但没有找到如何操作,于是考虑自己编程实现视频批量剪切。百度C#视频处理,大部分搜索结果都是使用ffmpeg.exe处理视频,本文也学习并使用该技术路线。
  之前的文章《Ubuntu中创建GIF文件》中使用过ffmpeg,那时是在Ubuntu下用ffmpeg将一段视频中的部分内容转换为gif文件。关于ffmpeg在此不再介绍,有兴趣的可以百度详情,总之是一款功能强大的视频处理程序。
  本文中主要使用ffmpeg的两种功能,获取视频时长和剪切视频。
  获取视频时长主要使用的是参考文献8中的代码,并对其进行了调整,原文中函数返回的是字符串形式的时、分、秒,本文改成了返回总的秒数,主要代码如下:

	public static double GetVideoDuration(string sourceFile, string ffmpegfile){using (System.Diagnostics.Process ffmpeg = new System.Diagnostics.Process()){String duration;String result;StreamReader errorreader;ffmpeg.StartInfo.UseShellExecute = false;ffmpeg.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;ffmpeg.StartInfo.RedirectStandardError = true;ffmpeg.StartInfo.FileName = ffmpegfile;ffmpeg.StartInfo.Arguments = "-i " + sourceFile;ffmpeg.StartInfo.CreateNoWindow = true;// 不显示程序窗口ffmpeg.Start();errorreader = ffmpeg.StandardError;ffmpeg.WaitForExit();result = errorreader.ReadToEnd();duration = result.Substring(result.IndexOf("Duration: ") + ("Duration: ").Length, ("00:00:00").Length);return TimeSpan.Parse(duration).TotalSeconds; ;}}

  使用ffmepg获取文件时长的命令形式如下所示,在程序中使用process类调用ffmpeg并传递命令行参数时要注意sourcefile中不能包含空格或其它特殊字符,否则ffmpeg就报“No such file or directory”的错误。

	ffmpeg -i sourcefile

  获取视频文件时长后,再根据参考文献7,使用下列命令剪切视频。其中-i后指定的是源文件路径,-ss后指定开始秒数,-to指定结束秒数,最后指定输出文件路径。

	ffmpeg -i sourcefile -ss 30 -c copy -to 40 destfile

  仿照获取时长函数,编写了剪切视频的函数,主要代码如下所示:

	public static string ProcessVideo(string ffmpegfile, string sourceFile,string destFile,double fromSecond, double toSecond){using (System.Diagnostics.Process ffmpeg = new System.Diagnostics.Process()){StreamReader errorreader;ffmpeg.StartInfo.UseShellExecute = false;ffmpeg.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;ffmpeg.StartInfo.RedirectStandardError = true;ffmpeg.StartInfo.FileName = ffmpegfile;ffmpeg.StartInfo.Arguments = string.Format("-i {0} -ss {1} -c copy -to {2} {3}", sourceFile, fromSecond, toSecond, destFile);ffmpeg.StartInfo.CreateNoWindow = true;// 不显示程序窗口ffmpeg.Start();errorreader = ffmpeg.StandardError;ffmpeg.WaitForExit();return errorreader.ReadToEnd();}}

  测试过程中主要遇到了两类ffmpeg报错:
  1)“Unable to find a suitable output format for ‘pipe:’”。排查命令行参数,最终发现将“-ss” 写成了“- ss”,中间多了个空格,去掉空格后即可解决问题;
  2)“Unrecognized option ‘c’”。百度错误信息没有找到答案,后来觉得可能是最初下的ffmpeg版本太低(在太平洋电脑网上下了个四五年之前的版本),于是在ffmpeg官网上下了最新的可执行文件,在运行程序即可正常执行(官网地址见参考文献9,也将最新版本的ffmpeg上传到csdn资源,目前正在审核)。

  基于上述函数,编写了批量剪切视频的程序,主界面如下所示:
在这里插入图片描述
  选择要批量处理的视频文件夹,然后设置开头和结尾要去掉的时长,最后设置输出文件前缀后,点击开始剪辑按钮批量处理视频。
在这里插入图片描述
  最后的处理结果如下所示:在这里插入图片描述
  参考文献7的评论中有人提到使用上面的视频剪切命令行输出的文件比较模糊,并给出了另一个能提高视频剪切效果的命令组合,有兴趣的可以试试。

参考文献:
[1]https://www.cnblogs.com/jhlong/p/7417130.html
[2]https://www.haolizi.net/example/view_2570.html
[3]https://blog.csdn.net/CHIHUN_LOVE/article/details/52537855
[4]https://blog.csdn.net/xcanel/article/details/113339176
[5]https://blog.csdn.net/cctvcqupt/article/details/80695879?utm_source=blogxgwz0
[6]https://blog.csdn.net/wei_jie_zhang/article/details/46122501?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.pc_relevant_paycolumn_v3&spm=1001.2101.3001.4242.1&utm_relevant_index=3
[7]https://blog.csdn.net/angus_17/article/details/80696989
[8]https://blog.csdn.net/weixin_42402326/article/details/117259209
[9]http://ffmpeg.org/download.html
[10]https://stackoverflow.com/questions/43286481/unable-to-find-a-suitable-output-format-for-pipe-long-ffmpeg-code


http://www.ppmy.cn/news/589385.html

相关文章

用Python剪辑视频?太简单了

人生苦短,快学Python! 最近我在网上下载一个视频,结果下载到本地是近百个视频片段,为了方便观看只能将这些片段合并为一个视频整体。 不过我并没有搜到能够处理类似情况的小工具,只是发现剪映等软件可以实现视频合并功…

在电脑上剪辑视频用什么工具,视频制作和剪辑工具

在进行短视频创作时,必不可少的便是剪辑工具。在电脑上剪辑视频用什么工具?今天小编就带大家了解几款日常使用中性价比较高的几款视频剪辑工具。 工具一:Adobe Premiere(Pr) Adobe Premiere是一款很常用的视频编辑工具…

轻松编辑,视频魔法,文本操作即成精彩影片(通过字幕来剪切视频)

AutoCut: 通过字幕来剪切视频 AutoCut 对你的视频自动生成字幕。然后你选择需要保留的句子,AutoCut 将对你视频中对应的片段裁切并保存。你无需使用视频编辑软件,只需要编辑文本文件即可完成剪切。 使用例子 假如你录制的视频放在 2022-11-04/ 这个文…

python批量剪切视频文件

python也支持视频处理,参考文献1中介绍了几种视频处理方式,本文采用moviepy模块进行视频处理。   moviepy不是python的默认安装模块,需要安装该模块,否则执行程序时会报下面的错误:   可以通过下列命令在线安装mo…

ffmpeg视频剪切与拼接

文章目录 ffmpeg工具进行视频剪切与合并剪切视频拼接视频ts格式拼接将ts格式文件转为mp4格式mp4格式拼接 ffmpeg工具常用命令 ffmpeg的安装及基本使用可以看上一篇博客 FFmpeg工具进行快速的视频拼接 ffmpeg工具进行视频剪切与合并 多媒体视频处理工具FFmpeg有非常强大的功能…

使用免费开源软件 Blender 编辑视频,从剪切开始

Blender 是一款强大的免费开源的 3D 建模软件,不为人知的是它还是一款强大的视频编辑软件。因为是免费软件使用它编辑视频,不用担心水印的问题,还能享受专业视频编辑软件的功能。 下面会简单介绍如何使用这款软件做视频剪辑。 1. 下载 Blen…

二叉树题目:二叉树展开为链表

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 后记 题目 标题和出处 标题:二叉树展开为链表 出处:114. 二叉树展开为链表 难度 3 级 …

ModaHub魔搭社区:向量数据库MIlvus服务端配置(三)

目录 gpu 区域 logs 区域 metric_config 区域 gpu 区域 在该区域选择是否在 Milvus 里启用 GPU 用于搜索和索引创建。同时使用 CPU 和 GPU 可以达到资源的最优利用,在特别大的数据集里做搜索时性能更佳。 若要切换到 CPU-only 模式,只要将 enable 设…