ffmpeg相关文章网址(用于记录一些好的文章地址~)

ffmpeg命令详解

https://blog.csdn.net/zzcchunter/article/details/68060989

java使用ffmpeg进行视频转换

https://blog.csdn.net/zhengdesheng19930211/article/details/64443620

java使用ffmpeg插件捕获视频帧数

https://blog.csdn.net/qq_24138151/article/details/78133889

1、ffmpeg介绍

ffmpeg是一个命令行工具,相关详细的命令操作可以在官网查询到详细解释,ffmpeg支持音频、视频多种编解码格式,功能强大。

ffmpeg项目由以下几个部分组成

ffmpeg(fast forword mpeg): 音视频文件转换命令行工具

ffplay( fast forword play): 用ffmpeg实现的简单媒体播放器

ffserver (fast forword server): 用ffmpeg实现的基于http,rstp多媒体服务器

ffprobe( fast forword probe): 用来输入分析输入流

libavcodec: 一个包含了所有ffmpeg音视频编解码器的库,为了保证最优性能和高可复用性,大多数编解码器从头开发

libavformat : 一个包含了所有的普通音视频格式的解析器和产生器的库

2、ffmpeg安装

fmpeg的官方网站是:http://ffmpeg.org/,编译好的windows可用版本的下载地址: http://ffmpeg.zeranoe.com/builds/,可下载下来进行在本机使用。

下载的版本区分Static、Shared、Dev,区别在于:Static里面只有3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,每个exe的体积都很大,相关的Dll已经被编译到exe里面去了。Shared里面除了3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe之外,还有一些Dll,比如说avcodec-54.dll之类的。Shared里面的exe体积很小,他们在运行的时候,到相应的Dll中调用功能。

Dev版本是用于开发的,里面包含了库文件xxx.lib以及头文件xxx.h,这个版本不包含exe文件。

可选择最新版本下载,下载后会有ffmpeg.exe、ffplay.exe、ffprobe.exe三个可执行程序,相关的ffmpeg支持的dll库都被编译在可执行文件中。

ffmpeg.exe用作转码,ffplay.exe用来播放文件,ffprobe.exe用来查看文件格式,在此不做介绍。

在Linux环境下安装ffmpeg

(1)下载ffmpeg,根据自己需求下载不同版本:http://www.ffmpeg.org/download.html

(2)解压缩 tar -zxvf ffmpeg-2.0.1.tar.gz

(3)配置, 生成Makefile。可以指定ffmpeg的编码功能,感兴趣的可以详细去了解下这块的编译,

./configure --enable-shared --disable-yasm --prefix=/usr/local/ffmpeg

如果执行结果不对,可以根据提示信息,并查看帮助,解决问题

./configure --help

(4)编译安装

make&make install

(5)安装之后在/usr/local/ffmpeg会看到有三个目录

bin 执行文件目录
lib 静态,动态链接库目录
include 编程用到的头文件

(6)编译测试程序

gcc -o ffmpegtest ffmpegtest.c -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavcodec –lavtuil

(7)执行程序

./ffmpegtest或直接执行/usr/local/ffmpeg/lib目录下的./ffmpeg进行测试。

3、ffmpeg使用

使用ffmpeg进行音频转换,由amr转为mp3

public void changeAmrToMp3(String sourcePath, String targetPath) throws Exception {

String webroot = "d:\\ffmpeg\\bin";

Runtime run = null;

try {

run = Runtime.getRuntime();

long start=System.currentTimeMillis();

System.out.println(new File(webroot).getAbsolutePath());

//执行ffmpeg.exe,前面是ffmpeg.exe的地址,中间是需要转换的文件地址,后面是转换后的文件地址。-i是转换方式,意思是可编码解码,mp3编码方式采用的是libmp3lame

//wavpcm

//Process p=run.exec(new File(webroot).getAbsolutePath()+"/ffmpeg -y -i "+sourcePath+" -acodec pcm_s16le -f s16le -ac 1 -ar 16000 "+targetPath);

//mp3转pcm

Process p=run.exec(new File(webroot).getAbsolutePath()+"/ffmpeg -y -i "+sourcePath+" -ar 44100 -ac 2 -acodec mp3 "+targetPath);

//释放进程

p.getOutputStream().close();

p.getInputStream().close();

p.getErrorStream().close();

p.waitFor();

long end=System.currentTimeMillis();

System.out.println(sourcePath+" convert success, costs:"+(end-start)+"ms");

} catch (Exception e) {

e.printStackTrace();

}finally{

//run调用lame解码器最后释放内存

run.freeMemory();

}

}

(1)主要参数:

-i 设定输入流

(2)音频参数:
-ar 设定采样率   对应sampleRate
-ac 设定声音的Channel数  对应channel
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频

-ab bitrate 设置音频码率

(3)转换不同格式的音频文件:

需要转换的音频格式

