博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ffmpeg使用转码学习
阅读量:5917 次
发布时间:2019-06-19

本文共 2322 字,大约阅读时间需要 7 分钟。

ffmpeg在官网上描述自身:是一个对视频和音频进行记录,转换,流化的完整的跨平台解决方案。事实上,现在有很多工具都是基于ffmpeg来进行视频音频的处理工具的。比如鼎鼎大名的格式工厂,就是使用ffmpeg来作为内核的转码工具。

理解一些音视频的编码知识。

我们平时看的视频文件格式:mp4/rmvb/mkv/avi其实是一个容器。这个容器中装的东西分为两大类:音频和视频。对于视频这部分,它包含的编码格式有:H264/H265/VP8/VC1等。对于音频这个部分,它包含的编码格式有:AAC/MP3/mid等。所以说,我们平常笼统说的【视频格式】其实包含了三个部分:视频编码,音频编码,容器格式。这里说的【编码】其实包含的是两层:编码和解码。比如视频编码,就是将视频图像转换成为二进制数据的过程。视频解码就是将二进制数据转化成图像的过程。音频编码也是一样的。那么我们看一个视频文件的时候,能同时看到声音和图像,就说明我们至少同时存在视频编码和音频编码两组数据。那么这两组数据是按照什么规则组织起来的呢?这就要看【容器格式】的规定了。容器里面存放的数据可能采用多种不同的编码方式。比如avi文件存放的通常是xvid或者divx编码的视频和mp3编码的音频。rmvb 文件里面存放的通常是 RV40 编码的视频和 cook 编码的音频。mp4 文件里面通常存放的是 H.264 编码的视频和 AAC 编码的音频。mkv 文件里面存放的则可能包含前面各种。

如果你安装了ffmpeg,你使用ffmpeg -codecs就可以看到ffmpeg支持的哪些音视频编码了(几乎已经囊括了大部分现有编码了)。截取其中的一部分:

Codecs:

D..... = Decoding supported (支持解码)
.E.... = Encoding supported (支持编码)
..V... = Video codec (视频编码)
..A... = Audio codec (音频编码)
..S... = Subtitle codec (字幕编码)
...I.. = Intra frame-only codec (帧编解码)
....L. = Lossy compression (有损压缩的编码)
.....S = Lossless compression (无损压缩的编码)
-------
D.V.L. 4xm                  4X Movie
D.VI.S 8bps                 QuickTime 8BPS video
.EVIL. a64_multi            Multicolor charset for Commodore 64 (encoders: a64multi )
.EVIL. a64_multi5           Multicolor charset for Commodore 64, extended with 5th color (colram) (encoders: a64multi5 )
D.V..S aasc                 Autodesk RLE
DEVIL. amv                  AMV Video
D.V.L. anm                  Deluxe Paint Animation
D.V.L. ansi                 ASCII/ANSI art

好了,那我们经常说的转码其实就是这么个过程:

原视频 -- 解码 -- 像素数据 -- 编码 -- 目标视频

原音频 -- 解码 -- 音频数据 -- 编码 -- 目标音频

我们使用aac转mp3的例子来看ffmpeg在音频转码方面的使用。

aac名字就很高大上,高级音频编码,出现于1997年,出现的目的是为了取代MP3格式。相比于MP3格式来说,它的压缩算法更优秀,是一种高压缩比的编码。它是苹果和诺基亚等公司共同开发的,现在苹果手机上的itunes音乐播放器都是支持和使用AAC文件的。

但是,aac格式的音频文件在html5中不是可以被所有的浏览器所支持的。浏览器对音频文件的支持如下:

再回到ffmpeg工具,它的格式是这样的:

usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

所以假设我有个aac文件在这个位置:

/home/web/mycareer/upload/61/1d0452670723c3ba2e1b10d02d789c61.aac

我需要将它转换成mp3文件:

/home/web/mycareer/upload/61/1d0452670723c3ba2e1b10d02d789c61.mp3

音频的参数有这么几个:

首先ffmpeg自身有带aac的解码器,但是没有带mp3的编码器,需要编译的时候带上--enable-libmp3lame

当然这个需要你先安装libmp3lame

curl -L -O

tar xzvf lame-3.99.5.tar.gz

make

make install

然后在ffmpeg编译安装的时候带上:--enable-libmp3lame

然后ffmpeg的命令就是:

ffmpeg -i /home/web/mycareer/upload/61/1d0452670723c3ba2e1b10d02d789c61.aac -acodec libmp3lame  /home/web/mycareer/upload/61/1d0452670723c3ba2e1b10d02d789c61.mp3

记得这里要说明下-acodec libmp3lame

转码就完成了。

参考文章:

转载地址:http://fhfvx.baihongyu.com/

你可能感兴趣的文章
[STM32F429-DISCO-uCosiii]3.uCOSIII 移植
查看>>
LeetCode | Copy List with Random Pointer
查看>>
C语言博客05--指针
查看>>
引入间接隔离变化(三)
查看>>
统一沟通-技巧-4-让国内域名提供商“提供”SRV记录
查看>>
cocos2d-x 3.0事件机制及用户输入
查看>>
比亚迪速锐F3专用夏季座套 夏天坐垫 四季坐套
查看>>
C++ 数字转换为string类型
查看>>
取证学习资料DVD
查看>>
高性能优化Web前端
查看>>
Sublime Text 格式化代码快捷键
查看>>
疯狂的 Web 应用开源项目
查看>>
hdu 4775 Infinite Go(暴力)
查看>>
程序员全国不同地区,微信(面试 招聘)群。
查看>>
【干货】界面控件DevExtreme视频教程大汇总!
查看>>
分布式一致性算法:Raft 算法(Raft 论文翻译)
查看>>
Android ListView下拉刷新点击加载更多
查看>>
Windows server 2003 FTP 全攻略(二)
查看>>
用户管理脚本之删除用户——Delete_user.sh
查看>>
007 content for
查看>>