**

利用 FFmpeg 进行简单的音频拼接 降噪 合成

**
项目需要M4a 格式的音频拼接,由于 m4a 不能像 mp3 直接以流的方式进行拼接,所以简单学习了一下 FFmepeg 。在这里分享一下。
1· 首先 去官网下载 对应的工具 。
2· 安装配置环境变量。
安装教程传送门,就不重复写了!

直接上代码,根据大神教程修改!
增加降噪处理!(ps:稀里糊涂试出来的,希望有大神能过解答!)

package test;import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;public class ConvertVideo {private static String inputPath = "";private static String outputPath = "";private static String ffmpegPath = "";public static void main(String args[]) throws IOException {getPath();if (!checkfile(inputPath)) {System.out.println(inputPath + " is not file");return;}if (process()) {System.out.println("ok");}}// 先获取当前项目路径,在获得源文件、目标文件、转换器的路径private static void getPath() { File diretory = new File("");try {//输入音频路径inputPath = "C:\\Users\\xiyem\\Desktop\\单声道音频\\苹果\\audio1.m4a";//输出路径outputPath = "C:\\Users\\xiyem\\Desktop\\输出音频\\";//ffmpeg工具路径ffmpegPath = "E:\\ffmpeg\\bin\\";} catch (Exception e) {System.out.println("getPath出错");}}private static boolean process() {int type = checkContentType();boolean status = false;if (type == 0) {System.out.println("直接转成m4a格式");status = processFLV(inputPath);// 直接转成flv格式} else if (type == 1) {String avifilepath = processAVI(type);if (avifilepath == null)return false;// 没有得到avi格式status = processFLV(avifilepath);// 将avi转成flv格式}return status;}private static int checkContentType() {String type = inputPath.substring(inputPath.lastIndexOf(".") + 1, inputPath.length()).toLowerCase();// ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv, m4a等)if (type.equals("avi")) {return 0;} else if (type.equals("mpg")) {return 0;} else if (type.equals("wmv")) {return 0;} else if (type.equals("3gp")) {return 0;} else if (type.equals("mov")) {return 0;} else if (type.equals("mp4")) {return 0;} else if (type.equals("asf")) {return 0;} else if (type.equals("asx")) {return 0;} else if (type.equals("flv")) {return 0;} else if (type.equals("m4a")) {return 0;}// 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),// 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.else if (type.equals("wmv9")) {return 1;} else if (type.equals("rm")) {return 1;} else if (type.equals("rmvb")) {return 1;}return 9;}private static boolean checkfile(String path) {File file = new File(path);if (!file.isFile()) {return false;}return true;}// 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等), 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.private static String processAVI(int type) {List<String> commend = new ArrayList<String>();commend.add(ffmpegPath + "mencoder");commend.add(inputPath);commend.add("-oac");commend.add("lavc");commend.add("-lavcopts");commend.add("acodec=mp3:abitrate=64");commend.add("-ovc");commend.add("xvid");commend.add("-xvidencopts");commend.add("bitrate=600");commend.add("-of");commend.add("avi");commend.add("-o");commend.add(outputPath + "a.m4a");try {ProcessBuilder builder = new ProcessBuilder();Process process = builder.command(commend).redirectErrorStream(true).start();new PrintStream(process.getInputStream());new PrintStream(process.getErrorStream());process.waitFor();return outputPath + "a.avi";} catch (Exception e) {e.printStackTrace();return null;}}// ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)private static boolean processFLV(String oldfilepath) {if (!checkfile(inputPath)) {System.out.println(oldfilepath + " is not file");return false;}File directory = new File("");//设定为当前文件夹try {System.out.println(directory.getCanonicalPath());//获取标准的路径System.out.println(directory.getAbsolutePath());//获取绝对路径//将需要合成的音频路径写到 text 文件中File text = new File("F:\\work\\idea\\Java8Test\\WebContent\\file\\list.txt");text.createNewFile();PrintWriter writer = new PrintWriter(text);writer.write("file 'C:\\Users\\xiyem\\Desktop\\输出音频\\record0.m4a'\n" +"file 'C:\\Users\\xiyem\\Desktop\\输出音频\\record0.m4a'\n" +"file 'C:\\Users\\xiyem\\Desktop\\单声道音频\\record0.m4a'\n" +"file 'C:\\Users\\xiyem\\Desktop\\输出音频\\record0.m4a'\n");writer.flush();writer.close();List<String> command = new ArrayList<String>();command.add(ffmpegPath + "ffmpeg");command.add("-y");//直接强制替换command.add("-f");command.add("concat");command.add("-safe");command.add("0");command.add("-i");command.add(directory.getCanonicalPath() + "\\WebContent\\file\\list.txt");command.add("-ac");//通道 声道  1  或 2command.add("1");command.add("-ar");//声音的采样频率,好像PSP只能支持24000Hzcommand.add("8000");command.add("-ab");// 音频数据流量,一般选择32、64、96、128command.add("44100");//此处不是很懂,设置成这个参数音频底噪会小,但是音色会有些发闷,希望大神解答。command.add("-vol");//设置音量command.add("200");//放大2倍// command.add("-acodec");// 音频编码用AAC// command.add("aac");// command.add("-ab");// 音频数据流量,一般选择32、64、96、128// command.add("64");// command.add("-ac");//通道 声道  1  或 2// command.add("1");// command.add("-ar");//声音的采样频率,好像PSP只能支持24000Hz// command.add("44100");command.add(outputPath + "789.m4a");try {Process videoProcess = new ProcessBuilder(command).redirectErrorStream(true).start();new PrintStream(videoProcess.getErrorStream()).start();new PrintStream(videoProcess.getInputStream()).start();videoProcess.waitFor();return true;} catch (Exception e) {e.printStackTrace();return false;}} catch (Exception e) {}//File.getCanonicalPath()和File.getAbsolutePath()大约只是对于new File(".")和new File("..")两种路径有所区别。return false;}
}class PrintStream extends Thread {java.io.InputStream __is = null;public PrintStream(java.io.InputStream is) {__is = is;}public void run() {try {while (this != null) {int _ch = __is.read();if (_ch != -1)System.out.print((char) _ch);else break;}} catch (Exception e) {e.printStackTrace();}}
}

