Java如何整合FFmpeg、FFprobe等音视频处理工具,零基础照样玩

这篇具有很好参考价值的文章主要介绍了Java如何整合FFmpeg、FFprobe等音视频处理工具,零基础照样玩。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:时隔一年多了,不知不觉博客停更那么久了,那不忘初心还记得吗?
最近在做音视频相关的开发,没什么资料并且之前也没有接触过这方面,
咨询了T届的好友,拿到了下面的这张表情包,问题是当我百度的时候才
发现与我想要知道的相关文档是没有一篇能满足,东拼西凑的找文档,可
还是没办法实现想要的功能,于是我陷入了沉思......最终还是轻松搞定
了这个需求,于是我打开了csdn想给后人留一片树荫。

最后奉上工具的学习资料(感兴趣的可以看看),废话不多说!!!!!

FFmpeg是啥:​ ffmpeg(命令行工具) 是一个快速的音视频转换工具。
FFmpeg能干啥:如果你用过爱剪辑的话或者其他一些音视频处理软件的话,你可以理解他们能做的你用玩意都能做。
为啥要用FFmpeg:开源免费啊,你用软件要收费呢,但是这不是关键,核心是你要整合进Java,怎么用Java和执行它,也就是你咋去写个爱剪辑呢(当然呢那种东西靠一个两个人也是很难写出来的,本文结合实际情况处理一下小问题还是绰绰有余)。

FFmpeg先去这学习一下再来看哦

1、我的需求

需要将mp3,m4a,m4r,wma,amr,aac,ac3,ape,flac,mmf,ogg类型格式的音频转成wav格式并指定声道和采样率;
需要将mp4,3gp,mov,m4v,mkv,flv,vob,wmv,rm,rmvb,dat,asf,asx,avi类型格式的视频先提取音轨再转成wav格式并指定声道和采样率;

2、设计&编码

当时了解到的技术选型就是ffmpeg工具了,去简单的学习了一下这个工具的基础语法以及音视频开发的基本规范和格式。

于是我写了工具类FFmpegUtils

package com.iflytex.bohai.utils;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * 利用ffmpeg进行音频视频操作,需先下载安装ffmpeg
 */
@Slf4j
@Data
@Configuration
public class FfmpegUtil {
    @Value("${ffmpeg.temppath}")
    private String tempPath;//保存音频、视频的临时文件夹
    @Value("${ffmpeg.ffmpeg-util-path}")
    private String ffmpegUtilPath;//工具包路径

    /**
     * 将音频统一转成wav格式
     * @param inputPath 输入文件
     * @param sampleRate 采样率
     */
    public String transcodeToWav(String inputPath, String sampleRate) throws IOException, InterruptedException {
        createTempDir();
        List<String> command = new ArrayList<>();
        command.add(ffmpegUtilPath);
        command.add("-y");
        command.add("-i");
        command.add(inputPath);
        command.add("-async");
        command.add("1");
        command.add("-ar");
        command.add(sampleRate);
        command.add("-ac");
        command.add("1");
        command.add("-f");
        command.add("wav");
        String outputPath=FilenameUtils.getFullPath(inputPath)+FilenameUtils.getBaseName(inputPath) +".wav";
        command.add(outputPath);
        commandStart(command);
        return outputPath;
    }

