音视频开发第一步

《音视频开发进阶指南》是我第一次了解到音视频开发内在的小细节,书中很多还难以理解的内容,不过循序渐进不要慌嘛,慢慢进入这个充满魅力的音视频开发的世界。

压缩编码格式

音频
音频裸数据PCM(Pulse Code Modulation)脉冲编码调制。压缩编码的原理实际上是压缩掉亢余信号,亢余信号是指不能被人耳感到的信号,包含人耳听觉范围之外的音频信号以及被掩蔽掉的音频信号等。几种常用的压缩编码格式:

① WAV编码

WAV编码的一种实现就是在PCM数据格式前面加上44字节。

WAV编码

完全没有压缩的实现方式导致该形式音质非常好,占用大量内存导致只适用于多媒体的开发中间文件、保存音乐和音效素材。

② MP3编码
MP3编码

具有不错的压缩率,适用于高比特率下对兼容性有要求的音乐。

③ AAC编码

AAC是新一代的音频有损压缩技术,通过一些附加的编码技术(比如PS、SBR等),衍生出了LC-AAC、HE-AAC、HE=AAC v2三种主要的编码格式。


AAC编码

适用于128kbit/s以下的音频编码,多用于视频中的音频轨编码。

④ Ogg编码

在各种码率下都有比较优秀的表现,尤其是在中低码率场景下。Ogg有着非常出色的算法,可以用更小的码率达到更好的音质,128kbit/s的Ogg比192kbit/s甚至更高码率的MP3还要出色。但是无论是软件上还是硬件上受支持情况都不是很好。


Ogg编码

视频

ISO标准 Motion JPEG即MPEG

MPEG算法适用于动态视频的压缩算法,除了对单幅图像进行编码外,还利用图像序列中的相关原则去除亢余,这样可以大大提高视频的压缩比。


ITU-T制定标准
H.261、H.262、H.263一系列视频编码标准。

两者又联合制定了H.264,又称为MPEG-4 Part10等。

视频裸数据表示中为什么要使用YUV而不是RGB?
对于视频帧的裸数据表示,更多使用的是YUV数据格式的表示,主要是应用于优化彩色视频信号的传输,以及向后兼容老式黑白电视,而使用YUY格式而不是RGB格式的主要原因是:

  • RGB格式不利于压缩(每个像素都有三个小像素,而且必须同时传输)
  • 眼睛对于亮和暗的分辨率要比对颜色的分辨率更精细,所以在视频数据的存储中,没有必要存储所有的颜色值。Y留给黑白信号(被称为“亮度”),UV用于色度的描述。
FFMpeg

FFMpeg简介

FF: Fast Forward
Mpeg: 视频编码标准MPEG

FFMpeg是一套可以用来记录、处理数字音频、视频,并将其转换为流的开源框架。

FFMpeg编译

FFmpeg编码库加入FDK-AAC、LAME、X264的静态库和头文件:
LAME
 源代码: https://sourceforge.net/projects/lame/files/lame/
 sh脚本: https://github.com/kewlbear/lame-ios-build
X264
 源代码: https://www.videolan.org/developers/x264.html
 sh脚本: https://github.com/kewlbear/x264-ios
FDK-AAC
 源代码: https://github.com/mstorsjo/fdk-aac
 sh脚本: https://github.com/kewlbear/fdk-aac-build-script-for-iOS

编译sh脚本的方式:

sudo sh (sh脚本名).sh

在编译前确认脚本的路径配置正确,不然会提示"无法找到其中一个文件":


FFmpeg 命令行

  • ffprobe:查看媒体文件格式的工具
ffprobe (文件名).mp3

① ffprobe 和 Apple clang verison介绍
② configuration设置的配置
③ 具体信息

  • Metadata 元数据

  • Duration 时长 , start 开始时间 ,bitrate 比特率

  • stream #0: 音频流 采样率 立体音 fltp(float,4bit,planner平铺格式)这路流的比特率为 320kb/s

  • stream #1: 视频流 编码格式为mjpeg,每帧的数据表示是yuvj420p 宽高 363 * 363

  • ffplay: 媒体文件播放器

ffplay Modern_family.mp4 -loop 10 //重复播放 10遍

选择播放流

ffplay Modern_family.mp4 -ast 1 //播放视频中的第一路音频流,如果没有第一路音频流,则会静音

选择音画同步的对齐方式

ffplay Modern_family.mp4 -sync audio //指定以音频为基准进行音画同步(默认方式)

注意: 使用 外部时钟作为基准时,会导致在一些快进或后退操作时出现音画不同步的问题。

播放PCM裸音频数据

ffplay (文件名).pcm -f s16le -channels 2 -ar 44100

在播放PCM时没有设置-f(格式)、-channels(声道数)、-ar(采样率)等,是无法进行正确播放的,且会报错:

.pcm: Invalid data form when processing input
  • ffmpeg: 媒体文件转换工具

实现音视频轨分离

ffmpeg -i (文件名).mp4 -vn -acodec copy output.m4a

-i fmt:指定输入文件名 -vn:取消视频的输出 -acodec copy: 音频强制使用codec编解码方式)

ffmpeg -i (文件名).mp4 -an -vcodec copy output.mp4

-an:取消音频的输出 -acodec copy: 视频强制使用codec编解码方式)

裁剪一段视频的时长

ffmpeg -i (文件名).mp4 -ss 46.0 -codec copy -t 1127 output.mp4

-ss 46.0(或 00:00:46.0) -t 1127: 从46秒开始裁剪1127秒的时间

图片处理

① 转换成gif图片格式

ffmpeg -i (文件名).mp4 -vf scale=200:-1 -t 4 -r 10 image.gif

-vf scale=100:-1 :按照分辨比例不动宽度改为200,并且只处理前4秒(-t),按照10的帧率(-r)


② 生成一张图片

ffmpeg -i frame_%d.jpeg -r 5 output.gif


音频处理

① 将音频a.mp3 MP3转换为WAV
ffmpeg -i (文件名).mp3 -acodec pcm_s16le output.wav

使用原mp3文件的声道数(-ac) 和 采样数(-ar)

② 将音频a.wav的音频降低
ffmpeg -i (文件名).wav -af ‘volume=0.5’ output.wav
③将音频a.wav作为背景音添加到视频的音频轨b中:
ffmpeg -i (文件名a).wav -i (文件名b).m4a -filter_complex amix=inputs=2:duration=shortest output.wav

将(a).wav 和 (b).m4a文件进行合并,按照时间长度较短的音频文件的时间长度作为最终输出output.wav的时间长度

视频处理

① 淡入淡出效果
ffmpeg -i (文件名).wav -filter_complex afade=t=in:ss=0:d=2 output.wav

afade=t=in: / afade=t=out: 效果处理

遍历整个视频帧逐帧处理:


逐帧处理

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容