国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java如何整合FFmpeg、FFprobe等音視頻處理工具,零基礎(chǔ)照樣玩

這篇具有很好參考價(jià)值的文章主要介紹了Java如何整合FFmpeg、FFprobe等音視頻處理工具,零基礎(chǔ)照樣玩。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言:時(shí)隔一年多了,不知不覺博客停更那么久了,那不忘初心還記得嗎?
最近在做音視頻相關(guān)的開發(fā),沒什么資料并且之前也沒有接觸過這方面,
咨詢了T屆的好友,拿到了下面的這張表情包,問題是當(dāng)我百度的時(shí)候才
發(fā)現(xiàn)與我想要知道的相關(guān)文檔是沒有一篇能滿足,東拼西湊的找文檔,可
還是沒辦法實(shí)現(xiàn)想要的功能,于是我陷入了沉思......最終還是輕松搞定
了這個(gè)需求,于是我打開了csdn想給后人留一片樹蔭。

最后奉上工具的學(xué)習(xí)資料(感興趣的可以看看),廢話不多說?。。。。?/strong>

FFmpeg是啥:? ffmpeg(命令行工具) 是一個(gè)快速的音視頻轉(zhuǎn)換工具。
FFmpeg能干啥:如果你用過愛剪輯的話或者其他一些音視頻處理軟件的話,你可以理解他們能做的你用玩意都能做。
為啥要用FFmpeg:開源免費(fèi)啊,你用軟件要收費(fèi)呢,但是這不是關(guān)鍵,核心是你要整合進(jìn)Java,怎么用Java和執(zhí)行它,也就是你咋去寫個(gè)愛剪輯呢(當(dāng)然呢那種東西靠一個(gè)兩個(gè)人也是很難寫出來的,本文結(jié)合實(shí)際情況處理一下小問題還是綽綽有余)。

FFmpeg先去這學(xué)習(xí)一下再來看哦

1、我的需求

需要將mp3,m4a,m4r,wma,amr,aac,ac3,ape,flac,mmf,ogg類型格式的音頻轉(zhuǎn)成wav格式并指定聲道和采樣率;
需要將mp4,3gp,mov,m4v,mkv,flv,vob,wmv,rm,rmvb,dat,asf,asx,avi類型格式的視頻先提取音軌再轉(zhuǎn)成wav格式并指定聲道和采樣率;

2、設(shè)計(jì)&編碼

當(dāng)時(shí)了解到的技術(shù)選型就是ffmpeg工具了,去簡單的學(xué)習(xí)了一下這個(gè)工具的基礎(chǔ)語法以及音視頻開發(fā)的基本規(guī)范和格式。

于是我寫了工具類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進(jìn)行音頻視頻操作,需先下載安裝ffmpeg
 */
@Slf4j
@Data
@Configuration
public class FfmpegUtil {
    @Value("${ffmpeg.temppath}")
    private String tempPath;//保存音頻、視頻的臨時(shí)文件夾
    @Value("${ffmpeg.ffmpeg-util-path}")
    private String ffmpegUtilPath;//工具包路徑

    /**
     * 將音頻統(tǒng)一轉(zhuǎn)成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;
    }
    /**
     * 調(diào)用命令行執(zhí)行
     *
     * @param command 命令行參數(shù)
     */
    public static void commandStart(List<String> command) throws IOException, InterruptedException {
        ProcessBuilder builder = new ProcessBuilder();
        //正常信息和錯(cuò)誤信息合并輸出
        builder.redirectErrorStream(true);
        builder.command(command);
        log.debug(command.toString());
        //開始執(zhí)行命令
        Process process;
        process = builder.start();
        //如果你想獲取到執(zhí)行完后的信息,那么下面的代碼也是需要的
        String line = "";
        BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
        while ((line = br.readLine()) != null) {
            log.debug(line);
        }
        process.waitFor();
        log.debug("命令執(zhí)行放回code為:"+process.exitValue());
        if(process.exitValue()==1){
            throw new RuntimeException();
        }
    }
    /*
       創(chuàng)建臨時(shí)目錄(用于存儲(chǔ)轉(zhuǎn)換后的音視頻和原音視頻)
       每次使用轉(zhuǎn)換功能是都調(diào)用方式目錄被刪除導(dǎo)致的異常
  */
    public void createTempDir(){
        //如果沒有文件夾,則創(chuàng)建
        File tempMediaFile = new File(tempPath);
        if (!tempMediaFile.exists() && !tempMediaFile.isDirectory()) {
            boolean isSuccess = tempMediaFile.mkdirs();
            log.info("初始化音視頻臨時(shí)目錄是否成功:{}",isSuccess);
        }
    }

//    /**
//     * 獲取ffmpeg的工具路徑,根據(jù)操作系統(tǒng)去自動(dòng)選擇
//     * @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();
這句要注意,本地不加不報(bào)錯(cuò)因?yàn)楸镜靥幚硭俣瓤?,服?wù)器有內(nèi)耗的話不加這個(gè)偶爾就報(bào)錯(cuò)的