1-mp3,2-wav(8k8bitPCM),3-wav(8k16bitPCM),4-wav(8k8bitALAW),5-wav(8k16bitALAW),6-wav(11k16bitPCM)

注:11k16bit即8k16bitPCM 采样率位11025

8k16bit alaw 同 8k8bit alaw

(4)音频文件截取指定时间部分

ffmpeg.exe -i 124.mp3 -vn -acodec copy -ss 00:00:00 -t 00:01:32 output.mp3

解释:-i代表输入参数

-acodec copy output.mp3 重新编码并复制到新文件中

-ss 开始截取的时间点

-t 截取音频时间长度

(5)设置输出文件的最大值

-fs (file size首字母缩写)   ffmpeg -i input.avi -fs 1024K output.mp4

计算输出文件大小  (视频码率+音频码率) * 时长 /8 = 文件大小K

4、项目中使用ffmpeg将mp3文件转成wav文件(补充)

前段时间项目中需要将微信录音中speex高清音频转成wav音频格式,查了相关资料及咨询了大佬总算搞定了,详见:

https://blog.csdn.net/scropio0zry/article/details/84929451

整理相关代码后,发现也可以用于ffmpeg转换,这里做一下相关整理

import java.text.MessageFormat;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.stereotype.Service;import com.common.utils.logback.LogUtil;
import com.common.utils.uuid.GuidUtil;
import com.common.FileUtil;
import com.common.PropertiesDef;@Service
public class Mp3ToWavService {private ExecutorService pool = Executors.newCachedThreadPool();public byte[] mp3ToWav(byte[] data,int mediaType) {byte[] body = null;//录音文件下拉地址String path = PropertiesDef.ORIGIN_PATH;String mp3Name = GuidUtil.getUUID() + ".mp3";String wavName = GuidUtil.getUUID() + ".wav";try {if (FileUtil.save(path, mp3Name, data)) {String command = "";// 将mp3转换成wav 采样率16000 16kbs wav音频文件// FFMPEG_PATH ffmpeg路径 如:D:/ffmpeg/bin/ffmpeg.execommand = MessageFormat.format("{0} -i {1} -ar 16000 -acodec pcm_s16le {2}",PropertiesDef.FFMPEG_PATH,path + mp3Name, path + wavName);int n = execCommand(command, 10000);// 获取文件流if (n == 0) {body = FileUtil.getFile(PropertiesDef.ORIGIN_PATH, wavName);}}} catch (Exception e) {LogUtil.logError("mp3转wav失败", ExceptionUtils.getStackTrace(e));} finally {// 执行完毕,删除下拉音频文件FileUtil.deleteFile(PropertiesDef.ORIGIN_PATH + mp3Name);FileUtil.deleteFile(PropertiesDef.ORIGIN_PATH + wavName);}return body;}public int execCommand(String command, long timeout) {Process process = null;Future<Integer> executeFuture = null;try {process = Runtime.getRuntime().exec(command);final Process p = process;Callable<Integer> call = new Callable<Integer>() {@Overridepublic Integer call() throws Exception {p.waitFor();return p.exitValue();}};//使用线程池防止Process阻塞executeFuture = pool.submit(call);return executeFuture.get(timeout, TimeUnit.MILLISECONDS);} catch (Exception e) {LogUtil.logError("mp3转wav:execCommand 执行命令失败,command:{},错误原因:{}", command,ExceptionUtils.getStackTrace(e));return 1;}finally {if (executeFuture != null) {try {executeFuture.cancel(true);} catch (Exception ignore) {}}if (process != null) {process.destroy();}}}}

FileUtil工具类

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;import org.apache.commons.lang.exception.ExceptionUtils;import com.common.utils.logback.LogUtil;public class FileUtil {public static boolean save(String filePath, String fileName, byte[] content) {try {File filedir = new File(filePath);if (!filedir.exists()) {filedir.mkdirs();}File file = new File(filedir, fileName);OutputStream os = new FileOutputStream(file);os.write(content, 0, content.length);os.flush();os.close();} catch (FileNotFoundException e) {LogUtil.logError("保存文件流异常,函数名称:save,fileName:{},filePath:{},异常原因:{}",fileName, filePath, ExceptionUtils.getStackTrace(e));return false;} catch (IOException e) {LogUtil.logError("保存文件流异常,函数名称:save,fileName:{},filePath:{},异常原因:{}",fileName, filePath, ExceptionUtils.getStackTrace(e));return false;}return true;}public static byte[] getFile(String filePath, String fileName){byte[] buffer = null;  try {  File file = new File(filePath,fileName);  FileInputStream fis = new FileInputStream(file);  ByteArrayOutputStream bos = new ByteArrayOutputStream();  byte[] b = new byte[1024 * 4];  int n;  while ((n = fis.read(b)) != -1) {  bos.write(b, 0, n);  }  buffer = bos.toByteArray();  fis.close();  bos.close();  } catch (Exception e) {  LogUtil.logError("获取文件流异常,函数名称:getFile,fileName:{},filePath:{},异常原因:{}",fileName, filePath, ExceptionUtils.getStackTrace(e)); }return buffer;  }}

Java使用ffmpeg进行音频格式转换相关推荐