    /**
     * 从视频中提取音频为wav
     * @param inputPath 视频文件的路径
     *  @param sampleRate 采样率
     */
    public String getAudioFromVideo(String inputPath,String sampleRate) throws IOException, InterruptedException {
        createTempDir();
        List<String> command = new ArrayList<>();
        command.add(ffmpegUtilPath);
        command.add("-i");
        command.add(inputPath);
        command.add("-ac");
        command.add("1");
        command.add("-ar");
        command.add(sampleRate);
        command.add("-f");
        command.add("wav");
        command.add("-vn");
        String outputPath=FilenameUtils.getFullPath(inputPath)+FilenameUtils.getBaseName(inputPath)+".wav";
        command.add(outputPath);
        commandStart(command);
        return outputPath;
    }
    /**
     * 调用命令行执行
     *
     * @param command 命令行参数
     */
    public static void commandStart(List<String> command) throws IOException, InterruptedException {
        ProcessBuilder builder = new ProcessBuilder();
        //正常信息和错误信息合并输出
        builder.redirectErrorStream(true);
        builder.command(command);
        log.debug(command.toString());
        //开始执行命令
        Process process;
        process = builder.start();
        //如果你想获取到执行完后的信息,那么下面的代码也是需要的
        String line = "";
        BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
        while ((line = br.readLine()) != null) {
            log.debug(line);
        }
        process.waitFor();
        log.debug("命令执行放回code为:"+process.exitValue());
        if(process.exitValue()==1){
            throw new RuntimeException();
        }
    }
    /*
       创建临时目录(用于存储转换后的音视频和原音视频)
       每次使用转换功能是都调用方式目录被删除导致的异常
  */
    public void createTempDir(){
        //如果没有文件夹,则创建
        File tempMediaFile = new File(tempPath);
        if (!tempMediaFile.exists() && !tempMediaFile.isDirectory()) {
            boolean isSuccess = tempMediaFile.mkdirs();
            log.info("初始化音视频临时目录是否成功:{}",isSuccess);
        }
    }

//    /**
//     * 获取ffmpeg的工具路径,根据操作系统去自动选择
//     * @return ffmpeg的工具路径
//     */
//    private  String getFFmpegPath(){ String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
//
//        String ffmpegPath ="./ffmpeg";
//        String os = System.getProperty("os.name");
//        if(os.toLowerCase().startsWith("win")){
//            ffmpegPath ="./ffmpeg.exe";
//        }
//        return ffmpegPath;
//    }

}
process.waitFor();
这句要注意,本地不加不报错因为本地处理速度快,服务器有内耗的话不加这个偶尔就报错的

如果需要其他操作直接仿照我的写法来就好了,具体的命令可以看我上面给点那个链接里面的内容,都是从0告诉你。

3、总结

  • 先去简单了解一下ffmpeg的基础用法
  • 仿照工具类完成一些想要的操作
  • 资料我给你们打包好,免费奉上(工具包的os\win版本,ffmpeg专业化文档)
  • 资料都打包在这里了免费拿取点个赞呗
    Java如何整合FFmpeg、FFprobe等音视频处理工具,零基础照样玩
    Java如何整合FFmpeg、FFprobe等音视频处理工具,零基础照样玩

Java如何整合FFmpeg、FFprobe等音视频处理工具,零基础照样玩文章来源地址https://www.toymoban.com/news/detail-433619.html

