03-视频处理-视频处理技术方案_项目中处理视频怎么做-程序员宅基地

技术标签: day14 媒资管理  

1.2.2 视频处理技术方案
如何通过程序进行视频处理?
ffmpeg是一个可行的视频处理程序,可以通过Java调用ffmpeg.exe完成视频处理。
在java中可以使用Runtime类和Process Builder类两种方式来执行外部程序,工作中至少掌握一种。
本项目使用Process Builder的方式来调用ffmpeg完成视频处理。
关于Process Builder的测试如下:
在这里插入图片描述

    @Test
    public void testProcessBuilder() throws IOException {
    

        //创建ProcessBuilder对象
        ProcessBuilder processBuilder =new ProcessBuilder();
        //设置执行的第三方程序(命令)
        processBuilder.command("ping","127.0.0.1");
        //processBuilder.command("ipconfig");
//        processBuilder.command("java","-jar","f:/xc-service-manage-course.jar");
        //将标准输入流和错误输入流合并,通过标准输入流读取信息就可以拿到第三方程序输出的错误信息、正常信息
        processBuilder.redirectErrorStream(true);

        //启动一个进程
        Process process = processBuilder.start();
        //由于前边将错误和正常信息合并在输入流,只读取输入流
        InputStream inputStream = process.getInputStream();
        //将字节流转成字符流
        InputStreamReader reader = new InputStreamReader(inputStream,"gbk");
       //字符缓冲区
        char[] chars = new char[1024];
        int len = -1;
        while((len = reader.read(chars))!=-1){
    
            String string = new String(chars,0,len);
            System.out.println(string);
        }

        inputStream.close();
        reader.close();

    }

在这里插入图片描述
在这里插入图片描述

    @Test
    public void testFFmpeg() {
    
        ProcessBuilder processBuilder = new ProcessBuilder();
        //定义命令内容
        List<String> command = new ArrayList<>();
        command.add("E:\\java_soft\\ffmpeg-20180227-fa0c9d6-win64-static\\bin\\ffmpeg.exe");
        command.add("‐i");
        command.add("E:\\java_www\\ffmpeg_test\\lucene.avi");
        command.add("‐y");//覆盖输出文件
        command.add("‐c:v");
        command.add("libx264");
        //测试使用工具类将avi转成mp4
        command.add("‐s");
        command.add("1280x720");
        command.add("‐pix_fmt");
        command.add("yuv420p");
        command.add("‐b:a");
        command.add("63k");
        command.add("‐b:v");
        command.add("753k");
        command.add("‐r");
        command.add("18");
        command.add("E:\\java_www\\ffmpeg_test\\1.mp4");
        processBuilder.command(command);
        //将标准输入流和错误输入流合并,通过标准输入流读取信息
        processBuilder.redirectErrorStream(true);
        try {
    
            //启动进程
            Process start = processBuilder.start();
            //获取输入流
            InputStream inputStream = start.getInputStream();
            //转成字符输入流
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk");
            int len = -1;
            char[] c = new char[1024];
            StringBuffer outputString = new StringBuffer();
            //读取进程输入流中的内容
            while ((len = inputStreamReader.read(c)) != -1) {
    
                String s = new String(c, 0, len);
                outputString.append(s);
                System.out.print(s);
            }
            inputStream.close();
        } catch (IOException e) {
    
            e.printStackTrace();
        }
    }

在这里插入图片描述

在这里插入图片描述
这种方式太麻烦,所以改为以下方式
上边的代码已经封装成工具类,参见:
在这里插入图片描述
上边的工具类中:
Mp4VideoUtil.java完成avi转mp4
HlsVideoUtil.java完成mp4转hls
分别测试每个工具类的使用方法。



    @Test
    public void testProcessMp4() {
    
        //String ffmpeg_path, String video_path, String mp4_name, String mp4folder_path
        //ffmpeg的路径
        String ffmpeg_path = "E:\\java_soft\\ffmpeg-20180227-fa0c9d6-win64-static\\bin\\ffmpeg.exe";
        //video_path视频地址
        String video_path = "E:\\java_www\\ffmpeg_test\\lucene.avi";
        //mp4_name mp4文件名称
        String mp4_name = "1.mp4";
        //mp4folder_path mp4文件目录路径
        String mp4folder_path = "E:/java_www/ffmpeg_test/";
        Mp4VideoUtil mp4VideoUtil = new Mp4VideoUtil(ffmpeg_path, video_path, mp4_name, mp4folder_path);
        //开始编码,如果成功返回success,否则返回输出的日志
        String result = mp4VideoUtil.generateMp4();
        System.out.println(result);
    }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/minihuabei/article/details/118337566

智能推荐

深入浅出MFC:DDX_Control本质探究-程序员宅基地

文章浏览阅读1.6k次。注:以下以名为Test的对话框工程为例讲解对话框程序中,如果我们有拖标准控件到界面中,并且有和控件类变量绑定,则会有void CTestDlg::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_BTN_TEST, m_testBtn); D..._ddx_control

神经网络学习3【计算流程公式推导+Python代码框架】_神经网络计算流程-程序员宅基地

