目录

1. 先看一下分割结果

2. MAC安装ffmpeg

3. ffmpeg视频分割命令介绍

4.编写java程序

(1). 调用:

(2). 视频分割的java工具类

5.参考:


1. 先看一下分割结果

视频命名规则:视频i_时间段xx_yy

  • i:第i个视频
  • xx:该段视频的开始时间
  • yy:该段视频的结束时间,如3即3分钟处结束,end表示视频末尾

2. MAC安装ffmpeg

我是在mac下开发的,即在终端输入:

brew install ffmpeg

等一会安装成功即可

3. ffmpeg视频分割命令介绍

/*** ffmpeg将视频分割* ffmpeg命令eg:* 1. ffmpeg -ss 00:00:00 -i test.mp4 -c copy -t  600  output.mp4* 此处是将视频test.mp4从00:00:00处分割600s,分割出的视频名字是output.mp4* 2. ffmpeg -ss 00:00:00 -t 00:01:30 -i test.mp4 -vcodec copy -acodec copy output.mp4* 此处是将视频test.mp4从00:00:00处分割到01:30处,分割出的视频名字是output.mp4** 备注:* 有些视频裁剪后你会发现可能开始和结束都不是很准确,有可能是从00秒开始,33秒结束。* 因为这些视频里30秒处地方刚好不是关键帧,而ffmpeg会在你输入的时间点附近圆整到最接近的关键帧处,然后做接下来的事情。** <p>* 注释:* -ss  指定从什么时间开始分割* -i   要分割的视频文件* -t   指定需要截取多长时间:* 格式如下* 1. -t  xx        // 单位 秒,指截取30s* 2. -t  00:01:30  // 时:分:秒,指截取到播放时间为01:30处* 注意 :-ss 要放在 -i 之前* <p>*/

4.编写java程序

此处我直接把封装好的视频分割的java程序贴出