到了这里,关于Java如何整合FFmpeg、FFprobe等音视频处理工具,零基础照样玩的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ffmpeg系列学习——FFmpeg的音视频处理

    1.音视频的采样率、采样位深度和声道数 音频和视频的采样率、采样位深度和声道数是媒体文件中的重要参数,它们会直接影响到音视频的质量和文件大小。下面对它们进行详细解释: 采样率 采样率指音频每秒钟采样的次数,用赫兹(Hz)表示。采样率越高,音频的还原度越

    2024年02月04日
    浏览(35)
  • [音视频处理] FFmpeg使用指北1-视频解码

    本文将详细介绍如何使用ffmpeg 4.4在C++中解码多种格式的媒体文件,这些媒体文件可以是视频、视频流、图片,或是桌面截屏或USB摄像头的实时图片。解码文件后,还将每帧图片转换为OpenCV的Mat格式以供后续使用。 目录 1 基于ffmpeg的媒体文件解码 1.1 简介 1.2 详细代码 2 ffmpeg函

    2024年02月07日
    浏览(46)
  • FFmpeg音视频处理工具介绍及应用

    FFmpeg项目由 Fabrice Bellard在2000年创立。到目前为止,FFmpeg项目的开发者仍然与VLC、MPV、dav1d、x264等多媒体开源项目有着广泛的重叠。Ffmpeg(FastForward Mpeg)是一款遵循GPL的开源软件,在音视频处理方面表现十分优秀,几乎囊括了现存所有的视音频格式的编码,解码、转码、混合

    2024年02月08日
    浏览(50)
  • JavaCV与FFmpeg:音视频流处理技巧

    1. JavaCV简介 JavaCV是一个开源的Java接口,为OpenCV、FFmpeg和其他类似工具提供了封装。它允许Java开发者直接在他们的应用程序中使用这些强大的本地库,而无需深入了解复杂的本地代码。JavaCV特别适用于处理图像和视频数据,提供了一系列的功能,如图像捕获、处理和视频编解

    2024年02月04日
    浏览(35)
  • 音视频处理 ffmpeg中级开发 H264编码

    libavcodec/avcodec.h 常用的数据结构 AVCodec 编码器结构体 AVCodecContext 编码器上下文 AVFrame 解码后的帧 结构体内存的分配和释放 av_frame_alloc 申请 av_frame_free() 释放 avcodec_alloc_context3() 创建编码器上下文 avcodec_free_context() 释放编码器上下文 解码步骤 avcodec_find_decoder 查找解码器 avcod

    2024年02月01日
    浏览(53)
  • 开源的跨平台的音视频处理工具FFmpeg

    FFmpeg是一个开源的跨平台的音视频处理工具,可以对音频、视频进行转码、裁剪、调节音量、添加水印等操作。 广泛的格式支持。 FFmpeg能够解码、编码、转码、复用、分离、流式传输、过滤和播放几乎人类和机器所创造的任何内容。它支持最古老且晦涩难懂的格式,也支持

    2024年02月15日
    浏览(33)
  • 强大开源的音视频处理工具ffmpeg安装与使用

    FFmpeg 是一个开源的跨平台音视频处理工具,提供了丰富的命令行模式下音视频处理功能,包括格式转换、编解码、过滤器应用等。 由于 FFmpeg 支持的格式广泛,且可用于多个平台和操作系统(如 Windows、Linux、MacOS 等),因此它已成为许多多媒体应用程序和服务的核心组件。

    2024年02月05日
    浏览(45)
  • FFmpeg——开源的开源的跨平台音视频处理框架简介

    引言:         FFmpeg是一个开源的跨平台音视频处理框架,可以处理多种音视频格式。它由Fabrice Bellard于2000年创建,最初是一个只包括解码器的项目。后来,很多开发者参与其中,为FFmpeg增加了多种新的功能,例如编码器、过滤器、muxer、demuxer等等,使它成为了一个完整

    2024年03月23日
    浏览(40)
  • 【音视频处理】基础框架介绍,FFmpeg、GStreamer、OpenCV、OpenGL

    大家好,欢迎来到停止重构的频道。  本期我们介绍 音视频处理的基础框架 。 包括FFmpeg、GStreamer、OpenCV、OpenGL 。 我们按这样的分类介绍 : 1、编解码处理:FFmpeg、GStreamer 2、图像分析:OpenCV 3、复杂图像生成:OpenGL 首先是编解码处理的基础框架,这类基础框架的 应用场景

    2024年02月08日
    浏览(36)
  • 音视频 FFmpeg如何查询命令帮助文档

    ffmpeg:超快音视频编码器 ffplay:简单媒体播放器 ffprobe:简单多媒体流分析器 基本信息:ffmpeg -h 高级信息:ffmpeg -h long 所有信息:ffmpeg -h full 所有信息:ffplay -h 所有信息:ffprobe -h ffmpeg/ffplay/ffprobe部分参数通用,部分参数不通用,在使用时需要注意 推荐一个零声学院项目课,个

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包