精华内容
下载资源
问答
  • wmv转换mp4

    2011-12-15 08:22:56
    wmv转换mp4 很简单好用的WMV格式视频转换成MP4格式的文件
  • JAVA PPT转MP4 (基于VBSCRIPT)

    千次阅读 2018-05-31 14:14:18
    场景:业务需要,要使用JAVA根据ppt模板自动生成MP4视频。调研:查了一下比较符合的PPT 操作方式,POI,ASPOSE,VBA1. POI 支持PPT文件的读,修改,写。HSLF,XLSF支持PNG,以及基于Graphics2D 的输入文件格式 ...

    场景:

    业务需要,要使用JAVA根据ppt模板自动生成MP4视频。

    调研:

    查了一下比较符合的PPT 操作方式,POI,ASPOSE,VBA

    1. POI 支持PPT文件的读,修改,写。HSLF,XLSF支持PNG,以及基于Graphics2D 的输入文件格式,但没见到有视频输出的。 详见:XLSF

    2. ASPOSE 支持的输出文件相对多一些 详见:outputFormat,但是,很遗憾,不支持MP4类视频文件。

    3. VBSCRIPT 是通用的 但是不能直接调用,需要 JAVA调用VBSCRIPT导出文件

    实操作:

    没办法,只能VBSCRIPT了。

    调用过程是这样:JAVA->CSCRIPT->执行vbscript脚本->输出MP4

    JAVA:

        public void testNewPPT() throws IOException, InterruptedException {
            //注意“E:/Temp/vbs.vbs”应该是正确的存储的VBS代码的位置
            Process process = Runtime.getRuntime().exec("cmd /c CScript E:/example2.vbs");
            //等待VBS执行完毕
            process.waitFor();
    
        }

    VBSCRIPT(参考Neohope's Blog)

    Option Explicit
     
    'PPT2ANY "PATH_TO_INFILE\NEOHOPE.COM.IN.pptx","PATH_TO_INFILE\NEOHOPE.COM.OUT.pdf","PDF"
    'PPT2ANY "PATH_TO_INFILE\NEOHOPE.COM.IN.pptx","PATH_TO_INFILE\NEOHOPE.COM.OUT.png","PNG"
    PPT2ANY "e:\example2.pptx","e:\777","MP4"
     
    Sub PPT2ANY( inFile, outFile, outFormat)
        Dim objFSO, objPPT, objPresentation, pptFormat
     
        Const ppSaveAsAddIn                             =8
        Const ppSaveAsBMP                               =19
        Const ppSaveAsDefault                           =11
        Const ppSaveAsEMF                               =23
        Const ppSaveAsExternalConverter                 =64000
        Const ppSaveAsGIF                               =16
        Const ppSaveAsJPG                               =17
        Const ppSaveAsMetaFile                          =15
        Const ppSaveAsMP4                               =39
        Const ppSaveAsOpenDocumentPresentation          =35
        Const ppSaveAsOpenXMLAddin                      =30
        Const ppSaveAsOpenXMLPicturePresentation        =36
        Const ppSaveAsOpenXMLPresentation               =24
        Const ppSaveAsOpenXMLPresentationMacroEnabled   =25
        Const ppSaveAsOpenXMLShow                       =28
        Const ppSaveAsOpenXMLShowMacroEnabled           =29
        Const ppSaveAsOpenXMLTemplate                   =26
        Const ppSaveAsOpenXMLTemplateMacroEnabled       =27
        Const ppSaveAsOpenXMLTheme                      =31
        Const ppSaveAsPDF                               =32
        Const ppSaveAsPNG                               =18
        Const ppSaveAsPresentation                      =1
        Const ppSaveAsRTF                               =6
        Const ppSaveAsShow                              =7
        Const ppSaveAsStrictOpenXMLPresentation         =38
        Const ppSaveAsTemplate                          =5
        Const ppSaveAsTIF                               =21
        Const ppSaveAsWMV                               =37
        Const ppSaveAsXMLPresentation                   =34
        Const ppSaveAsXPS                               =33
     
        ' Create a File System object
        Set objFSO = CreateObject( "Scripting.FileSystemObject" )
     
        ' Create a PowerPoint object
        Set objPPT = CreateObject( "PowerPoint.Application" )
     
        With objPPT
            ' True: make PowerPoint visible; False: invisible
            .Visible = True
      
            ' Check if the PowerPoint document exists
            If not( objFSO.FileExists( inFile ) ) Then
                WScript.Echo "FILE OPEN ERROR: The file does not exist" & vbCrLf
                ' Close PowerPoint
                .Quit
                Exit Sub
            End If
      
            ' Open the PowerPoint document
            .Presentations.Open inFile
      
            ' Make the opened file the active document
            Set objPresentation = .ActivePresentation
      
            If StrComp(Ucase( outFormat ),"PDF") = 0 then
                pptFormat = ppSaveAsPDF 
            ElseIf StrComp(Ucase( outFormat ),"XPS") = 0 then
                pptFormat = ppSaveAsXPS
            ElseIf StrComp(Ucase( outFormat ),"BMP") = 0 then
                pptFormat= ppSaveAsBMP
            ElseIf StrComp(Ucase( outFormat ),"PNG") = 0 then
                pptFormat= ppSaveAsPNG
            ElseIf StrComp(Ucase( outFormat ),"JPG") = 0 then
                pptFormat= ppSaveAsJPG
            ElseIf StrComp(Ucase( outFormat ),"GIF") = 0 then
                pptFormat= ppSaveAsGIF
            ElseIf StrComp(Ucase( outFormat ),"XML") = 0 then
                pptFormat= ppSaveAsOpenXMLPresentation
            ElseIf StrComp(Ucase( outFormat ),"RTF") = 0 then
                pptFormat= ppSaveAsRTF
            ElseIf StrComp(Ucase( outFormat ),"MP4") = 0 then
                pptFormat= ppSaveAsMP4
            Else
                WScript.Echo "FILE FORTMART ERROR: Unknown file format" & vbCrLf
                ' Close PowerPoint
                .Quit
                Exit Sub
            End If
     
            ' Save in PDF/XPS format
            objPresentation.SaveAs outFile, pptFormat
            ' save as MP4 need long time, do not close too early
            If StrComp(Ucase( outFormat ),"MP4") = 0 then
                wscript.sleep 1000*15
            End If
            ' Close the active document
            objPresentation.Close
      
            ' Close PowerPoint
            .Quit
        End With
    End Sub

    详见:文件键值对对应关系

    注意:

    1 因为要用到vbscript,部署环境需要windows。

    2 saveas 格式为 ppSaveAsMP4或其它较大输出文件时,要注意根据文件大小,设定sleep时间,正在进行导出时执行了close 是获取不到输出文件的。

    3 导出时PPT会打开。

    4 PPT最好是英文名,否则需要处理乱码问题。

    展开全文
  • Java版的屏幕录制引擎,并能将录制后的视频压缩转换成wmvmp4等格式 启动方法:phoenix.record.run.recorder.ScreenRecorderMain.start 停止方法:phoenix.record.run.recorder.ScreenRecorderMain.sttop 使用方法...
  • So, I'm developing a custom video player for Android but I need to play more than the android supported video files (mp4, 3gp...), like wmv, avi, flv.At this time I do already convert any video type t...

    So, I'm developing a custom video player for Android but I need to play more than the android supported video files (mp4, 3gp...), like wmv, avi, flv.

    At this time I do already convert any video type to .mp4 and I'm able to play them after recoding, but I have no idea how can I play those wmv, avi files without recoding them to mp4.

    Is there any way I can play any video on Android without recoding them?

    JavaCV + FFmpeg library already working, just don't know how to do that.

    By the way, heres the code that I'm using to recode videos:

    public static void convert(File file) {

    FFmpegFrameGrabber frameGrabber =

    new FFmpegFrameGrabber(file.getAbsolutePath());

    IplImage captured_frame = null;

    FrameRecorder recorder = null;

    recorder = new FFmpegFrameRecorder("/mnt/sdcard/external_sd/videosteste/primeiroteste.mp4", 300, 300);

    recorder.setVideoCodec(13);

    recorder.setFrameRate(30);

    recorder.setFormat("mp4");

    try {

    recorder.start();

    frameGrabber.start();

    while (true) {

    try {

    captured_frame = frameGrabber.grab();

    if (captured_frame == null) {

    System.out.println("!!! Failed cvQueryFrame");

    break;

    }

    recorder.record(captured_frame);

    } catch (Exception e) {

    }

    }

    recorder.stop();

    recorder.release();

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    解决方案Is there any way I can play any video on Android without recoding them?

    Why are you recording the Video?? There is no need to record the video. JavaCv.

    This is sample code for giving you the idea, how you can achieve it.

    FrameGrabber grabber = new FrameGrabber(videoFile);

    grabber.start();

    BufferedImage image= null;

    while((image=grabber.grab())!=null){

    // TODO set the image on the canvas or panel where ever you want.

    }

    grabber.stop();

    展开全文
  • Java 利用ffmpeg工具实现视频MP4转m3u8

    千次阅读 2019-10-12 17:13:46
    Java 利用ffmpeg工具实现视频MP4转m3u8(一)前言(一)ffmpeg工具转码1.如何安装ffmpeg工具2.如何使用ffmpeg工具进行视频转码(二)播放m3u8文件1.video.js2.具体使用1)静态数据2)动态数据(三)Java程序上传本地...

    前言

            ffmpeg工具实现视频转码网上有很多教程,但大多不够具体。本博客综合了下网上教程,从ffmpeg工具转码,ffmpeg视频播放,java语言操控ffmpeg转码,转码后视频上传阿里云oss,四个方面完整记录下这个流程,内容是基于我项目中的需求而定,不能使用所有情况,仅供参考。
            具体技术原理不做描述,如有兴趣可自行研究。

    (一)ffmpeg工具转码

    1.如何安装ffmpeg工具

    官网下载地址: https://ffmpeg.zeranoe.com/builds/
    我是用的ffmpeg是windows版本,linux自行研究

    在这里插入图片描述

    下载完成后解压压缩包,完成后bin目录下ffmpeg.exe文件是之后程序启动时需要使用的

    在这里插入图片描述

    配置环境变量,至此ffmpeg工具安装到此结束

    在这里插入图片描述

    2.如何使用ffmpeg工具进行视频转码

    打开cmd黑窗口,输入以下指令
    ffmpeg -i xxxxxxx.mp4 -c:v libx264 -hls_time 60 -hls_list_size 0 -c:a aac -strict -2 -f hls xxxxxxx.m3u8
    地址既可以写相对地址 ,也可以写绝对地址,看你自己情况
    这条指令参数具体含义自行百度,这里只介绍几个重要的
    参数解析:
    -re :该参数表示ffmpeg将会按照当前视频的播放速率进行转码,这样就不会说切片的速度和播放速度不一致。不加这个参数,切片速度会非常快,客户端还来不及播放,列表已经被更新了。
    -hls_time n :设置每片的长度,默认值为2,单位为秒。
    -hls_list_size n :设置m3u8文件播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5。一般用于直播流,点播文件可以设置成0,即全部保存。
    -hls_wrap n :设置多少片之后开始覆盖,设置为0则不会覆盖,默认值为0。这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量。
    以上参数可以自己尝试调整看看效果。

    这是成功执行命令后,ffmpeg执行过程,出现这个界面没报错,就恭喜你成功了,安静等待工具切片就行了
    在这里插入图片描述

    工具执行完毕之后,输出路径文件夹中会多出一个m3u8文件和若干ts文件,至此第一部分圆满成功
    在这里插入图片描述

    (二)播放m3u8文件

    1.video.js

    Video.js 是一个通用的在网页上嵌入视频播放器的 JS 库,Video.js 自动检测浏览器对 HTML5 的支持情况,如果不支持 HTML5 则自动使用 Flash 播放器。(要支持ie低版本请下载5.4.3版 )

    官网地址: https://videojs.com
    API地址:https://docs.videojs.com/index.html

    2.具体使用

    1)静态数据

    <!DOCTYPE html>
    <html>
    
    	<head>
    		<meta charset="UTF-8">
    		<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
    		<meta http-equiv="X-UA-COMPATIBLE" CONTENT="IE=edge,chrome=1">
    		<link href="css/style.css" rel="stylesheet" />
    		<link href="js/video-js.css" rel="stylesheet">
    
    		<!-- If you'd like to support IE8 (for Video.js versions prior to v7) -->
    		<script src="js/videojs-ie8.min.js"></script>
    	</head>
    
    	<body>
    		<video id="myVideo" class="video-js vjs-default-skin vjs-big-play-centered">
    			<source type="application/x-mpegURL"></source>
    		</video>
    
    	</body>
    
    	<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
    	<script src='js/video.js'></script>
    	<script>
    		videojs(document.querySelector('.video-js'), {
    			controls: true,
    			autoplay: false,
    			preload: 'auto',
    			sources: [{
    				src: "video/20191010173819_cjOaOJ.mp4",
    				type: "application/x-mpegURL"
    			}]
    		});
    	</script>
    
    </html>
    

    2)动态数据

    动态数据赋值有个src方法,但是我使用的时候容易报错,用的vue框架,且视频地址是oss地址。
    就想了个折中的方法,每次url变化的时候销毁原始video对象,重新初始化。
    最近还在研究,如果有好方法会再更新上来。如有解决方案也可以留言我。

    videojs(document.querySelector('.video-js'),{}).ready(function(){    
    	var myPlayer = this;
     
        myPlayer.src("http://www.example.com/path/to/video.mp4");
     
        myPlayer.play();
    });
    

    需要注意,如果是在Vue里使用,建议用ref获取元素,我这里标出初始化播放器方法代码

    在这里插入图片描述

    initPalyer(){
         const videoDom = this.$refs.myVideo;   //不能用document 获取节点
         let myPlayer = videojs( videoDom, {
             controls: true,
             autoplay: false,
             preload: 'auto',
             sources: [{
                 src: vm.yfVideoDetail.videoUrl,
                 type: "application/x-mpegURL"
             }]
         });
     }
    

    Api上有着详细的使用方法的介绍,我这里因为只用到这些所以就只写了这部分代码,如果想进一步深入,可以自行研究。

    更新播放方法:

    const vue = new Vue({
    	el: ".body",
    	data: {
    		myPlayer: null
    	},
    	methods: {
    		initPalyer() {
    			const videoDom = this.$refs.myVideo; //不能用document 获取节点
    			
    			if(vurl) {
    				vue.myPlayer = videojs(videoDom, {
    					controls: true,
    					autoplay: false,
    					preload: 'auto',
    					sources: [{
    						src: vurl,  //视频url
    						type: "application/x-mpegURL"
    					}]
    				});
    			}
    		},
    		//切换视频
    		switchVideo(item) {
    			vue.myPlayer.reset(); //重置 video
    			vue.myPlayer.src([{
    				src: item.videoUrl  //新视频url
    			}, ]);
    			vue.myPlayer.load(item.videoUrl);
    			vue.myPlayer.currentTime(0);
    		}
    	}
    })
    

    (三)Java程序上传本地视频地址并通过ffmpeg工具转成m3u8文件

    实现前提:笔者用的是springboot框架,,前端上传视频用的是elementui里的上传组件.

    以下代码是根据网上已有的源码结合自身需求做了改变,仅供参考,请勿直接copy,直接copy报错了不要怪我哦。需要根据自身需求进行改变。

    后台实现上传代码:

    public R saveVideo(@RequestParam  MultipartFile file) {
    		// TODO Auto-generated method stub
    		String url=null;
    		try {
    			String f = file.getOriginalFilename(); //获取文件名
    			String suffix = StringUtils.substringAfter(f, "."); //获取文件后缀
    			String filename = FileUtils.getFileName(null, null);  //我自己封装的方法,给文件重新起个名字,文件名不带后缀
    
    			/*********本地上传(Tomcat配置映射C:/upload/file)*********/
    			//先将文件本地上传后,调用ffmpeg切片转成m3u8,在将转换后文件上传到oss上去
    			/*
    				我的思路就是根据我重新起的名字,生成对应文件夹,将mp4视频和转换后的m3u8以及ts放在一起,然后遍历文件目录,将文件上传后,删除本地文件夹和文件
    			 */
    			String folderUrl = FileUtils.localPath+filename; //文件夹路径
    			String fileName = filename+"."+suffix;   //文件名带后缀
    			String uploadPath= folderUrl + "/" + fileName;  //上传后路径
    			File fileFolder = new File(folderUrl);
    			if (!fileFolder.exists()) {
    				fileFolder.mkdirs();
    			}
    			File newFile = new File(uploadPath);
    			file.transferTo(newFile);
    			//mp4转m3u8
    			boolean b = convertM3U8.convertOss(folderUrl + "/", fileName);
    			if (!b){
    				return R.error("上传失败!系统转码异常!");
    			}
    			//访问本地上传文件夹所有文件,依次上传至oss服务器
    			File[] files = fileFolder.listFiles();
    			if (null == files || files.length == 0) {
    				return null;
    			}
    			boolean flag = true;
    			for (int i = 0; i < files.length ; i++) {
    				if (!files[i].isDirectory()) {
    					//上传
    					String name = files[i].getName();
    					String suf = StringUtils.substringAfter(name, ".");
    					String pre = StringUtils.substringBefore(name, ".");
    					FileInputStream fis = new FileInputStream(files[i]);
    					if ("m3u8".equals(suf)){
    						if (flag && filename.equals(pre)){
    							//这是封装的上传阿里云oss的方法
    							url = OSSFactory.build().upload(fis, "video/" + filename + "/" + name);
    							flag = false;
    						}
    					} else if ("ts".equals(suf)){
    						OSSFactory.build().uploadPublic(fis, "video/" + filename + "/" + name);
    					}
    					fis.close();
    					FileUtils.deletefile(files[i]);
    				}
    			}
    			//删除文件夹
    			fileFolder.delete();
    			/*********本地上传(Tomcat配置映射C:/upload/file)*********/
    
    		} catch (Exception e) {
    			e.printStackTrace();
    			R.error("上传异常");
    		}
    		return R.ok().put("data",url);
    	}
    

    ffmpeg视频转码工具类:

    /**
     *  mp4转换m3u8工具类
     */
    @Component
    public class ConvertM3U8 {
        @Value("${m3u8.ffmpegpath}")
        private String ffmpegpath; // ffmpeg.exe的目录
    
        public boolean convertOss(String folderUrl,String fileName){
            if (!checkfile(folderUrl + fileName)){
                System.out.println("文件不存在!");
                return false;
            }
    
            //验证文件后缀
            String suffix = StringUtils.substringAfter(fileName, ".");
            String fileFullName = StringUtils.substringBefore(fileName, ".");
            if (!validFileType(suffix)){
                return false;
            }
    
            return  processM3U8(folderUrl,fileName,fileFullName);
        }
    
        /**
         * 验证上传文件后缀
         * @param type
         * @return
         */
        private boolean validFileType ( String type ) {
            if ("mp4".equals(type)){
                return true;
            }
            return false;
        }
    
        /**
         * 验证是否是文件格式
         * @param path
         * @return
         */
        private boolean checkfile(String path) {
            File file = new File(path);
            if (!file.isFile()) {
                return false;
            } else {
                return true;
            }
        }
    
        // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
    
        /**
         * ffmpeg程序转换m3u8
         * @param folderUrl
         * @param fileName
         * @param fileFullName
         * @return
         */
        private boolean processM3U8(String folderUrl,String fileName, String fileFullName) {
        	//这里就写入执行语句就可以了
            List commend = new java.util.ArrayList();
            commend.add(ffmpegpath);
            commend.add("-i");
            commend.add(folderUrl+fileName);
            commend.add("-c:v");
            commend.add("libx264");
            commend.add("-hls_time");
            commend.add("20");
            commend.add("-hls_list_size");
            commend.add("0");
            commend.add("-c:a");
            commend.add("aac");
            commend.add("-strict");
            commend.add("-2");
            commend.add("-f");
            commend.add("hls");
            commend.add(folderUrl+ fileFullName +".m3u8");
            try {
                ProcessBuilder builder = new ProcessBuilder();//java
                builder.command(commend);
                Process p = builder.start();
                int i = doWaitFor(p);
                System.out.println("------>"+i);
                p.destroy();
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
    
        /**
         * 监听ffmpeg运行过程
         * @param p
         * @return
         */
        public int doWaitFor(Process p) {
            InputStream in = null;
            InputStream err = null;
            int exitValue = -1; // returned to caller when p is finished
            try {
                System.out.println("comeing");
                in = p.getInputStream();
                err = p.getErrorStream();
                boolean finished = false; // Set to true when p is finished
    
                while (!finished) {
                    try {
                        while (in.available() > 0) {
                            Character c = new Character((char) in.read());
                            System.out.print(c);
                        }
                        while (err.available() > 0) {
                            Character c = new Character((char) err.read());
                            System.out.print(c);
                        }
    
                        exitValue = p.exitValue();
                        finished = true;
    
                    } catch (IllegalThreadStateException e) {
                        Thread.currentThread().sleep(500);
                    }
                }
            } catch (Exception e) {
                System.err.println("doWaitFor();: unexpected exception - "
                        + e.getMessage());
            } finally {
                try {
                    if (in != null) {
                        in.close();
                    }
    
                } catch (IOException e) {
                    System.out.println(e.getMessage());
                }
                if (err != null) {
                    try {
                        err.close();
                    } catch (IOException e) {
                        System.out.println(e.getMessage());
                    }
                }
            }
            return exitValue;
        }
    
    }
    

    (四)上传m3u8文件至OSS需要注意的问题

    1.同一个视频的m3u8格式文件以及ts文件需要放在同一级目录。最好是一个视频的相关文件放入以文件名命名的路径下以示区别
    在这里插入图片描述
    2.m3u8链接无法播放,video.js提示无法访问对应资源,需要在阿里云oss上设置跨域。bucket空间—>基础设置—>跨域设置
    在这里插入图片描述
    在这里插入图片描述
    3.ts文件的读写权限需要公共读不然video.js访问不到的,然后为了防止视频被恶意下载可以设置防盗链

    参考资料:
    1.网站播放视频较慢,利用mp4转m3u8解决
    2.m3u8结构以及hls协议简单解析
    3.windows使用ffmpeg转m3u8使用参数详解

    展开全文
  • import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ConvertVideo { private static String inputPath = ""; private static ...
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class ConvertVideo {
    	private static String inputPath = "";
    
        private static String outputPath = "";
    
        private static String ffmpegPath = "";
        
        public static void main(String args[]) throws IOException {
    
            getPath();
    
            if (!checkfile(inputPath)) {
                System.out.println(inputPath + " is not file");
                return;
            }
            if (process()) {
                System.out.println("ok");
            }
        }
        
        public static void getPath(){
        	 // 先获取当前项目路径,在获得源文件、目标文件、转换器的路径
            File diretory = new File("");
            try {
                String currPath = diretory.getAbsolutePath();
                //视频的地址
                inputPath = "E:\\Video_2018-10-18_132735.wmv";
                //视频转完格式存放地址
                outputPath = "E:\\ffmpeg1\\oss\\";
                //转换视频的插件
                ffmpegPath = "E:\\ffmpeg1\\";
                System.out.println(currPath);
            }
            catch (Exception e) {
                System.out.println("getPath出错");
            }
        }
        
        public static boolean process() {
            int type = checkContentType();
            boolean status = false;
                System.out.println("直接转成mp4格式");
                status = processMp4(inputPath);// 直接转成mp4格式
            return status;
        }
        
        
        private static int checkContentType() {
            String type = inputPath.substring(inputPath.lastIndexOf(".") + 1, inputPath.length())
                    .toLowerCase();
            // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
            if (type.equals("avi")) {
                return 0;
            } else if (type.equals("mpg")) {
                return 0;
            } else if (type.equals("wmv")) {
                return 0;
            } else if (type.equals("3gp")) {
                return 0;
            } else if (type.equals("mov")) {
                return 0;
            } else if (type.equals("mp4")) {
                return 0;
            } else if (type.equals("asf")) {
                return 0;
            } else if (type.equals("asx")) {
                return 0;
            } else if (type.equals("flv")) {
                return 0;
            }
            // 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),
            // 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.
            else if (type.equals("wmv9")) {
                return 1;
            } else if (type.equals("rm")) {
                return 1;
            } else if (type.equals("rmvb")) {
                return 1;
            }
            return 9;
        }
    
        private static boolean checkfile(String path) {
            File file = new File(path);
            if (!file.isFile()) {
                return false;
            }
            return true;
        }
    
        // 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等), 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.
        private static String processAVI(int type) {
            List<String> commend = new ArrayList<String>();
            commend.add(ffmpegPath + "mencoder");
            commend.add(inputPath);
            commend.add("-oac");
            commend.add("lavc");
            commend.add("-lavcopts");
            commend.add("acodec=mp3:abitrate=64");
            commend.add("-ovc");
            commend.add("xvid");
            commend.add("-xvidencopts");
            commend.add("bitrate=600");
            commend.add("-of");
            commend.add("mp4");
            commend.add("-o");
            commend.add(outputPath + "a.AVI");
            try {
                ProcessBuilder builder = new ProcessBuilder();
                Process process = builder.command(commend).redirectErrorStream(true).start();
                new PrintStream(process.getInputStream());
                new PrintStream(process.getErrorStream());
                process.waitFor();
                return outputPath + "a.AVI";
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    
        // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
        private static boolean processFlv(String oldfilepath) {
    
            if (!checkfile(inputPath)) {
                System.out.println(oldfilepath + " is not file");
                return false;
            }
            List<String> command = new ArrayList<String>();
            command.add(ffmpegPath + "ffmpeg");
            command.add("-i");
            command.add(oldfilepath);
            command.add("-ab");
            command.add("56");
            command.add("-ar");
            command.add("22050");
            command.add("-qscale");
            command.add("8");
            command.add("-r");
            command.add("15");
            command.add("-s");
            command.add("600x500");
            command.add(outputPath + "a.flv");
            try {
    
                // 方案1
    //            Process videoProcess = Runtime.getRuntime().exec(ffmpegPath + "ffmpeg -i " + oldfilepath 
    //                    + " -ab 56 -ar 22050 -qscale 8 -r 15 -s 600x500 "
    //                    + outputPath + "a.flv");
    
                // 方案2
                Process videoProcess = new ProcessBuilder(command).redirectErrorStream(true).start();
    
                new PrintStream(videoProcess.getErrorStream()).start();
    
                new PrintStream(videoProcess.getInputStream()).start();
    
                videoProcess.waitFor();
    
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
    private static boolean processMp4(String oldfilepath) {
    	
    	    if (!checkfile(inputPath)) {
    	        System.out.println(oldfilepath + " is not file");
    	        return false;
    	    }
    	    List<String> command = new ArrayList<String>();
    	    command.add(ffmpegPath + "ffmpeg");
    	    command.add("-i");
    	    command.add(oldfilepath);
    	    command.add("-c:v");
    	    command.add("libx264");
    	    command.add("-mbd");
    	    command.add("0");
    	    command.add("-c:a");
    	    command.add("aac");
    	    command.add("-strict");
    	    command.add("-2");
    	    command.add("-pix_fmt");
    	    command.add("yuv420p");
    	    command.add("-movflags");
    	    command.add("faststart");
    	    command.add(outputPath + "a.mp4");
    	    try {
    	
    	        // 方案1
    	//        Process videoProcess = Runtime.getRuntime().exec(ffmpegPath + "ffmpeg -i " + oldfilepath 
    	//                + " -ab 56 -ar 22050 -qscale 8 -r 15 -s 600x500 "
    	//                + outputPath + "a.flv");
    	
    	        // 方案2
    	        Process videoProcess = new ProcessBuilder(command).redirectErrorStream(true).start();
    	
    	        new PrintStream(videoProcess.getErrorStream()).start();
    	
    	        new PrintStream(videoProcess.getInputStream()).start();
    	
    	        videoProcess.waitFor();
    	
    	        return true;
    	    } catch (Exception e) {
    	        e.printStackTrace();
    	        return false;
    	    }
    	}
    }
    class PrintStream extends Thread 
    {
        java.io.InputStream __is = null;
        public PrintStream(java.io.InputStream is) 
        {
            __is = is;
        } 
    
        public void run() 
        {
            try 
            {
                while(this != null) 
                {
                    int _ch = __is.read();
                    if(_ch != -1) 
                        System.out.print((char)_ch); 
                    else break;
                }
            } 
            catch (Exception e) 
            {
                e.printStackTrace();
            } 
        }
    }
    

    附带ffmpeg 插件

    百度云

    链接: https://pan.baidu.com/s/1bNQWjFyKRMtjcZCYANDvWw 提取码: 15hh

     

    展开全文
  • System.out.println(“直接mp4格式”); status = processMp4(inputPath);// 直接mp4格式 return status; } private static int checkContentType() { String type = inputPath.substring(inputPath....
  • java实现压缩mp4视频适应网页播放

    千次阅读 2019-01-05 15:41:00
    1,安装ffmpeg ... 2,java代码:摘自 https://blog.csdn.net/javaer_lee/article/details/79425201 package test; import java.io.File; import java.io.IOException; i...
  • ffmpeg支持的类型有:asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等,这些类型,可以利用ffmpeg进行直接转换。ffmpeg不支持的类型有:wmv9,rm,rmvb等,这些类型需要先用别的工具(mencoder)转换为avi(ffmpeg能...
  • java ffmpeg格式转换

    2020-01-10 10:12:24
    package ... import java.io.File; import java.util.ArrayList; import java.util.List; /** * ffmpeg格式转换 */ public class ConvertVideoUtil { private static String inputPath = ""...
  • java视频转换

    2011-08-02 17:44:44
    // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) return "true".equals(fileType.get(type)); } private static void processFLV() { if (new File(INPUT_PATH).isFile()) { ...
  • java对视频的转换

    2011-08-03 14:18:46
    java实现视频的转换功能:有两种实现方法ffmpeg和mencoder,ffmpeg支持的视频格式有asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等mencoder支持的视频格式wmv9,rm,rmvb。能用ffmpeg转换的尽量使用ffmpeg进行转换
  • web播放视频(flv mp4 wmv avi)

    千次阅读 2016-07-04 17:13:20
    web播放视频(flv mp4 wmv avi) html5
  • 视频网用户上传了视频有很多种格式如rm,wmv,mpg,avi等等 ...ffmpeg.exe能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) 对ffmpeg.exe无法解析的文件格式(wmv9,rm,rmvb等)...
  • java小例题说明更直观:(可以直接编译运行) 环境我在windows平台下测试的。。。 需要在e:下有ffmpeg.exe;mencoder.exe;drv43260.dll;pncrt.dll共4个文件。 还要在e:input下放各种文件名为a的以下各种视频文件...
  • 如何使用java代码进行视频格式的转换(FLV)
  • java实现音频转换

    2014-01-27 18:23:00
    这里需要用到第三方 ffmpeg.exe ...import java.io.File;import java.util.ArrayList;import java.util.List;import java.util.logging.Level;import java.util.logging.Logger; import sun.rmi.r...
  • ffmpeg可以转换大多数视频文件,如:avi|wmv|mkv|asx|swf|asf|vob|mpg|mp4|mov|flv等 但有些视频格式,ffmpeg无法,比如:rm,rmvb等 所以遇到ffmpeg不能的视频格式时,需要调用另一个工具mencoder,利用...
  • ffmpeg视频格式转换(Java)

    千次阅读 2013-07-11 14:59:12
    ffmpeg -i E:\input\a.wmv -ab 128 -acodec libmp3lame -ac 1 -ar 22050 -r 29.97 -qscale 4 -y E:\output\a.flv 低品质: ffmpeg -i E:\input\a.wmv -ab 128 -acodec libmp3lame -ac
  • java 做视频转换主要用到开源的ffmpeg或者mencoder,还要有MP4Box。 详细介绍: ffmpeg:http://www.ffmpeg.org/ mencoder:http://en.wikipedia.org/wiki/MEncoder MP4Box:...
  • 虽然题目叫“JAVA转视频”,然而转换视频格式的核心工具并不是用JAVA写的。JAVA只是一个外壳,同样我们可以用...能将asx,asf,mpg,wmv,3gp,mp4,mov,avi等格式转换为FLV格式,并提供将视频中任意时间帧转换为jpg
  • Java 实现视频FLV,支持完成进度百分比
  • java 实现视频转换通用工具类:获取视频元数据信息(一) java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二) 这节主要是ffmpeg的相关方法封装,在实际调用中主要使用ffmpeg的方法,...
  • ffmpeg.exe能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) 对ffmpeg.exe无法解析的文件格式(wmv9,rm,rmvb等), 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式; mencoder.exe;drv...
  • Java将视频转换为flash

    2008-11-19 11:43:05
    Java将视频转换为flash 为这个问题头痛了好久,今天看到这个帖子,感觉有点茅塞顿开,所以拿来转帖。换了新工作比较忙是一个原因。最近的工作是做一个素材管理的系统,其中有个要求做视频预览,将用户上传的视频...
  • 面试电子书)\最新Java架构视频\Java架构视频(1)\Spring开发神器,玩SpringBoot开启微服务之旅\云析学院【小五老师】Spring开发神器,玩SpringBoot开启微服务之旅.mp4 文件:D:\BaiduNetdiskDownload\精品Java...
  • 最近由于项目需要,研究了一下如何用Java实现视频转换,“着实”废了点心思,整理整理,写出给自己备忘下。 思路 由于之前没有没法过相关功能的经验,一开始来真不知道从哪里入手。当然,这个解决,google一下...
  • Java面试题02.java的垮平台原理.mp4Java面试题03.搭建一个java的开发环境.mp4Java面试题04.java中int占几个字节.mp4Java面试题05.java面向对象的特征.mp4Java面试题06.装箱和拆箱.mp4Java...
  • 虚拟主机设置MIME类型swf、wmv、3gp、mp4、jad等格式 配置IIS支持sis下载,其它格式也是一样,如.thm、.3gp呀.... 如何开通WAP网站,通过手机来浏览的我网站呢?  浏览WAP网站与WEB网站都是需要服务器端和终端支持...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,759
精华内容 1,903
关键字:

javawmv转mp4

java 订阅