AVFoundation框架解析(七)—— 視頻組合和音頻混合調(diào)試

版本記錄

版本號(hào) 時(shí)間
V1.0 2017.08.30

前言

AVFoundation框架是ios中很重要的框架,所有與視頻音頻相關(guān)的軟硬件控制都在這個(gè)框架里面,接下來(lái)這幾篇就主要對(duì)這個(gè)框架進(jìn)行介紹和講解。感興趣的可以看我上幾篇。
1. AVFoundation框架解析(一)—— 基本概覽
2. AVFoundation框架解析(二)—— 實(shí)現(xiàn)視頻預(yù)覽錄制保存到相冊(cè)
3. AVFoundation框架解析(三)—— 幾個(gè)關(guān)鍵問(wèn)題之關(guān)于框架的深度概括
4. AVFoundation框架解析(四)—— 幾個(gè)關(guān)鍵問(wèn)題之AVFoundation探索(一)
5. AVFoundation框架解析(五)—— 幾個(gè)關(guān)鍵問(wèn)題之AVFoundation探索(二)
6. AVFoundation框架解析(六)—— 視頻音頻的合成(一)

Introduction

AVFoundation框架提供了一組功能豐富的類,以便于編輯音視頻資源。 AVFoundation的編輯API的核心是由AVComposition對(duì)象定義的組合。 組合僅僅是來(lái)自一個(gè)或多個(gè)不同媒體資產(chǎn)的軌道集合。 AVMutableComposition類提供了一個(gè)用于插入和刪除軌道以及管理其時(shí)間順序的接口。 AVComposition對(duì)象中的軌道是固定的。

如果您想在組合中的軌道上執(zhí)行任何自定義音頻或視頻處理,則需要分別包含音頻混合或視頻構(gòu)圖。 AVAudioMix對(duì)象管理用于混合音軌的輸入?yún)?shù)。 它允許在播放或其他操作期間在音軌上執(zhí)行自定義音頻處理。 您還可以設(shè)置音軌的相對(duì)音量和斜坡。

視頻構(gòu)圖在其指令的總時(shí)間范圍內(nèi)的任何時(shí)間描述了要用于產(chǎn)生與該時(shí)間對(duì)應(yīng)的合成視頻幀的視頻軌道的數(shù)量和ID。 當(dāng)使用AV Foundation的內(nèi)置視頻合成器時(shí),視頻合成包含的指令可以為每個(gè)視頻源指定空間變換,不透明度值和裁剪矩形,并且可以通過(guò)簡(jiǎn)單的線性斜坡函數(shù)隨時(shí)間變化。 AVVideoComposition對(duì)象表示不可變的視頻構(gòu)圖。 AV Foundation框架還提供了一個(gè)可變的子類AVMutableVideoComposition,您可以使用它創(chuàng)建新的視頻。

很有可能使用完全有效的價(jià)值來(lái)構(gòu)建復(fù)雜的合成,視頻合成和音頻合成,從而產(chǎn)生意想不到的效果。 例如,有效的視頻合成可能產(chǎn)生源視頻軌道的內(nèi)容完全不存在的幀。

本文檔討論了構(gòu)建這些問(wèn)題時(shí)的一些常見(jiàn)缺陷,以及更容易調(diào)試它們的方法。


Common pitfalls

以下是構(gòu)建復(fù)雜的構(gòu)圖,視頻構(gòu)圖和音頻混合時(shí)可能會(huì)遇到的一些常見(jiàn)類型的問(wèn)題。

1. Compositions

Misaligned track segments - 未對(duì)齊的軌道段

軌道的對(duì)齊可能是錯(cuò)誤的。 例如,當(dāng)將軌跡插入到特定時(shí)間的組合中時(shí),可能會(huì)發(fā)生CMTime值舍入誤差的結(jié)果。

未對(duì)齊的軌道段

2. Video Compositions, Audio Mixes

Gaps between segments - 各部分之間的間隔

不要在視頻構(gòu)圖中的段之間留下間隙。 這幾乎肯定會(huì)導(dǎo)致黑框或最后一幀的延續(xù)。

各部分之間的間隔

Misaligned layer instructions - 不對(duì)齊層指令

視頻構(gòu)圖時(shí)間范圍與構(gòu)圖軌道段之間可能存在偏差。

不對(duì)齊層指令

Misaligned opacity/audio ramps - 不對(duì)準(zhǔn)的不透明度/音頻斜坡

例如,您可能在其中一個(gè)坡道上犯了錯(cuò)誤,例如過(guò)長(zhǎng)時(shí)間。

不對(duì)準(zhǔn)的不透明度/音頻斜坡

Bogus layer transforms - 虛構(gòu)層轉(zhuǎn)換

您可能在圖層轉(zhuǎn)換矩陣中有錯(cuò)誤。 這可能會(huì)導(dǎo)致輸出超出輸出幀邊界。

虛構(gòu)層轉(zhuǎn)換

Static frame for the entire duration of the source asset - 源資源的整個(gè)持續(xù)時(shí)間的靜態(tài)幀

您可能有一個(gè)視頻構(gòu)圖在源資源的整個(gè)持續(xù)時(shí)間內(nèi)生成單個(gè)靜態(tài)幀。 如果將AVMutableVideoCompositionframeDuration設(shè)置為資產(chǎn)的持續(xù)時(shí)間,則可能會(huì)發(fā)生這種情況。 在視頻合成器的處理中,盡管有不同的不透明度,變換等指示,但是在開(kāi)始時(shí)僅產(chǎn)生一幀,然后“保持”指定的持續(xù)時(shí)間。

源資源的整個(gè)持續(xù)時(shí)間的靜態(tài)幀

Debugging Compositions, Video Compositions and Audio Mixes

1. Visualize the Composition

一種有效的技術(shù)是可視化這些技術(shù)。 而不是看你的代碼,你看看你的合成圖片,視頻構(gòu)圖和音頻混合的圖片。

有為此目的設(shè)計(jì)的示例代碼:

  • AVCompositionDebugViewer(Mac)
  • AVCompositionDebugVieweriOS

這些示例應(yīng)用程序?qū)崿F(xiàn)了一個(gè)自定義的AVCompositionDebugView類,它提供了形成組合的底層AVComposition,AVVideoComposition和AVAudioMix對(duì)象的視覺(jué)描述。 參見(jiàn)下圖。

只需將AVCompositionDebugView放入您自己的應(yīng)用程序。 這是一個(gè)非互動(dòng)的視圖。 擴(kuò)展它來(lái)繪制您自己的視頻說(shuō)明。 它將幫助您發(fā)現(xiàn)組合軌道,視頻說(shuō)明和音頻組合中的任何重疊和間隙。

后記

未完,待續(xù)~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容