ffmpeg视音频处理工具

  • FFmpeg是一套对视频,音频进行格式化,转码,内容编辑,合并等操作的工具.
  • ffmpeg官网
http://ffmpeg.org/
  • ffmpeg对各大操作系统均有支持,github上中有其对应的源码,也可以直接下载编译后的工具使用

在这里插入图片描述

  • 下载后将文件解压得到以下文件,其中bin目录下为所有ffmpeg可以行文件工具

在这里插入图片描述

  • 示例:为视频添加背景音乐

  • 命令格式,windows下需要加上.exe后缀

ffmpeg.exe -i 视频文件所在目录 -i 背景音乐所在目录 -t 输出视频时长 -y  输出文件路径
  • 文件所在目录地址可以是相对路径,也可以是绝对路径
  • 参数说明
参数说明
-i输入源
-t时长
-y是否覆盖同名文件
  • 在bin目录下放一个测试视频文件

在这里插入图片描述

  • 然后打开cmd命令行,输入以下命令,最后的输出文件名为 reset.mp4,视频时长为10秒
ffmpeg.exe -i test.mp4 -i E:\6.music\1.colud-music\花粥_在山河的角落里唱给你听.mp3 -t 10 reset.mp4
  • 执行命令后命令行会出现以下内容

在这里插入图片描述

  • 最后在bin目录下会得到rest.mp4文件,打开播放后会得到一个时长为10秒有背景音乐的视频

在这里插入图片描述

  • 示例:截取视频中某一秒的图片
  • 命令
ffmpeg.exe -ss 时间表达式 -y -i 目标视频路径 -vframes 1 视频输出地址
  • 参数说明
参数说明
-ss时间段表达式,例如 00:00:01 表示为视频第一秒
-y是否覆盖同名文件
i输入源
vframes视频帧数
  • 截取一个视频文件的第一秒图片
ffmpeg.exe -ss 00:00:01 -y -i test.mp4 -vframes 1 s.jpg

在这里插入图片描述

在Java中使用ffmpeg

  • 在java程序中可以执行cmd命令行工具,需要使用到 ProcessBuilder 工具类
  • 具体使用如下
// 可执行命令进程
ProcessBuilder processBuilder = new ProcessBuilder();

// 设置执行命令
List<String> command = new ArrayList<>();
command.add("ipconfig"); // 查看ip地址命令
processBuilder.command(command);

// 执行命令
Process start = processBuilder.start();
// 获取输入流
InputStream inputStream = start.getInputStream();

// 打印输入流信息
String string = StreamUtils.copyToString(inputStream, Charset.forName("GBK"));
System.out.println(string);
  • 运行代码控制台打印以下内容

在这里插入图片描述

示例:使用java程序调用ffmpeg,合并视频与音频文件

 // 可执行命令进程
        ProcessBuilder processBuilder = new ProcessBuilder();

        // 设置执行命令
        List<String> command = new ArrayList<>();

        // 可执行文件路径
        String ffmpeg_exe = "D:\\1.dev-office\\19.ffmpeg\\ffmpeg\\bin\\ffmpeg.exe";
        command.add(ffmpeg_exe);

        // 命令参数
       command.add("-i");

        // 视频文件路径
        String videoPath = "E:\\9.vedio\\test.mp4";
        command.add(videoPath);

        command.add("-i");
        // 音频文件路径
        String audioPath = "E:\\6.music\\1.colud-music\\花粥_在山河的角落里唱给你听.mp3";
        command.add(audioPath);
        // 格式化后视频输出路径
        String outVideoPath = "E:\\9.vedio\\outVideoPath.mp4";
        command.add(outVideoPath);

        for (String str: command){
            System.out.print(str + " ");
        }

        processBuilder.command(command);
        // 执行命令
        Process start = processBuilder.start();

        // 得到输入流
        InputStream inputStream = start.getInputStream();
       // String string = StreamUtils.copyToString(inputStream, Charset.forName("GBK"));

        OutputStream outputStream = start.getOutputStream();
        InputStream errorStream = start.getErrorStream();

        // 关闭流
        if(inputStream != null){
            inputStream.close();
        }
        if(outputStream != null){
            outputStream.close();
        }

        if(errorStream != null){
            errorStream.close();
        }
        // 打印执行命令后的内容
        //System.out.println(string);
  • 得到以下新文件

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值