如果需要其他操作直接仿照我的寫法來就好了,具體的命令可以看我上面給點(diǎn)那個(gè)鏈接里面的內(nèi)容,都是從0告訴你。

3、總結(jié)

  • 先去簡單了解一下ffmpeg的基礎(chǔ)用法
  • 仿照工具類完成一些想要的操作
  • 資料我給你們打包好,免費(fèi)奉上(工具包的os\win版本,ffmpeg專業(yè)化文檔)
  • 資料都打包在這里了免費(fèi)拿取點(diǎn)個(gè)贊唄
    Java如何整合FFmpeg、FFprobe等音視頻處理工具,零基礎(chǔ)照樣玩
    Java如何整合FFmpeg、FFprobe等音視頻處理工具,零基礎(chǔ)照樣玩

Java如何整合FFmpeg、FFprobe等音視頻處理工具,零基礎(chǔ)照樣玩文章來源地址http://www.zghlxwxcb.cn/news/detail-433619.html

到了這里,關(guān)于Java如何整合FFmpeg、FFprobe等音視頻處理工具,零基礎(chǔ)照樣玩的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ffmpeg系列學(xué)習(xí)——FFmpeg的音視頻處理

    1.音視頻的采樣率、采樣位深度和聲道數(shù) 音頻和視頻的采樣率、采樣位深度和聲道數(shù)是媒體文件中的重要參數(shù),它們會(huì)直接影響到音視頻的質(zhì)量和文件大小。下面對(duì)它們進(jìn)行詳細(xì)解釋: 采樣率 采樣率指音頻每秒鐘采樣的次數(shù),用赫茲(Hz)表示。采樣率越高,音頻的還原度越

    2024年02月04日
    瀏覽(84)
  • [音視頻處理] FFmpeg使用指北1-視頻解碼

    本文將詳細(xì)介紹如何使用ffmpeg 4.4在C++中解碼多種格式的媒體文件,這些媒體文件可以是視頻、視頻流、圖片,或是桌面截屏或USB攝像頭的實(shí)時(shí)圖片。解碼文件后,還將每幀圖片轉(zhuǎn)換為OpenCV的Mat格式以供后續(xù)使用。 目錄 1 基于ffmpeg的媒體文件解碼 1.1 簡介 1.2 詳細(xì)代碼 2 ffmpeg函

    2024年02月07日
    瀏覽(25)
  • FFmpeg音視頻處理工具介紹及應(yīng)用

    FFmpeg音視頻處理工具介紹及應(yīng)用

    FFmpeg項(xiàng)目由 Fabrice Bellard在2000年創(chuàng)立。到目前為止,F(xiàn)Fmpeg項(xiàng)目的開發(fā)者仍然與VLC、MPV、dav1d、x264等多媒體開源項(xiàng)目有著廣泛的重疊。Ffmpeg(FastForward Mpeg)是一款遵循GPL的開源軟件,在音視頻處理方面表現(xiàn)十分優(yōu)秀,幾乎囊括了現(xiàn)存所有的視音頻格式的編碼,解碼、轉(zhuǎn)碼、混合

    2024年02月08日
    瀏覽(94)
  • JavaCV與FFmpeg:音視頻流處理技巧

    1. JavaCV簡介 JavaCV是一個(gè)開源的Java接口,為OpenCV、FFmpeg和其他類似工具提供了封裝。它允許Java開發(fā)者直接在他們的應(yīng)用程序中使用這些強(qiáng)大的本地庫,而無需深入了解復(fù)雜的本地代碼。JavaCV特別適用于處理圖像和視頻數(shù)據(jù),提供了一系列的功能,如圖像捕獲、處理和視頻編解

    2024年02月04日
    瀏覽(109)
  • 音視頻處理 ffmpeg中級(jí)開發(fā) H264編碼

    音視頻處理 ffmpeg中級(jí)開發(fā) H264編碼

    libavcodec/avcodec.h 常用的數(shù)據(jù)結(jié)構(gòu) AVCodec 編碼器結(jié)構(gòu)體 AVCodecContext 編碼器上下文 AVFrame 解碼后的幀 結(jié)構(gòu)體內(nèi)存的分配和釋放 av_frame_alloc 申請(qǐng) av_frame_free() 釋放 avcodec_alloc_context3() 創(chuàng)建編碼器上下文 avcodec_free_context() 釋放編碼器上下文 解碼步驟 avcodec_find_decoder 查找解碼器 avcod

    2024年02月01日
    瀏覽(109)
  • 開源的跨平臺(tái)的音視頻處理工具FFmpeg

    FFmpeg是一個(gè)開源的跨平臺(tái)的音視頻處理工具,可以對(duì)音頻、視頻進(jìn)行轉(zhuǎn)碼、裁剪、調(diào)節(jié)音量、添加水印等操作。 廣泛的格式支持。 FFmpeg能夠解碼、編碼、轉(zhuǎn)碼、復(fù)用、分離、流式傳輸、過濾和播放幾乎人類和機(jī)器所創(chuàng)造的任何內(nèi)容。它支持最古老且晦澀難懂的格式,也支持

    2024年02月15日
    瀏覽(88)
  • 強(qiáng)大開源的音視頻處理工具ffmpeg安裝與使用

    強(qiáng)大開源的音視頻處理工具ffmpeg安裝與使用

    FFmpeg 是一個(gè)開源的跨平臺(tái)音視頻處理工具,提供了豐富的命令行模式下音視頻處理功能,包括格式轉(zhuǎn)換、編解碼、過濾器應(yīng)用等。 由于 FFmpeg 支持的格式廣泛,且可用于多個(gè)平臺(tái)和操作系統(tǒng)(如 Windows、Linux、MacOS 等),因此它已成為許多多媒體應(yīng)用程序和服務(wù)的核心組件。

    2024年02月05日
    瀏覽(101)
  • FFmpeg——開源的開源的跨平臺(tái)音視頻處理框架簡介

    FFmpeg——開源的開源的跨平臺(tái)音視頻處理框架簡介

    引言: ????????FFmpeg是一個(gè)開源的跨平臺(tái)音視頻處理框架,可以處理多種音視頻格式。它由Fabrice Bellard于2000年創(chuàng)建,最初是一個(gè)只包括解碼器的項(xiàng)目。后來,很多開發(fā)者參與其中,為FFmpeg增加了多種新的功能,例如編碼器、過濾器、muxer、demuxer等等,使它成為了一個(gè)完整

    2024年03月23日
    瀏覽(90)
  • 【音視頻處理】基礎(chǔ)框架介紹,F(xiàn)Fmpeg、GStreamer、OpenCV、OpenGL

    【音視頻處理】基礎(chǔ)框架介紹,F(xiàn)Fmpeg、GStreamer、OpenCV、OpenGL

    大家好,歡迎來到停止重構(gòu)的頻道。? 本期我們介紹 音視頻處理的基礎(chǔ)框架 。 包括FFmpeg、GStreamer、OpenCV、OpenGL 。 我們按這樣的分類介紹 : 1、編解碼處理:FFmpeg、GStreamer 2、圖像分析:OpenCV 3、復(fù)雜圖像生成:OpenGL 首先是編解碼處理的基礎(chǔ)框架,這類基礎(chǔ)框架的 應(yīng)用場景

    2024年02月08日
    瀏覽(49)
  • 音視頻 FFmpeg如何查詢命令幫助文檔

    ffmpeg:超快音視頻編碼器 ffplay:簡單媒體播放器 ffprobe:簡單多媒體流分析器 基本信息:ffmpeg -h 高級(jí)信息:ffmpeg -h long 所有信息:ffmpeg -h full 所有信息:ffplay -h 所有信息:ffprobe -h ffmpeg/ffplay/ffprobe部分參數(shù)通用,部分參數(shù)不通用,在使用時(shí)需要注意 推薦一個(gè)零聲學(xué)院項(xiàng)目課,個(gè)

    2024年02月12日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包