- 浏览: 134654 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
zheng_zhimeng:
这个版本在linux的版本下有问题,亲们用的没有问题么
文档展示:IcePDF 将PDF转换为图片 -
yuming.xiao:
转换的某些图片,有些模糊。不知道楼主遇到这个问题没有
文档展示:IcePDF 将PDF转换为图片 -
zenghongqing:
您好,请教您一个问题://cell内容字符串总宽度 doub ...
Java POI Excel 行高自适应 -
xiang37:
http://xiva.iteye.com/blog/2066 ...
视频分割项目预研 -
I白I:
怎么还配置数据库了?
视频分割项目预研
由于工作需要,研究下视频切割。
现在的情况:视频切割是重中之重,后续项目功能按照这个功能来扩展的。
由于ffmpeg名声太响,就从它开始了,开发平台暂时用windows;组件暂时用32位的。
第一步: 到ffmpeg官网下载ffmpeg组件
http://www.ffmpeg.org/
http://www.ffmpeg.org/download.html
http://ffmpeg.zeranoe.com/builds/
下载后的组件
第二部:搭建Java项目
新建Java项目
添加日志
jar包:log4j-1.2.13.jar
log4j配置
日志测试
配置配置文件
配置文件config.properties
读取配置文件
测试
第三步:使用ffmpeg获取视频信息
测试结果截图
然后再看一下怎么切割视频
测试结果
之后就是处理多种格式的视频,音频;结合原有项目添加视频切割功能;处理大文件时的考量;配置测试linux环境的视频切割功能等等杂事。
相当于截屏!
可以的,这就相当于把视频按帧分割
相当于截屏!
现在的情况:视频切割是重中之重,后续项目功能按照这个功能来扩展的。
由于ffmpeg名声太响,就从它开始了,开发平台暂时用windows;组件暂时用32位的。
第一步: 到ffmpeg官网下载ffmpeg组件
http://www.ffmpeg.org/
http://www.ffmpeg.org/download.html
http://ffmpeg.zeranoe.com/builds/
下载后的组件
第二部:搭建Java项目
新建Java项目
添加日志
jar包:log4j-1.2.13.jar
log4j配置
# Global logging configuration log4j.rootLogger=INFO,stdout,ADMINLOG,error #log4j.logger.common=DEBUG #log4j.category.common.TestLog4j=debug # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %5p (%F:%L) - %m%n log4j.appender.stdout.Target=System.out #File output... log4j.appender.ADMINLOG=org.apache.log4j.DailyRollingFileAppender log4j.appender.ADMINLOG.Append=true log4j.appender.ADMINLOG.DatePattern='_'yyyyMMdd'.log' log4j.appender.ADMINLOG.layout=org.apache.log4j.PatternLayout log4j.appender.ADMINLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c %x - %m%n log4j.appender.ADMINLOG.File=Log.log log4j.appender.ADMINLOG.Threshold=INFO log4j.appender.error=org.apache.log4j.FileAppender log4j.appender.error.File=log_error.log log4j.appender.error.layout=org.apache.log4j.PatternLayout log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS}[%p]: %m%n log4j.appender.error.Threshold=ERROR
日志测试
配置配置文件
配置文件config.properties
ffmpeg_home=D:/ffmpeg/ffmpeg-20140611-git-b2fb65c-win32-static/ db_url=jdbc:oracle:thin:@localhost:1521:orcl db_username=username db_password=password
读取配置文件
package com.zas.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class PropertiesUtil { private static Properties properties = new Properties(); static{ try { InputStream in = new FileInputStream(new File("config.properties")); properties.load(in); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static String get(String key){ return properties.getProperty(key); } public static void set(String key, String value){ properties.setProperty(key, value); } public static int getForInt(String key){ String value = properties.getProperty(key); return Integer.valueOf(value); } }
测试
第三步:使用ffmpeg获取视频信息
package com.zas.ffmpeg; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import com.zas.util.PropertiesUtil; public class FFmpegHelloWord { static Logger logger = Logger.getLogger(FFmpegHelloWord.class); final static String FFMPEG_HOME = PropertiesUtil.get("ffmpeg_home"); final static String TEST_FILE = "D:/ffmpeg/video/Wildlife.wmv"; /** * ffmpeg之旅开始 获取一个视频的基本信息 */ private static void helloFFmpeg() { List<String> commandList = new ArrayList<String>(); commandList.add(FFMPEG_HOME + "/bin/ffmpeg "); commandList.add("-i"); commandList.add(TEST_FILE); ProcessBuilder builder = new ProcessBuilder(); builder.command(commandList); builder.redirectErrorStream(true); //视频信息结果 StringBuffer videoInfo = new StringBuffer(); long beginTime = System.nanoTime(); try { Process p = builder.start(); //保存ffmpeg的输出结果流 BufferedReader buf = null; buf = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = null; while ((line = buf.readLine()) != null) { logger.info(line); videoInfo.append(line); } p.waitFor();// 这里线程阻塞,将等待外部转换进程运行成功运行结束后,才往下执行 } catch (IOException e) { e.printStackTrace(); logger.error(e); } catch (InterruptedException e) { e.printStackTrace(); logger.error(e); } long endTime = System.nanoTime(); logger.info("处理耗时: " + (endTime - beginTime) / 1000000 + " 毫秒。 "); logger.info("视频信息: " + videoInfo); } public static void main(String[] args) { FFmpegHelloWord.helloFFmpeg(); } }
测试结果截图
然后再看一下怎么切割视频
package com.zas.ffmpeg; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import com.zas.util.PropertiesUtil; public class VideoCutting { static Logger logger = Logger.getLogger(VideoCutting.class); final static String FFMPEG_HOME = PropertiesUtil.get("ffmpeg_home"); // final static String TEST_FILE = "D:/ffmpeg/video/Wildlife.wmv"; final static String TEST_FILE = "D:/ffmpeg/video/1111.wmv"; final static String OUTPUT_PATH = "D:/ffmpeg/video/output.wmv"; /** * 使用ffmpeg 截取特定时长视频 */ private static void cutting() { //ffmpeg -ss 00:5:28 -i "1111.wmv" -acodec copy -vcodec copy -t 00:03:25 output.wmv //这行命令解释为:从文件 1111.wmv 第 5:28 分秒开始,截取 03: 25 的时间,其中视频和音频解码不变,输出文件名为 output.wmv 。 List<String> commandList = new ArrayList<String>(); commandList.add(FFMPEG_HOME + "/bin/ffmpeg "); commandList.add("-ss"); commandList.add("00:5:28"); commandList.add("-i"); commandList.add(TEST_FILE); commandList.add("-acodec"); commandList.add("copy"); commandList.add("-vcodec"); commandList.add("copy"); commandList.add("-t"); commandList.add("00:03:25"); commandList.add(OUTPUT_PATH); ProcessBuilder builder = new ProcessBuilder(); builder.command(commandList); builder.redirectErrorStream(true); //视频信息结果 StringBuffer videoInfo = new StringBuffer(); long beginTime = System.nanoTime(); try { Process p = builder.start(); //保存ffmpeg的输出结果流 BufferedReader buf = null; buf = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = null; while ((line = buf.readLine()) != null) { logger.info(line); videoInfo.append(line); } p.waitFor();// 这里线程阻塞,将等待外部转换进程运行成功运行结束后,才往下执行 } catch (IOException e) { e.printStackTrace(); logger.error(e); } catch (InterruptedException e) { e.printStackTrace(); logger.error(e); } long endTime = System.nanoTime(); logger.info("处理耗时: " + (endTime - beginTime) / 1000000 + " 毫秒。 "); logger.info("视频信息: " + videoInfo); } public static void main(String[] args) { VideoCutting.cutting(); } }
测试结果
之后就是处理多种格式的视频,音频;结合原有项目添加视频切割功能;处理大文件时的考量;配置测试linux环境的视频切割功能等等杂事。
- log4j-1.2.13.jar (349.8 KB)
- 下载次数: 7
评论
5 楼
xiang37
2014-06-12
http://xiva.iteye.com/blog/2066590 可以参考一下我博客写的,使用dll操作的,不过功能没有接全,也可以移植到liunx平台。
4 楼
I白I
2014-06-12
怎么还配置数据库了?
3 楼
zhuyufufu
2014-06-12
freezingsky 写道
bewithme 写道
好文章,这个东东能把视频文件切成一张张图片吗?
相当于截屏!
可以的,这就相当于把视频按帧分割
2 楼
freezingsky
2014-06-11
bewithme 写道
好文章,这个东东能把视频文件切成一张张图片吗?
相当于截屏!
1 楼
bewithme
2014-06-11
好文章,这个东东能把视频文件切成一张张图片吗?
发表评论
-
oracle按照某一字段里的数字排序
2014-10-21 19:59 1022select * from LSK_SBCAJ t ord ... -
JS onkeydown onenter
2014-10-20 16:53 954html中 onenter不是一个标准的事件。 js 中仿o ... -
Java数组删除指定元素
2014-09-18 11:30 2199package com.zas.util; impo ... -
sql 去重
2014-09-18 10:43 571delete from table t1 where t1.i ... -
linux 干掉所有java进程
2014-08-07 12:31 987ps -ef|grep java|grep -v grep|c ... -
Oracle自带连接池使用(转载收录)
2014-07-31 10:01 1356最近在搞数据迁移:从sql server 迁数据到oracle ... -
html dom jsoup httpclient
2014-07-10 21:45 1049xml dom 对大多数java程序员来说并不陌生,但是htm ... -
Oracle 清库脚本
2014-07-08 22:40 1254清库脚本一份 表dossier_group 的字段Dossi ... -
Java 对象存储到oracle Blob字段
2014-07-08 14:52 1051Java 数据对象在没有持久存储到业务表时,可能需要临时存 ... -
Java 科学计数法数字转字符串
2014-07-08 14:30 1422科学计数法数字转字符串,记录代码,留后使用 double ... -
突破tomcat jsp编译65535行的限制
2014-07-04 17:16 4663使用tomcat时有可能会遇到其对jsp编译行数的限制, ... -
oracle 函数中游标及递归的应用
2014-06-19 17:13 1366在代码中使用递归可能大部分程序员都不陌生,但是在存储过程或 ... -
视频操作类
2014-06-19 17:04 1081接 视频分割项目预研 http://zhuyufufu.i ... -
Java POI Excel 行高自适应
2014-03-28 14:08 15570在Excel处理的过程中,可能有需要用到行高自适应的时候。 ... -
Java POI Excel sheet 合并遇到的问题解决2
2014-03-25 18:03 3167上接 Java POI Excel sheet 合并 http ... -
文档展示:使用iText转换各种图片为PDF
2014-03-23 12:38 2842如题: 下面这段代码可以处理各种格式的图片,代码的出处忘记了 ... -
Java 进程执行外部程序,造成外部程序阻塞的一种原因
2014-03-23 12:06 1423前一阵子在研究文档展示时使用了java进程直接调用外部程序 ... -
Java POI Excel sheet 合并遇到的问题解决
2014-03-23 11:30 5010上接 Java POI Excel sheet http:// ... -
Java POI Excel sheet合并
2014-03-19 10:59 6554由于工作上的需要,特地研究了下Excel合并的问题,现贴出来, ... -
文档展示:IcePDF 将PDF转换为图片
2014-02-11 16:35 4868上接 文档展示:PDFRender 将PDF转换为图片 htt ...
相关推荐
项目管理(项目预研.pptx
企业管理项目预研.ppt
预研性项目管理的相关经验,分为技术预研和产品预研,包括总体规划、阶段目标、团队建设、合理的绩效考核机制等
企业管理项目预研管理.ppt
项目管理技术预研报告模板
项目管理专业培训项目预研管理.pptx
项目管理专业培训——项目预研管理.ppt
软件项目技术预研计划的目的是为了在项目启动之前,通过系统性的研究、调查和验证,提前评估和确定项目的关键技术、架构、方法和工具。以下是软件项目技术预研计划的主要目的: 1. **技术可行性验证:** 预研计划...
QM-PROC-QMP-09-软件项目技术预研模板(软件技术预研报告模板)-V4.0.pdf
软件项目技术预研报告的目的是为了提供项目干系人、决策者和团队成员有关技术预研活动的详细信息和结论,以便他们可以做出明智的决策和规划项目的后续步骤。以下是技术预研报告的主要目的: 1. **技术可行性确认:*...
(完整版)项目预研报告模板.docx(完整版)项目预研报告模板.docx
(完整版)项目预研报告模板.pdf(完整版)项目预研报告模板.pdf
企业项目预研管理的识别.ppt
预研项目总结报告(模板).pdf
软件技术预研方案模板.docx软件技术预研方案模板.docx软件技术预研方案模板.docx软件技术预研方案模板.docx软件技术预研方案模板.docx软件技术预研方案模板.docx软件技术预研方案模板.docx软件技术预研方案模板.docx
IT项目管理表单大全-技术预研篇(10个文档),包含: 技术预研;技术预研计划;技术预研报告。。。。。。
预研项目不同于一般的新产品开发项目,它所瞄准的通常是不确定或者比较遥远的市场。由于难以预料究竟什么样的产品或技术会在将来的市场竞争中胜出,公司需要根据自己的情况和对未来市场的基本预测,早早地开始新技术...
国防预研项目立项评价指标评价标准。主要包括绝对权重、指标层、评分等级
XX集团项目处预研管理绩效指标.doc
技术预研计划