【java小程序】使用ffmpeg进行视频与背景音乐的整合

本文介绍如何使用ffmpeg工具进行视频与背景音乐的整合,包括ffmpeg的简介、应用场景及代码实现方式,展示了如何在小视频开发中实现视频与音乐的完美融合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在小视频开发中,上传视频时需要选择背景音乐进行视频与背景音乐的整合。这里我们就借助ffmpeg这个工具来完成这件事。

ffmpeg简介

1、简单来说,ffmpeg就是‘视音频处理工具’。
2、跨平台的视音频处理解决方案。
3、主页:http://ffmpeg.org/。

ffmpeg的应用场景:

  • 播放器:市面上的一些播放器,像射手影音、暴风影音都是基于ffmpeg来进行开发的。
  • 转码工具:格式工厂、剪辑工具等
  • 直播、视频加码、滤镜、水印、特效等

利用ffmpeg进行代码开发

在ffmpeg的官网下载,windows的文档,解压之后bin目录下有一个ffmpeg.exe 应用程序。
1、声明一个变量ffmpegEXE,表示ffmpeg.exe存放的目录路径。
2、执行dos命令的API,ProcessBuilder

public class MergeVideoMp3 {
    private String ffmpegEXE;
    public MergeVideoMp3(String ffmpegEXE) {
        this.ffmpegEXE = ffmpegEXE;
    }

    public void convertor(String videoInputPath,String mp3InputPath,double seconds,String videoOutputPath) throws IOException{
        // 视频融合背景音乐的命令  ffmpeg.exe -i 苏州大裤衩.mp4 -i 背景音乐.mp3 -t 7 -y 新的视频.mp4
        List<String> command = new ArrayList<>();
        command.add(ffmpegEXE);
        command.add("-i");
        command.add(videoInputPath);
        command.add("-i");
        command.add(mp3InputPath);
        command.add("-t");
        command.add(String.valueOf(seconds));
        command.add("-y");
        command.add(videoOutputPath);
        //java提供的dos命令的API
        ProcessBuilder builder = new ProcessBuilder(command);
        Process process = builder.start();
        //当执行命令时,会产生一些临时文件碎片占用cpu和内存空间。
        //命令处理时会产生一些流,流会占用内存,如果流过多就会卡住我们的线程。
        //这里做一个流的处理
        InputStream errorStream = process.getErrorStream();
        InputStreamReader inputStreamReader = new InputStreamReader(errorStream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

        String line = "";
        while ((line=bufferedReader.readLine()) != null) {
        }
        if(bufferedReader != null){
            bufferedReader.close();
        }
        if(inputStreamReader != null){
            inputStreamReader.close();
        }
        if(errorStream != null) {
            errorStream.close();
        }
    }
}

ffmpeg处理工具类的调用

在上传视频成功之后,我们通过判断背景音乐id(bgmId)是否为null判断是否进行视频整合.

   if (StringUtils.isNotBlank(bgmId)) {
           Bgm bgm = bgmService.queryBgmById(bgmId);
           String mp3InputPath = FILE_SPACE + bgm.getPath();

           MergeVideoMp3 tool = new MergeVideoMp3(FFMPEG_EXE);
           String videoInputPath = finalVideoPath;
           String videoOutputName = UUID.randomUUID().toString() + ".mp4";
           uploadPathDB = "/" + userId + "/video" + "/" +videoOutputName;
           finalVideoPath = FILE_SPACE + uploadPathDB;
           tool.convertor(videoInputPath,mp3InputPath,videoSeconds,finalVideoPath);
       }

视频整合处理完毕之后,将视频信息进行数据库保存操作即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值