(1). 调用:

    public static final String VIDEO_PATH = "/Users/amarao/业余/剪辑/电影/我的影片.mp4";public static final String OUTPUT_PATH = "/Users/amarao/业余/剪辑/output/";public static void main(String[] args) throws IOException {// 将VIDEO_PATH分割为3分钟一段,VIDEO_PATH总共29分钟,如果结尾有不足3分钟的拼接的最后一段视频上FfmpegDevideVideo.splitVideoFile(VIDEO_PATH, OUTPUT_PATH, 29, 3, true);}

(2). 视频分割的java工具类

public class FfmpegDevideVideo {/*** 将视频分割为小段** @param fileName    源文件名字(带路径)* @param outputPath  输出文件路径,会在该路径下根据系统时间创建目录,并在此目录下输出段视频* @param videoTime   总时间,单位 分钟* @param periodTime  小段视频时长 单位 分钟* @param merge       true合并,false单独分割 说明:是否将整个视频结尾部分不足一次分割时间的部分,合并到最后一次分割的视频中,即false会比true多生成一段视频**/public static void splitVideoFile(String fileName, String outputPath, float videoTime, int periodTime,  boolean merge) {final String TAG = "----------------------------";// 在outputPath路径下根据系统时间创建目录File file = createFileBySysTime(outputPath);if (file == null) {System.out.println("分割视频失败,创建目录失败");return;}outputPath = file.getPath() + File.separator; // 更新视频输出目录// 计算视频分割的个数int count;// 分割为几段float remain = 0; // 不足一次剪辑的剩余时间if (merge) {count = (int) (videoTime / periodTime);remain = videoTime % periodTime; // 不足一次剪辑的剩余时间} else {count = (int) (videoTime / periodTime) + 1;}System.out.println("将视频分割为" + count + "段,每段约" + periodTime + "分钟");String indexName; // 第 i 个视频,打印日志用final String FFMPEG = "ffmpeg";String startTime; // 每段视频的开始时间String periodVideoName; // 每段视频的名字,名字规则:视频i_时间段xx_yyfloat duration; // 每次分割的时长String command;// 执行的命令// 得到视频后缀 如.mp4String videoSuffix = fileName.substring(fileName.lastIndexOf("."));//得到点后面的后缀,包括点Runtime runtime = Runtime.getRuntime(); // 执行命令者// 将视频分割为count段for (int i = 0; i < count; i++) {indexName = "第" + i + "个视频";// 决定是否将整个视频结尾部分不足一次的时间,合并到最后一次分割的视频中if (merge) {if (i == count - 1) {duration = periodTime * 60 + remain * 60;// 将整个视频不足一次剪辑的时间,拼接在最后一次剪裁中startTime = periodTime * i + ":00";periodVideoName = "视频" + i + "_时间段" + periodTime * i + "_end" + videoSuffix;} else {duration = periodTime * 60;startTime = periodTime * i + ":00";periodVideoName = "视频" + i + "_时间段" + periodTime * i + "_" + periodTime * (i + 1) + videoSuffix;}} else {duration = periodTime * 60;startTime = periodTime * i + ":00";periodVideoName = "视频" + i + "_时间段" + periodTime * i + "_" + periodTime * (i + 1) + videoSuffix;}// 执行分割命令try {// 创建命令command = FFMPEG + " -ss " + startTime + " -i " + fileName + " -c copy -t " + duration + " " + outputPath + periodVideoName;System.out.println(TAG);System.out.println(indexName);System.out.println("执行命令:" + command);runtime.exec(command);System.out.println(indexName + "分割成功");} catch (Exception e) {e.printStackTrace();System.out.println(indexName + "分割失败!!!!!!");}}}/*** 在指定目录下根据系统时间创建文件夹* 文件名字eg:2019-07-02-23-56-31** @param path 路径:eg: "/Users/amarao/业余/剪辑/output/";*             结果:创建成功/Users/amarao/业余/剪辑/output/2019-07-03-10-28-05*             <p>*             步骤:*             1. 读取系统时间*             2. 格式化系统时间*             3. 创建文件夹*             <p>*             参考:http://www.bubuko.com/infodetail-1685972.html*/public static File createFileBySysTime(String path) {// 1. 读取系统时间Calendar calendar = Calendar.getInstance();Date time = calendar.getTime();// 2. 格式化系统时间SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");String fileName = format.format(time); //获取系统当前时间并将其转换为string类型,fileName即文件名// 3. 创建文件夹String newPath = path + fileName;File file = new File(newPath);//如果文件目录不存在则创建目录if (!file.exists()) {if (!file.mkdir()) {System.out.println("当前路径不存在,创建失败");return null;}}System.out.println("创建成功" + newPath);return file;}}

5.参考:

http://yuncode.net/code/c_58c0fcb615db178

https://www.jianshu.com/p/cf1e61eb6fc8

https://blog.csdn.net/wanglf1986/article/details/54092203

ffmpeg 将视频分割为小段相关推荐

  1. 如何将音频分割成小段?

    如何将音频分割成小段?有时候我们需要将一个时间较长的音频文件进行分割,将它平均分割成几段,你知道如何操作吗?你可能会说用音频编辑软件,自己算好平均分割后音频的时间,然后再导出来,这种方法虽然也能完成操 ...

  2. php对视频分割,视频分割软件,将一个视频分割成多段小的视频,如何对视频进行剪切...

    今天早上小编走在上班的路上,微风轻拂,树叶纷纷掉落,一片片泛黄的树叶,宛若落英一般纷飞,实在是美妙极了,正所谓一叶知秋,看着这满地落叶,小编不禁心想,是不是秋天快要到了.好了,不管秋天到不到,还是要继 ...

  3. 视频分割软件,将一个视频分割成多段小的视频

    如今已是深秋,正所谓一叶知秋,看着这满地落叶,大家期待的中秋佳节和十一小长假也就快要到来了,不过对于小编这样的剪辑爱好者当然是要在家中剪辑视频了.不知道有没有和小编一样的呢?今天小编要给大家分享一个分 ...

  4. php对视频分割,一款简单实用的视频分割软件,快速将一段视频分割成两段

    如何快速将一段视频分割成两部分?对于这个问题,小编今天为你介绍一款快速音视频分割利器,支持分割.剪切或修剪,内置视频预览,可以轻易按时间或将喜欢的片断截取下来,直接流剪切,不必重新编码.所以分割前后的 ...

  5. 将视频分割成多段,并将视频中的音频进行单独保存

    很多朋友自己在剪辑视频的时候,如果一段素材长达几十分钟,那么该如何将视频进行分割,切成多个小片段,很多小伙伴不知道怎么操作,那么小编今天来分享教程一起来看看吧. 第一步,运行软件[媒体梦工厂]在软件主 ...

  6. 利用FFMPEG进行视频分割

    转载地址:http://blog.csdn.net/bikeytang/article/details/51491139 利用FFMPEG命令进行文件分割 ffmpeg -ss 00:00:00 -i ...

  7. 视频太长怎么办?将一个长视频分割成2段的方法

    视频分割简单来说,就是通过软件将视频按照需要截断分割.相信经常需要剪辑视频的小伙伴,也会遇到视频分割的情况,那么下面分享一个本人常用的视频分割的方法,操作很简单,只有简单几个步骤,有需要或者感兴趣的小 ...

  8. 一款简单实用的视频分割软件,快速将一段视频分割成两段

    视频太多.太长,怎么统一分割,比如按段分割呢?今天小编给大家分享一个新的剪辑技巧,下面一起来试试. 所需工具 视频素材若干 操作步骤 运行[好简单批量智剪],"分割视频"中导入视频 ...

  9. ffmpeg剪切视频的python小脚本

    # -*- coding: utf-8 -*- """ 用于剪切视频 input_video后面填写输入的视频文件名路径 start_time后面填写剪切视频的开始时间( ...

最新文章

  1. 从AdventureWorks学习数据库建模——保留历史数据
  2. Dell Fluid FS 集群NAS系统在4K非编环境的卓越表现
  3. oracle最新scn补丁,更新:Oracle全面修正了关于DB Link和SCN补丁的公告
  4. Android开发之搜Ya项目说明(3)
  5. MySQL-性能优化_影响MySQL性能的因素分析及解决方案
  6. MySQL使用CREATE INDEX创建索引
  7. 先安装证书服务(CA),再安装IIS,导致默认certsrv站点不能访问
  8. 《人月神话》---1
  9. uimsbf和 bslbf的含义
  10. html 纵向选项卡,竖直选项卡式面板的实现_html/css_WEB-ITnose
  11. oracle 查看动态性能视图,Oracle 中的V$ 动态性能视图
  12. 新议题,好多年前的华为面试题
  13. win11未建立以太网怎么办 windows11未建立以太网的解决方法
  14. [转载] python无法从nltk中调取文本 from nltk.book import *
  15. HTML 4.0 语 法 教 学
  16. English语法_分词 - 概述
  17. 计算机英语口语面试自我介绍,面试英文口语自我介绍(精选8篇)
  18. 用VHDL编写testbench激励文件
  19. HTTP 405 错误 – 方法不被允许 (Method not allowed)【转载】
  20. Using PyTorch Version of YOLOV3/TinyYOLOV3

热门文章

  1. VRRP协议以及vrrpd工具的使用 - 1
  2. ipadpro玩吃鸡用什么耳机,适合玩游戏用的低延迟蓝牙耳机推荐
  3. Qt Runtime Error ! R6025 - pure virtual function call
  4. ffmpeg 视频 转 gif
  5. (gitee)gitee凭据配置
  6. ROS + UDEV管理开源小车rikirobot的USB设备
  7. 计算机小学期实践报告,北科大一小学期暑期计算机实践实习报告.pdf
  8. 行云海cms mysql检测不出版本_行云海CMS(XYHCMS)网站内容管理系统 v3.6 bulid1012
  9. Unity插件之TextMeshPro 富文本
  10. 5G: 我们太过于狂妄自大