如何做到短视频录制同步?

短视频录制基本流程

短视频录制基本流程

同步的重要性

“BGM和人声对不齐”,“BGM和嘴型对不齐”等等,同步问题是用户最容易感受到的,也是一个深度短视频录制者非常看重的;同时,由于兼容性和产品功能的多样性,比如seek、跳过前奏、原唱伴唱切换等等,非常容易出现且难以察觉,甚至难以解决。下面我们就来分析,是什么导致不同步的问题,以及如何解决。

问题分析

我们常见的短视频录制的场景,以及要做的到的同步问题

纯音频录制(音频K歌)

    主要是伴奏和人声的同步

单视频录制(视频K歌、短视频录制)

    主要是伴奏和人声、录制视频同步,进一步分解为伴奏和人声的同步,和伴奏和视频的同步。

多视频录制 (视频合唱、视频跟拍)

    主要是录制视频、跟拍视频、伴奏和人声同步,进一步分解为伴奏和人声的同步,伴奏和视频的同 步,和录制视频和跟拍视频的同步。

因此我们将短视频录制的同步问题,分解为以下三个问题,并一一分析和解决。

1、BGM和人声的同步

2、BGM和视频的同步

3、录制视频和跟拍视频的同步

问题解决

BGM和人声的同步

同步非常难以解决的一个原因是很难直接量化,所以第一步我们要去量化它。

我们使用每隔两秒滴一下的音频作为BGM,打开外放,这样滴的声音又会被重录进app中,这样BGM滴的声音的位置和重录进去滴一声的位置的差,就是不同步时间差,一般要求

音视频实验室:-100ms ~ 100ms

能够量化后,接着我们要做到的是以下两步:

1)保证写到本地的BGM和人声数据量相同

2)保证BGM和人声没有错位

1、保证写到本地的BGM和人声数据量相同

有两方面,一方面是保证帧数相同,另一方面要保证bgm和人声的pcm的采样率相同,为后续混音,seek,裁剪等处理做准备。

保证帧数相同业界有两种方案:

1)输入一帧(录入)人声,输出一帧(播放)BGM。实现的方式比如说IOS本身的AudioQueue和 Android类似的实现oboe,都是通过一个线程去保证输入一帧(录入)音频,输出一帧(播放)音频。

2)Android系统实现中,录制器和解码器是维护在不同线程中的,如何在两个线程(录制线程、解码线程)中,保证BGM和人声数据量相同。我们在解码器中维护了一个queue,里面缓存了解码出来的音频帧。解码一帧音频,放入queue中一帧;录制出一帧音频,从queue中取出一帧音频。

保证采样率相同,需要我们在BGM解码后和录制出数据后,增加重采样的步骤。

2、录制的人声和BGM没有错位

有以下原因会导致人声和BGM错位

1)录音器的输入延迟和播放器的输出延迟

人声的录入需要经过以下阶段:一段BGM先经过播放器播放,人听到并同步的唱出,经过录制器,回到app中。

因此人声的时间点与对应的BGM的时间点,必然是落后录音器的输入延迟 + 播放器的输出延迟

因此我们需要开始录制时裁减掉开始部分人声,同时在录制结束时,用空数据补全缺少的人声。

2)解码速度如果低于录制速度,就会导致BGM播放卡顿以及堵塞录制线程。

录制的输入速度由硬件层保证,一定是输出的数据量代表的录制间隔(所以有的时候可以直接根据绝对时间变化,计算录制pts)

解码速度如何保证大于或者等于录制的输入速度呢?一方面及时是m4a的音频的解码速度一般也是快于20ms/帧的,另一方面更建议使用直接使用pcm。pcm可以是直接下载到或者在准备过程中预解码得到的。

同时如果使用pcm的话,会使得seek变得更加精准且快,但同时带来交互上的成本或者下载成本。

3)warmup 音频预热

分input音频预热和output音频预热,难点在于app开发者无法直接获得,且不同设备差距很大。

针对这种情况,有一种方案是在线下通过之前介绍测量环路延迟的方法,测量top机型的整个环路延迟,在录制过程中,根据测量的环路延迟,丢弃人声的音频帧。

但是这种方案并不能覆盖所有机型,同时需要很大的成本去维护环路延迟机型表,所以我建议采取的手段可以是

通过假暂停减少多次音频预热出现

由于音频预热比较小,可以在对开始录制的地方,忽略音频预热

4)seek不精准

使用精准seek或者直接使用pcm数据

5)解码器缓存和播放器缓存

在重新开始录制时,要记得清楚解码器缓存和播放器缓存,避免解码器缓存和播放器缓存导致多余的BGM播放导致,录制时间滞后BGM播放时间

事实上还有最后的兜底方案,也是业界内比较常用的,就是在预览页允许用户根据微调人声和

最后,我们发现BGM和人声的同步校准,并不是采用根据时间戳去校准,反而是严格保证音频帧数据量一致且没有错位来校准,这是由于人耳对音频的敏感性,录制中不能有丢帧。

BGM和视频的同步

非常重要,但是也比较通用,大体有三个方案:

三种方案比较

由于对声音连续的要求高,所以基本不会考虑方案B。

录制视频和跟拍视频的同步

目前有两种方案:

方案一:

1、预览时,播放和录制相互不影响;左边播放原视频,右边播放camera返回的视频。

2、合成时,根据pts分别从原视频和录制视频中,取出pts对应的视频帧,再合并在一起。

方案二:

1、预览时,从原视频按照录制的pts取对应的视频帧,和录制的视频帧,先一起绘制在一个framebuffer上,再展示在屏幕上和经过编码写到文件中。

2、无合成过程。

方案比较

因此在短视频录制场景,建议优先使用方案二。

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

推荐阅读更多精彩内容

  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 4,491评论 0 3
  • 前言:每个成功者多是站在巨人的肩膀上!在做直播开发时 碰到了很多问题,在收集了许多人博客的基础上做出来了成功的直播...
    IM魂影阅读 1,927评论 1 12
  • 上一篇我们侃侃而谈了下Android下的App音视频开发杂谈,我们从入手到深入再到实际项目的遇到的问题以及解决方案...
    耗子_wo阅读 1,606评论 0 3
  • 肖亚玲今年二十六岁,结婚三年,生有一个儿子。肖亚玲也算是个很勤恳的持家女人,晚上在市场旁边热闹大街摆地摊卖成衣,白...
    和风轻和阅读 329评论 3 1
  • 每逢我自认为足够理智足够淡然的时候,其实都还有着许多未知的不确定因素困扰着我.我已失眠好几个夜晚,对外宣称是自己对...
    萌小灰阅读 124评论 0 0