文章浏览阅读593次。在上一篇文章 神经网络学习2【分类器+升华至神经元 搭建神经网络】中由浅入深的理解了从分类器开始如何理解神经网络的内部计算。接下来我们借用数学工具去逐步推导其计算公式,并同时建立出Python代码框架。1.神经网络公式推导1.1两层神经网络计算尝试使用只有两层、每层两个神经元的较小的神经网络,来演示神经网络如何工作:两个输入值分别为1.0和0.5,每个节点使用激活函数。使用一些随机权重:第一层仅作输入层,不需要使用激活函数。第二层中需要做一些计算,以及使用激活函数,当然,在这个简单的网络_神经网络计算流程

用 Vue3 手撕了个企业级项目,真香!-程序员宅基地

文章浏览阅读1.9k次。最近几年,随着短视频、小程序、直播带货的火爆,前端开发工程师越来越热门,薪资待遇也快接近后端开发工程师了,前端领域进化为内卷重灾区。然而伴随着 Vue 3.0 的发布,前端技术也迎来了一次大革新,像是字节跳动、腾讯等开始重点考察,前端程序员对 Vue 3 框架的理解和实际应用能力。不再是当年懂个生命周期、虚拟 DOM,就可以轻松进大厂的时代了。同时网上也掀起了一股学习 Vue 3 的热潮,面对着网..._手撕vue3 双向

ITRON系统_itron操作系统-程序员宅基地

文章浏览阅读5.5k次。ITRON系统使用方法目录1引言 42ITRON系统介绍 52.1概要 52.2构成 52.2.1ITRON系统构成 52.2.2ITRON体系结构 52.3应用领域 62.4如何使用ITRON系统 63ITRON的基本机能 83.1Task管理机能 83.1.1Task 83.1.2任务调_itron操作系统

C-index/C-statistic 计算的5种不同方法及比较_模型之间c statistics的比较方法-程序员宅基地

文章浏览阅读3.4w次,点赞24次,收藏147次。前言声明: 所有计算基于R软件,如果有人问其他软件如何实现,请自行Google。评价一个预测模型的表现可以从三方面来度量:区分能力(discrimination): 指的是模型区分有病/没病,死亡/活着等结局的预测能力。简单举个例子,比如说,现有100个人,50个有病,50个健康;你用预测模型预测出46个有病,54个没病。那么这46个覆盖到50个真正有病的人的多少就直接决定了你模型_模型之间c statistics的比较方法

System.BadImageFormatException: 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。-程序员宅基地

文章浏览阅读2.2w次。今天更新webservices的时候,如下图: 报出了下面的错误: 在服务端打开asmx文件时,错误信息如下:“/”应用程序中的服务器错误。未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈_system.badimageformatexception: 未能加载文件或程序集“oracle.dataaccess”或

随便推点

Apache Zeppelin安装_apache zeppelin 正式版本-程序员宅基地

文章浏览阅读1.5k次。欢迎来到Apache Zeppelin!本页面是有助于开始使用的说明。安装Apache Zeppelin正式支持并在以下环境下进行测试:NameValueOracle JDK1.7 (set JAVA_HOME)OSMac OSX Ubuntu 14.X _apache zeppelin 正式版本

iOS之UIImageView和UIImage_uiimageview image-程序员宅基地

文章浏览阅读5.1k次。1.UIImageView中的视图内容显示模式 UIImageView *imageV=[[UIImageViewalloc]init]; imageV.scaleToFill------默认缩放填充; imageV.scaleAspectfit-------有留白; imageV.AspectFill------自适应填充,视图会被裁剪;..._uiimageview image

解决 /dev/mapper/centos-root 空间不足的问题-程序员宅基地

文章浏览阅读4.6k次。Last login: Mon Feb 25 04:53:40 2019 from 10.0.0.3[root@vmhzpmysql ~]# df -hlFilesystem Size Used Avail Use% Mounted on/dev/mapper/centos-root 4.4G 3.5G 962M 79% /devtmpfs ..._ivextend -l 1.95t /dev/mapper/centos-rootrounding size to boundary between p

SolidWorks生成URDF文件,并配置_solidworks 并联机构urdf设置-程序员宅基地

文章浏览阅读6.1k次。SolidWorks生成URDF文件,并配置本文主要讲解如何生成URDF,然后通过MoveIt Setup Assistant配置urdf文件。主要有以下几点: 1:sw_urdf_exporter插件。 2:配置生成可执行的包。(插件生成的是ros包,不是简单的文件_solidworks 并联机构urdf设置

关于farpoint设置自动列宽行高及单元格内容自动换行举例_farpoint 自动换行-程序员宅基地

文章浏览阅读8.2k次,点赞2次,收藏4次。关于farpoint如何设置 单元格换行 及自动调整行高 行宽。FarPoint.Win.Spread.CellType.TextCellType text = newFarPoint.Win.Spread.CellType.TextCellType(); text.Multiline = true; _farpoint 自动换行

Eclipse安装ADT插件错误-程序员宅基地

文章浏览阅读724次。今天重新搭建一套Android开发环境,按照步骤在eclipse中install ADT的时候出错接下来点之后出现以下错误Cannot complete the install because one or more required itemscould not be found.Software being installed: Android Development T

推荐文章

热门文章

相关标签