`
zhuyufufu
  • 浏览: 139489 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

视频分割项目预研

阅读更多
由于工作需要,研究下视频切割。

现在的情况:视频切割是重中之重,后续项目功能按照这个功能来扩展的。

由于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环境的视频切割功能等等杂事。
  • 大小: 71.8 KB
  • 大小: 104.7 KB
  • 大小: 141.4 KB
  • 大小: 173.6 KB
  • 大小: 289.7 KB
2
1
分享到:
评论
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  
好文章,这个东东能把视频文件切成一张张图片吗?

相关推荐

    项目管理(项目预研.pptx

    在现代国防项目管理中,项目预研阶段的重要性不言而喻。它不仅仅是一个技术准备阶段,更是为整个项目奠定理论和实践基础的关键过程。预研的成败在很大程度上决定了后续项目的可行性和最终成果的实用性。本文将深入...

    企业管理项目预研.ppt

    【企业管理项目预研】是企业或组织在开展大型项目前进行的一种重要准备工作,旨在降低风险、提高项目的成功率。预研管理涉及多个层面,包括技术、财务、人力资源等多个方面,尤其在国防项目中,预研更显得至关重要。...

    浅谈预研型项目管理.docx

    【预研型项目管理】是企业为应对未来市场不确定性,提前投入研发的一种策略。预研项目分为技术预研和产品预研,它们都是为了在市场竞争中抢占先机,通过探索新技术或新产品的可行性,为企业长远发展奠定基础。 一、...

    项目管理技术预研报告模板

    《项目管理技术预研报告模板》是一份针对项目管理中技术预研阶段的重要参考资料,它旨在为项目团队提供一个清晰、规范的框架,以便于系统地进行技术预研工作,确保项目的顺利启动和实施。这份报告通常包含了项目背景...

    企业管理项目预研管理.ppt

    《企业管理项目预研管理》是关于企业如何有效地进行项目启动和管理的专业培训资料,由国家项目管理认证专家、客座教授以及国际项目管理资质认证评估师沈建明讲解。该内容着重介绍了项目启动阶段的关键步骤,包括识别...

    项目管理专业培训项目预研管理.pptx

    在项目管理的专业培训项目中,预研管理是其至关重要的环节,它贯穿了项目启动至执行的全过程,涉及从项目识别到投标的各个环节。本文将深入探讨项目预研管理的内涵、实施步骤以及其在项目成功中所扮演的角色。 项目...

    QM-PROC-QMP-09-软件项目技术预研模板(软件技术预研报告模板)-V4.0.pdf

    软件项目技术预研模板知识点 技术预研是软件项目中一个重要的过程,它涉及到技术的评估、选择和实施。技术预研模板是指在软件项目中,用于指导技术预研活动的文档模板。 技术预研的目的 技术预研的目的是为了评估...

    项目管理专业培训——项目预研管理.ppt

    项目管理是企业管理中的核心环节,尤其在项目预研阶段,其重要性不言而喻。项目预研管理涉及从项目识别到项目启动的全过程,它为项目的成功奠定了基础。在这个过程中,需求的识别和需求建议书的编写是关键步骤。 ...

    企业项目预研管理的识别.ppt

    项目管理在IT行业中扮演着至关重要的角色,尤其在企业项目预研阶段,有效的管理能确保项目的成功启动和执行。项目预研管理主要包括三个关键环节:识别需求、项目识别和项目投标。 1. 识别需求:这是项目管理的第一...

    (完整版)项目预研报告模板.pdf

    项目预研报告是进行项目立项前的关键步骤,它详尽地评估了项目的可行性和潜在价值。这份"(完整版)项目预研报告模板"涵盖了多个重要方面,为项目的成功执行提供了全面指导。 首先,项目研究的意义在于理解当前的国内...

    IT项目管理表单大全-技术预研篇(10个文档)

    技术预研作为项目初期的关键步骤,旨在探索并评估潜在的技术解决方案,以确保项目的技术可行性与创新性。本资源包——"IT项目管理表单大全-技术预研篇(10个文档)"提供了全面的工具和模板,帮助项目经理和团队高效...

    软件技术预研方案模板.docx

    《软件技术预研方案》是软件开发过程中至关重要的一步,它是对新技术或新方法进行探索和研究的蓝图,旨在确保项目的技术可行性,并为后续的软件开发阶段奠定基础。以下是基于提供的文档部分内容对软件技术预研方案的...

    软件项目技术预研计划.xls

    软件项目技术预研计划的目的是为了在项目启动之前,通过系统性的研究、调查和验证,提前评估和确定项目的关键技术、架构、方法和工具。以下是软件项目技术预研计划的主要目的: 1. **技术可行性验证:** 预研计划...

    软件项目技术预研报告.doc

    **软件项目技术预研报告**是项目管理中的关键文档,其主要目的是为项目干系人、决策者和团队成员提供关于技术预研活动的详细信息和结论,以便于制定明智的决策并规划项目的后续步骤。以下是对报告主要内容的详细解释...

    (完整版)项目预研报告模板.docx

    项目预研报告是启动新项目前的关键步骤,它旨在评估项目的可行性和潜在价值。以下是基于提供的文件内容提炼出的关键知识点: 1. **项目研究的意义**:预研报告首先需要阐述项目研究的重要性和必要性,包括它对当前...

    预研项目总结报告(模板).pdf

    预研项目总结报告(模板).pdf

    附录H-2 技术预研报告.doc

    预研项目是企业为了应对未来的不确定性,尤其是面对潜在市场和技术发展趋势,而进行的一种前瞻性研究。这类项目通常不追求短期的经济效益,而是着眼于长远的战略优势和市场先机。 报告的结构清晰,包括多个关键部分...

    附录H-1 技术预研计划.doc

    《XXX技术预研计划》是项目管理中的一个重要文档模板,主要针对即将进行的技术探索和研究活动进行规划和安排。这份文档通常包含以下几个关键部分: 1. **技术预研目标**: - 这一部分需要清晰地定义技术预研的目标...

    国防预研项目立项评价指标评价标准

    国防预研项目立项评价指标评价标准的制定与应用 在科技日新月异的今天,国防科技的发展已成为国家安全的重要保障。国防预研项目立项评价指标评价标准(以下简称“评价标准”)应运而生,成为评判项目合理性的关键。...

    《XXX项目》技术预研报告.doc

    《XXX项目》技术预研报告,作为一份专业的软件开发过程控制文档,不仅对技术背景进行了深入的分析和研究,还对项目的后续开展提供了明确的技术方向和决策依据。 报告的撰写首要考虑的是目的性。通过阐明预研的目的...

Global site tag (gtag.js) - Google Analytics