java-FFmpeg(一) 实现视频的转码和截图功能

FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行。

  在java开发中,FFmpeg也常被调用用来进行视频的转码,录播和直播,总的来说,FFmpeg是一款非常强大的,而且做与视频相关的业务平台开发人员必须要学会的工具,那具体怎么实习呢,第一章我们先从分别windows和linux下调用FFmpeg进行视频的转码,和对视频的截图做出说明解释。

      ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等),而对于ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),我们在下面采用了mencoder工具,先将视频转换成AVI格式再用ffmpeg进行转码;

windows下:

1.首先需要FFmpeg和mencoder的工具。一共五个文件,点此下载,将他解压放在你的D盘FFmpeg文件夹下。

linux下:

依次执行下面的指令

1.下载yasm-1.3.0.tar.gz这个版本:

?1yasm是一个完全重写的NASM汇编。目前,它支持x86和AMD64指令集,接受NASM和气体汇编语法,产出二进制, ELF32 , ELF64 , COFF , Mach - O的( 32和64 ) , RDOFF2 ,的Win32和Win64对象的格式,并生成STABS 调试信息的来源,DWARF 2 ,CodeView 8格式。之所以在FFmpeg中用这个,主要是支持编译ffmpeg-x264.

wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
make
make install


2.下载3.1.3 release ffmpeg(时间可能会有点长,耐心等待~!安装完成之后输入  ffmpeg -version 可以看到版本说明安装成功)

wget http://ffmpeg.org/releases/ffmpeg-3.1.3.tar.gz
tar -zxvf ffmpeg-3.1.3.tar.gz
cd ffmpeg-3.1.3
./configure
make
make install
ffmepg命令格式:ffmepg -i filename -vcodec copy newfilename
package test;

import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;  
  

public class ConvertVideo {
	
	
        public static void main(String[] args) {  
        	String fileName = "192.168.10.1836Time20181213150000Time20181213150010.mp4_";
        	if(args != null && args.length>=1){
        		fileName = args[0];
        	}
        	
        	String path =  Test.TEMP_VIDEO_PATH + File.pathSeparator + fileName;
        	String newPath = Test.TEMP_VIDEO_PATH + File.pathSeparator +  fileName.replace(Test.TEMP_VIDEO_SUFFIX, Test.REAL_VIDEO_SUFFIX);
//        	path = "C:\\download\\192.168.10.1836Time20181213150000Time20181213150010_1544684887325.mp4";
//        	newPath = "/var/log/smartpark/wi.mp4";
        	
            if (ConvertVideo.processMP4(path,newPath)) {        //执行转码任务
                System.out.println("ok");  
            }  
        }  
      
        private static boolean checkfile(String path) {  
            File file = new File(path);  
            if (!file.isFile()) { 
            	System.out.println(path + " is not file");  
                return false;  
            }  
            return true;  
        }  
        
        public static boolean processMP4(String filePath, String newfilePath) {  
        	if(!checkfile(filePath)){
        		return false;
        	}
            List<String> commend = new ArrayList<String>();  
            commend.add("/usr/local/bin/ffmpeg");
            commend.add("-i");
            commend.add(filePath);  
            commend.add("–vscodec");
            commend.add("copy");  
            commend.add(newfilePath);  
            try {  
                //调用线程命令启动转码
                ProcessBuilder builder = new ProcessBuilder();  
                builder.command(commend);  
                Process process = builder.start();
                InputStream in=process.getInputStream();
                byte[] re=new byte[1024];
                while (in.read(re)!= -1) {
                    System.out.println("==>"+new String(re));
                }
                in.close();
                if(process.isAlive()){
                    process.waitFor();
                }
                return true;  
            } catch (Exception e) {  
                e.printStackTrace();  
                return false;  
            }  
        }  
        
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
敬告1:本课程基于最新版FFmpeg4.3.1, 是从一个商用产品中抽离而出,全程手把手教学。敬告2:本课程基于Java+Tomcat,C++方向的学员,不用购买此课程。 我将带领大家亲手开发一套WEB在线的基于Java语言的音视频转码系统 您将收获:用Java语言开发WEB在线音视频转码学习商用音视频产品的标准流程学习Java应用ffmpeg视频功能学习音视频的基础理论 学习SSH框架的灵活应用-------------------------------------------------------------------主要模块包括:1、标准文档:    需求说明书、系统分析、概要设计、数据结构、编码、测试、总结、面试技巧等。2、Java编码:   SSH框架,标准流程,可以自由扩展。3、音视频转码:最新版FFmpeg4.3.1,灵活的转码模板,可以自由扩展。4、音视频理论:讲解基础的音视频理论,帮助小白快速入门。5、面试技巧:    音视频方向的工作,薪资偏高,但要求苛刻。-------------------------------------------------------------------具体的课程目录参考如下: B/S音视频转码器简介与概览5 需求规格说明书5 系统分析与设计15 数据结构设计27数据库设计30Java+Tomcat+Eclipse开发环境配置35Java+SSH框架搭建与整合43界面设计49编码51左侧导航树58B/S音视频转码器总结与分析66 简历包装与面试技巧67-------------------------------------------------------------------音视频是一门很复杂的技术,涉及的概念、原理、理论非常多,很多初学者不学基础理论,而是直接做项目,往往会看到c/c++的代码时一头雾水,不知道代码到底是什么意思,这是为什么呢? 因为没有学习音视频的基础理论,就比如学习英语,不学习基本单词,而是天天听英语新闻,总也听不懂。所以呢,一定要认真学习基础理论,然后再学习播放器、转码器、非编、流媒体直播、视频监控、等等。  梅老师从事音视频与流媒体行业18年;曾在永新视博、中科大洋、百度、美国Harris广播事业部等公司就职,经验丰富;曾亲手主导广电直播全套项目,精通h.264/h.265/aac,曾亲自参与百度app上的网页播放器等实战产品。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值