ffmpeg 将视频分割为小段
目录
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 将视频分割为小段相关推荐
- 如何将音频分割成小段?
如何将音频分割成小段?有时候我们需要将一个时间较长的音频文件进行分割,将它平均分割成几段,你知道如何操作吗?你可能会说用音频编辑软件,自己算好平均分割后音频的时间,然后再导出来,这种方法虽然也能完成操 ...
- php对视频分割,视频分割软件,将一个视频分割成多段小的视频,如何对视频进行剪切...
今天早上小编走在上班的路上,微风轻拂,树叶纷纷掉落,一片片泛黄的树叶,宛若落英一般纷飞,实在是美妙极了,正所谓一叶知秋,看着这满地落叶,小编不禁心想,是不是秋天快要到了.好了,不管秋天到不到,还是要继 ...
- 视频分割软件,将一个视频分割成多段小的视频
如今已是深秋,正所谓一叶知秋,看着这满地落叶,大家期待的中秋佳节和十一小长假也就快要到来了,不过对于小编这样的剪辑爱好者当然是要在家中剪辑视频了.不知道有没有和小编一样的呢?今天小编要给大家分享一个分 ...
- php对视频分割,一款简单实用的视频分割软件,快速将一段视频分割成两段
如何快速将一段视频分割成两部分?对于这个问题,小编今天为你介绍一款快速音视频分割利器,支持分割.剪切或修剪,内置视频预览,可以轻易按时间或将喜欢的片断截取下来,直接流剪切,不必重新编码.所以分割前后的 ...
- 将视频分割成多段,并将视频中的音频进行单独保存
很多朋友自己在剪辑视频的时候,如果一段素材长达几十分钟,那么该如何将视频进行分割,切成多个小片段,很多小伙伴不知道怎么操作,那么小编今天来分享教程一起来看看吧. 第一步,运行软件[媒体梦工厂]在软件主 ...
- 利用FFMPEG进行视频分割
转载地址:http://blog.csdn.net/bikeytang/article/details/51491139 利用FFMPEG命令进行文件分割 ffmpeg -ss 00:00:00 -i ...
- 视频太长怎么办?将一个长视频分割成2段的方法
视频分割简单来说,就是通过软件将视频按照需要截断分割.相信经常需要剪辑视频的小伙伴,也会遇到视频分割的情况,那么下面分享一个本人常用的视频分割的方法,操作很简单,只有简单几个步骤,有需要或者感兴趣的小 ...
- 一款简单实用的视频分割软件,快速将一段视频分割成两段
视频太多.太长,怎么统一分割,比如按段分割呢?今天小编给大家分享一个新的剪辑技巧,下面一起来试试. 所需工具 视频素材若干 操作步骤 运行[好简单批量智剪],"分割视频"中导入视频 ...
- ffmpeg剪切视频的python小脚本
# -*- coding: utf-8 -*- """ 用于剪切视频 input_video后面填写输入的视频文件名路径 start_time后面填写剪切视频的开始时间( ...
最新文章
- 从AdventureWorks学习数据库建模——保留历史数据
- Dell Fluid FS 集群NAS系统在4K非编环境的卓越表现
- oracle最新scn补丁,更新:Oracle全面修正了关于DB Link和SCN补丁的公告
- Android开发之搜Ya项目说明(3)
- MySQL-性能优化_影响MySQL性能的因素分析及解决方案
- MySQL使用CREATE INDEX创建索引
- 先安装证书服务(CA),再安装IIS,导致默认certsrv站点不能访问
- 《人月神话》---1
- uimsbf和 bslbf的含义
- html 纵向选项卡,竖直选项卡式面板的实现_html/css_WEB-ITnose
- oracle 查看动态性能视图,Oracle 中的V$ 动态性能视图
- 新议题,好多年前的华为面试题
- win11未建立以太网怎么办 windows11未建立以太网的解决方法
- [转载] python无法从nltk中调取文本 from nltk.book import *
- HTML 4.0 语 法 教 学
- English语法_分词 - 概述
- 计算机英语口语面试自我介绍,面试英文口语自我介绍(精选8篇)
- 用VHDL编写testbench激励文件
- HTTP 405 错误 – 方法不被允许 (Method not allowed)【转载】
- Using PyTorch Version of YOLOV3/TinyYOLOV3
热门文章
- VRRP协议以及vrrpd工具的使用 - 1
- ipadpro玩吃鸡用什么耳机,适合玩游戏用的低延迟蓝牙耳机推荐
- Qt Runtime Error ! R6025 - pure virtual function call
- ffmpeg 视频 转 gif
- (gitee)gitee凭据配置
- ROS + UDEV管理开源小车rikirobot的USB设备
- 计算机小学期实践报告,北科大一小学期暑期计算机实践实习报告.pdf
- 行云海cms mysql检测不出版本_行云海CMS(XYHCMS)网站内容管理系统 v3.6 bulid1012
- Unity插件之TextMeshPro 富文本
- 5G: 我们太过于狂妄自大