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 //wav转pcm //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