~END~

利用 FFmpeg 进行简单的音频拼接 降噪 合成相关推荐

  1. (三)利用ffmpeg实现简单的MP4推流

    首先的话,我想写感谢一个带我进入音视频处理领域的人,虽然从未谋面,但是是他的博客指引了我学习音视频开发的道路,启蒙了一个曾经迷茫的程序员.但是很可惜,他已经在2016年不幸离开了我们,他是雷霄骅,一位 ...

  2. 利用Python,简单切割音频文件,只需5行代码!

    一直在学的一套美语教程,开头有18秒的音乐,每次都要听一遍,神烦. 索性写个脚本把所有音频开头音乐全部切掉. 参考 http://blog.csdn.net/skywalkerVVV/article/ ...

  3. Qt音频利用Phonon实现简单的音频播放

    头文件: #include <Phonon/MediaObject> #include <Phonon/VideoPlayer> #include <Phonon/Aud ...

  4. 利用FFmpeg制作视频序列

    前言 本文介绍了利用FFmpeg进行视频测试序列制作的方法.所谓测试序列就是将若干个不同场景的视频片段,按照不同的分辨率.码率.编码方法等进行处理,然后拼接成一条长视频,供测试者打分.一般包括以下几个 ...

  5. 如何利用ffmpeg和sox进行降噪

    目录 如何利用ffmpeg和sox进行降噪 安装工具 开始降噪 如何利用ffmpeg和sox进行降噪 你好!本篇博客的降噪思路:通过截取音频中的已知噪音部分,根据该噪音样本对整个音频进行降噪.截取噪音 ...

  6. 利用ffmpeg提供的库(API)进行音频与视频的编码并生成文件

    Output example.c 目录 [隐藏] 1 概述 2 音频输出 2.1 add_audio_stream 2.2 open_audio 2.3 get_audio_frame 2.4 wri ...

  7. linux下ffmpeg安装实现音频拼接

    前言:因为需要支持MP3格式,需要提前安装MP3编码库,作者在这里走的弯路,重新编译的ffmpeg 1.下载安装MP3编码库 因为FFmpeg默认只支持mp3的解码,不支持mp3编码.如果想把提取出来 ...

  8. python音频合成_音频拼接的简单实现方法(python一种,java两种)

    音频拼接,就是5s+5s=10s的这种拼接. 需要修改的地方都是有三处,在代码里标注好了. 一.Python实现: Python3 #!/usr/bin/env python # -*- coding ...

  9. Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件

    Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 目录 利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 1.先下载ff ...

最新文章

  1. String : string的长度?string的子串?
  2. 八十九、动态规划系列背包问题之完全背包
  3. 分成收益破5000后,我决定将付费专栏开源了
  4. clone的fork与pthread_create创建线程有何不同pthread多线程编程的学习小结(转)
  5. 二级c语言程序设计bug,《C语言及程序设计》实践项目——发现Bug
  6. select for update作用
  7. python分数序列求和_Python练习题 019:求分数序列之和
  8. 2引擎帮助文档_ANSA快速入门指南中文帮助文档浅析(上)
  9. VS.NET 控件命名规范
  10. mysql 垂直分表技术的实战演练,有实战代码。
  11. 做出产品不难,做好产品必须高手
  12. matlab读取地震波数据,基于Matlab的人工地震波程序编写
  13. 微信小程序:酒桌扑克娱乐喝酒小游戏
  14. 【day13】【洛谷算法题】-P5713洛谷团队系统-刷题反思集[入门2分支结构]
  15. python取值范围_python 数据库取值范围
  16. ubuntu java 中文_Ubuntu下 JAVA GUI 程序汉字显示为方框解决办法
  17. POJO JAVABEAN EJB的区别和联系
  18. 金山WPS:云端协同 AI赋能 WPS树起了Office新四大件|企服三会系列报道
  19. 语义分析语义关联挖掘
  20. win8中vm12安装macosx10.11

热门文章

  1. html-----------------------
  2. 部署农产品溯源系统的步骤
  3. 该如何把小程序安装成APP?
  4. 什么是需求规约?需求规约的作用有那些?需求规约的性质?
  5. NANO-SIM卡座封装
  6. android 飞机动画,Android实现纸飞机的简单操作
  7. 【一网打尽】独立重复事件——常见概率分布
  8. 开放系统理论(3)生物的特征——热力学第二定律,和熵(2)宇宙是倾向于无序的吗?
  9. https+ip实现摄像头访问浏览器
  10. 按键修改阈值功能、报警功能、空气质量功能实现(STM32)