iOS 視訊剪下、旋轉,視訊新增音訊、新增水印,視訊匯出

發表於2016-05-30

概述

視訊處理主要是用到以下這幾個類
AVMutableComposition、AVMutableVideoComposition、AVMutableAudioMix、AVMutableVideoCompositionInstruction、AVMutableVideoCompositionLayerInstruction、AVAssetExportSession 等。其中 AVMutableComposition 可以用來操作音訊和視訊的組合,AVMutableVideoComposition 可以用來對視訊進行操作,AVMutableAudioMix 類是給視訊新增音訊的,AVMutableVideoCompositionInstruction和AVMutableVideoCompositionLayerInstruction 一般都是配合使用,用來給視訊新增水印或者旋轉視訊方向,AVAssetExportSession 是用來進行視訊匯出操作的。需要值得注意的是當App進入後臺之後,會對使用到GPU的程式碼操作進行限制,會造成崩潰,而視訊處理這些功能多數會使用到GPU,所以需要做對應的防錯處理。

在這裡我會使用Apple的官方Demo “AVSimpleEditoriOS” 作為講解案例,該案例採用Command設計模式來組織程式碼,其中基類的AVSECommand包含了一些各個子類Command共用的屬性。本文就視訊相關操作做簡要介紹,說明一些相關的操作,並標註一些重點程式碼,希望本文可以起到拋磚引玉的效果,讓大家對視訊剪輯處理有個初步印象,然後可以根據Apple官方Demo的內容進行相應的修改。大家可以下載相應的Apple官方Demo執行檢視結果。

@property AVMutableComposition mutableComposition;
@property AVMutableVideoComposition
mutableVideoComposition;
@property AVMutableAudioMix mutableAudioMix;
@property CALayer
watermarkLayer;

 

656644-0fb3d7619e3753d1

Command設計模式

視訊剪下

656644-f717fbfa050cf02c
 視訊頭部剪下程式碼圖
  1. 拿到視訊和音訊資源
  2. 建立AVMutableComposition物件
  3. 往AVMutableComposition物件新增視訊資源,同時設定視訊資源的時間段和插入點
  4. 往AVMutableComposition物件新增音訊資源,同時設定音訊資源的時間段和插入點

視訊旋轉

在查有關視訊旋轉的資料的時候檢視了一篇很不錯的參考資料,在這裡給大家安利一下
http://blog.csdn.net/likendsl/article/details/7595611 講的是矩陣運算的原理,對檢視的矩陣操作的相關內容。

656644-453d640315d32b92

視訊旋轉程式碼圖1

656644-5cb7fed3bea48ca1

視訊旋轉程式碼圖2

656644-86615d2b66b33c82

視訊旋轉程式碼圖3

  1. 拿到視訊和音訊資源
  2. 建立AVMutableComposition物件
  3. 往AVMutableComposition物件新增視訊資源,同時設定視訊資源的時間段和插入點
  4. 往AVMutableComposition物件新增音訊資源,同時設定音訊資源的時間段和插入點
  5. 設定旋轉矩陣變換
  6. 建立AVMutableVideoComposition物件
  7. 設定視訊的渲染寬高和Frame
  8. 建立視訊組合指令AVMutableVideoCompositionInstruction,並設定指令在視訊的作用時間範圍和旋轉矩陣變換
  9. 建立視訊組合圖層指令AVMutableVideoCompositionLayerInstruction,並設定圖層指令在視訊的作用時間範圍和旋轉矩陣變換
  10. 把視訊圖層指令放到視訊指令中,再放入視訊組合物件中

這裡給出不同旋轉角度的案例程式碼,希望能夠對你起幫助,節省你的時間。

視訊新增音訊

656644-0171d7dbc5400a4e

視訊新增音訊程式碼圖1

656644-2714b046789821e4
視訊新增音訊程式碼圖2

  1. 拿到視訊和音訊資源
  2. 建立AVMutableComposition物件
  3. 往AVMutableComposition物件新增視訊資源,同時設定視訊資源的時間段和插入點
  4. 往AVMutableComposition物件新增音訊資源,同時設定音訊資源的時間段和插入點
  5. 往AVMutableComposition物件新增要追加的音訊資源,同時設定音訊資源的時間段,插入點和混合模式

視訊新增水印

656644-3956a4d9160d407a

視訊新增水印1

656644-e6f63d2aeb3c9cc8

視訊新增水印2

  1. 拿到視訊和音訊資源
  2. 建立AVMutableComposition物件
  3. 往AVMutableComposition物件新增視訊資源,同時設定視訊資源的時間段和插入點
  4. 往AVMutableComposition物件新增音訊資源,同時設定音訊資源的時間段和插入點
  5. 建立視訊組合器物件 AVMutableVideoComposition 並設定frame和渲染寬高
  6. 建立視訊組合器指令物件,設定指令的作用範圍
  7. 建立視訊組合器圖層指令物件,設定指令的作用範圍
  8. 視訊組合器圖層指令物件 放入 視訊組合器指令物件中
  9. 視訊組合器指令物件放入視訊組合器物件
  10. 建立水印圖層Layer並設定frame和水印的位置,並將水印加入視訊組合器中

視訊匯出

656644-a8d123c300234c03

視訊匯出
  1. 建立輸出路徑
  2. 根據AVMutableComposition物件建立AVAssetExportSession視訊匯出物件
  3. 設定AVAssetExportSession的AVMutableVideoComposition物件,AVMutableAudioMix物件,視訊匯出路徑,視訊匯出格式
  4. 非同步匯出視訊,根據匯出結果做對應處理。

http://blog.csdn.net/likendsl/article/details/7595611

如果你覺得本文對你有幫助,請在下方給個 ,讓我知道這文章起了它該起的作用!

相關文章