ffmpeg使用转码学习
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
音频的参数有这么几个:http://ffmpeg.org/ffmpeg.html#Audio-Options
首先ffmpeg自身有带aac的解码器,但是没有带mp3的编码器,需要编译的时候带上--enable-libmp3lame
当然这个需要你先安装libmp3lame
curl -L -O http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
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://www.cnblogs.com/yjf512/p/3793536.html,如需转载请自行联系原作者
ffmpeg使用转码学习相关推荐
- 雷神FFMpeg源码学习笔记
雷神FFMpeg源码学习笔记 文章目录 雷神FFMpeg源码学习笔记 读取编码并依据编码初始化内容结构 每一帧的视频解码处理 读取编码并依据编码初始化内容结构 在开始编解码视频的时候首先第一步需要注册 ...
- 最简单的基于FFMPEG的转码程序
本文介绍一个简单的基于FFmpeg的转码器.它可以将一种视频格式(包括封转格式和编码格式)转换为另一种视频格式.转码器在视音频编解码处理的程序中,属于一个比较复杂的东西.因为它结合了视频的解码和编码. ...
- HLS + ffmpeg 实现动态码流视频服务
一.简介 如下图,包含三部分,右边一列为边缘节点:中间一列代表数据中心:左边一列是项目为客户提供的一系列web管理工具: 具体来说在我们项目中有一堆边缘节点,每个节点上部署一台强大的GPU服务器及N个 ...
- Shiro源码学习之二
接上一篇 Shiro源码学习之一 3.subject.login 进入login public void login(AuthenticationToken token) throws Authent ...
- Shiro源码学习之一
一.最基本的使用 1.Maven依赖 <dependency><groupId>org.apache.shiro</groupId><artifactId&g ...
- 【FFmpeg】ffmpeg工具源码分析(三):分配过滤器内存(宏GROW_ARRAY)详解
0.引言 在ffmpeg.c源码的核心函数transcode() 中,先执行初始化操作transcode_init() : 首先初始化过滤器filtergraphs,在寻找过滤器在哪分配时,发现它使用 ...
- mutations vuex 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...
前言 Vuex源码系列不知不觉已经到了第六篇.前置的五篇分别如下: 长篇连载:Vuex源码学习(一)功能梳理 长篇连载:Vuex源码学习(二)脉络梳理 作为一个Web前端,你知道Vuex的instal ...
- vue实例没有挂载到html上,vue 源码学习 - 实例挂载
前言 在学习vue源码之前需要先了解源码目录设计(了解各个模块的功能)丶Flow语法. src ├── compiler # 把模板解析成 ast 语法树,ast 语法树优化,代码生成等功能. ├── ...
- 2021-03-19Tomcat源码学习--WebAppClassLoader类加载机制
Tomcat源码学习--WebAppClassLoader类加载机制 在WebappClassLoaderBase中重写了ClassLoader的loadClass方法,在这个实现方法中我们可以一窥t ...
最新文章
- 强化学习样本复杂性综述
- 学术研究发现英特尔 CPU 存在新漏洞
- Understanding G1 GC Logs--转载
- python清除缓存的命令_python – 重启django服务器时清除缓存的最佳位置
- circRNA研究相关数据库,riboCIRC使用指南
- html嵌入原始数据,如何用html和javascript显示原始图像数据?
- Bytom的链式交易和花费未确认的交易
- UITransitionView and UILayoutContainerView
- Layer下拉框监听
- 2018 Multi-University Training Contest 8 - Taotao Picks Apples
- java私塾 java篇_Java私塾跟我学系列——JAVA篇 六、
- c语言之图形编程 pdf,《C语言图形编程》.pdf
- 如何深入学习c语言,如何深入学习C语言?
- 计算机四级题类型,全国计算机四级网路工程师考试题目分为几大类型,各多少分?...
- ngx_http_core_module模块提供的变量
- tensorflow最新版本与keras版本对应
- 解决Chrome播放视频闪屏黑屏无法播放
- 问题解决:java.lang.IllegalArgumentException: character to be escaped is missing
- 计算机组成原理---32位的CPU64位CPU与32位os64os的区别与联系
- CNN做时间序列预测_深度学习与时间序列预测