近期需要批量处理视频,将视频开头和结尾的部分去掉。最初想用格式工厂,但没有找到如何操作,于是考虑自己编程实现视频批量剪切。百度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

C#批量剪切视频文件相关推荐

  1. json字段顺序读取 python_如何利用Python批量读取视频文件的时间长度?

    本期的主题是利用Python来实现对视频文件时间长度的读取. 在学习编程语言时,相比较于通过书本来学习知识,我更喜欢通过观看学习视频的方式来进行学习,通过主讲老师的讲解,我能很直观且快速的了解一些知识 ...

  2. 用 ffmpeg 实现批量剪切视频

    title: 用 ffmpeg 实现批量剪切视频 date: 2018-01-21 17:03:27 tags: categories: 不要在意思这些细节 一直对编辑视频很有兴趣,上大学的时候学了一 ...

  3. 【教程】咕嘎批量文件清单快速查找搜索文件,批量移动复制或批量剪切至新文件夹(批量删除指定文件也可以)

    先说说场景:前一段时间出了一个批量文件名搜索图片的系统,很多朋友告诉我们不是图片的需求能用么,今天根据朋友的特殊场景,优化了对应的文件格式问题,支持任何格式,比如说批量搜索word文件,excel文件 ...

  4. 手把手教你怎么批量压缩视频文件

    下载的视频内存太大不好保存的话怎么办?电脑手机内存不够用怎么办?怎么快速压缩保存的视频内存?今天,小编就给大家带来实操教学,教你如何批量压缩视频的内存大小. 一.首先我们先在"固乔科技&qu ...

  5. 批量检测视频文件完整性

    需求背景:有个项目要求用户上传视频文件,由于网络不稳定某些情况下可能出现视频文件不完整的情况,需要检测视频文件的完整性,由于数量很多,所以需要批量检测. 检测原理:ffprobe是视频处理程序ffmp ...

  6. 无损批量转换视频文件的格式的方法

    有时候在工作生活中,我们需要用到特点的一些视频格式,那当我们下载或者原创的视频文件格式不满足需求的时候,怎么才能快速批量地转换这些视频文件并且不损坏视频画质清晰度呢?其实方法并不难,跟着小编来看看操作 ...

  7. 批量提取视频文件信息(文件大小及时长)并统计

    随着设备性能提高,视频文件越来越大了. 服务器在对外提供视频服务时,需要承担越来越大的存储负担. 一般提供1080P的AVC编码视频已满足多数观看需求.(1小时视频大约1.3G) 此文要解决的就是关于 ...

  8. Shell脚本利用ffmpeg批量处理视频文件

    最近遇到一个问题,对一个文件下所有视频文件进行切割处理,类似于把每个长30分钟视频文件截取其中的第10分钟到第20分钟的内容,截取出来的视频生成一个新的视频文件.当然在Linux底下我们有好用的工具f ...

  9. 教你如何批量快速给多个视频文件消音处理

    批量采集或下载的视频文件有时候会自带一些BGM或者解说,如果我们不喜欢的话怎么才能快速批量的进行消音处理呢?今天,小编就要跟各位视频剪辑爱好者来分享一下如何批量的将多个视频进行消音处理,感兴趣的小伙伴 ...

最新文章

  1. 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 实现插件...
  2. ssh闲置一段时间自动登出问题的解决
  3. python为什么叫爬虫?Python和爬虫有什么关系?
  4. 动态规划在求解硬币问题中的应用(JAVA)--币制最大化、找零问题、硬币收集问题
  5. iOS 开发线程 gcd
  6. ROS学习——3 roslaunch的使用
  7. 2013,HTML5将席卷国内互联网
  8. myeclipse 创建 maven项目的时候出现:invalid project description 解决方法
  9. wpsmac历史版本_wps office下载
  10. (二)计算软件的安装:truegrid、ls-prepost、ls-dyna
  11. 毕业设计之 ---- 基于机器视觉的图像拼接算法
  12. linux下双机热备份系统,基于Linux的双机热备份系统的研究与设计
  13. 好的编码习惯是一场代码驱邪仪式
  14. 百度console招聘信息
  15. H3C交换机如何进行批量端口配置
  16. 05-D. 音像制品(类与对象)
  17. DFRobot高精度低功耗数字温湿度传感器SHT40
  18. 雷电模拟器一键宏实现循环点击
  19. 高防cdn和高防ip的区别
  20. Java基础算法题(07):输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

热门文章

  1. 解决Win11更新后C盘告急
  2. 时间机器 Time Machine 三星T7 移动硬盘SSD解决方案
  3. 理想职业是计算机的英语作文,我的理想职业大学英语作文
  4. Fiddler 抓包下载 M3U8 视频
  5. js 将字符串转化为number的简单方式
  6. 下载 macOS 系统安装程序的方法
  7. 上周热点回顾(8.20-8.26)
  8. 服务器重装系统用友u6,64系统装U6我用win7 64位旗舰版的系统,安装用
  9. 黑龙江省计算机一级考试科目,黑龙江省2021年3月全国计算机等级考试时间和科目调整...
  10. 单位增益缓冲器的反馈路径中电阻的作用是什么?