  1. java aud 转mp3_音频格式转换:微信语音aud格式转成wav格式

    近期遇到音频格式问题,下面就来记录一下,我暂时还没有找到直接从音频格式aud转换成wav的工具或者代码,所以我这里的转换是先把aud转换成mp3格式,然后再从mp3格式转换成aud格式.我是在linu ...

  2. 用ffmpeg进行音频格式转换、剪切、合并、音量调整等

    为什么网上一大堆类似文章,我还要再发一篇?主要是,ffmpeg是分版本的,在一个版本上能用的,在另外一个版本上,未必能用. 这里发布的命令行,在ffmpeg version 5.1-full_buil ...

  3. 教你如何用ffmpeg处理音频格式转换(标贝科技)

    文章目录 前言 ffmpeg介绍? 一.下载与安装 1.下载安装包 2.设置环境变量 3.验证是否安装成功 二.命令讲解 1 参数解释 2 音频格式转换命令 三.标贝开放平台介绍 前言 ffmpeg介 ...

  4. 【JAVA】JAVA使用ffmpeg进行视频格式转换以及截图

    JAVA 处理视频文件,需要用到 ffmpeg  这个工具.不需要依赖jar包.无论是在windows服务器还是linux服务器,想要使用 ffmpeg 都需要先安装. 附上Linux下  *.tar ...

  5. Java使用ffmpeg进行视频格式转换、音视频合并、播放、截图

    封装类: ffplay.ffmpeg.ffprobe是安装的ffmpeg路径. import java.io.BufferedReader; import java.io.File; import j ...

  6. 声音的变奏:深入理解ffmpeg音频格式转换的奥秘与应用

    声音的变奏:深入理解音频格式转换的奥秘与应用 1. 音频数据的本质:声音与数字 (The Nature of Audio Data: Sound and Numbers) 1.1 音频的物理与数学基础 ...

  7. python使用ffmpeg库高效免费完成音频格式转换

    在生活中,我们因为种种原因经常需要对音频格式文件进行转换. 使用已经发布的各种音频格式转换软件进行音频格式转换时在没有会员的情况下,最终转换的音频文件在开头或者末尾会有软件植入广告,这就是噪音,此时转 ...

  8. Java实现音频格式转换 WAV---mp3,可使音频压缩

    最近做的一个小项目中,师兄安排的任务,要实现录音然后保存文件,实现网络传输,然后我用初学的java实现了一个录音机的功能(见前面的博客),但是windows录音默认保存的格式是WAVE,后缀是WAV, ...

  9. avi和音频合成 ffmpeg_使用Java和ffmpeg把音频和视频合成视频的操作方法

    FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库l ...

最新文章

  1. 乘法器专题研究(内含所有类型乘法器)
  2. mysql联合查询数量不一致_Mybatis关联查询,查询出的记录数量与数据库直接查询不一致,如何解决?...
  3. python操作mongodb语法_python 操作MongoDB
  4. Java IO: InputStreamReader和OutputStreamWriter
  5. ajax json 403,解决 Ajax 发送 post 请求出现 403 Forbidden 的三种方式
  6. 华为升级harmonyos的机型名单,华为智慧屏HarmonyOS 1.0.1.50更新机型和方法
  7. 运行第一个 docker image 并在浏览器中查看
  8. 7-114 吉老师的回归 (15 分)
  9. 语句练习题 折纸、阶乘、阶乘求和、范围内条件查找(水仙花数)。
  10. IAR下STM32进入HardFault_Handler
  11. 第十七周项目2-引用作形参
  12. 第2章 神经网络的数学基础
  13. 华为研发部门绩效考核制度及方案
  14. 如何使用自訂 Segue 實現視圖轉場動畫
  15. 双曲函数奇偶性_第二百一十二夜:高考押题-双曲函数的性质
  16. P4238 【模板】多项式乘法逆
  17. 看精神小伙是如何智斗骗子的
  18. 将电脑多余空间分给其他盘
  19. micropython 进阶小实验 如何用单片机制作鞋码匹配仪
  20. J-link V7.64C Warning : the connected probe appears to be a j-link clone报错

热门文章

  1. python少儿编程008:海龟绘图画出奥运五连环!
  2. 排序知识点总结及代码实现(C++)
  3. php简单后台,ThinkPHP简单网站后台
  4. 腾讯云服务器添加虚拟内存
  5. NTKO OFFICE文档控件
  6. C/C++编程学习 - 第16周 ① 含k个3的数
  7. c语言解除宏定义_C语言宏定义 define,及一些陷阱!
  8. linux下s3c2440开发板,SAMSUNG S3C2440 ARM LINUX 开发板 上手初体验 --开发环境搭建
  9. XBOX360用HDMI线有图像没声音怎么办
  10. logback之二:输出日志到控制台