質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

462閲覧

動画に画像のロゴを追加して保存したい - avfoundation

keys

総合スコア215

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/09/13 07:19

編集2017/09/13 07:20

動くソース

https://github.com/Ryosuke-Hujisawa/Add-image-logo-to-movie-and-save

やりたいこと

動画に画像のロゴを追加して保存したいです。

手順

  • CALayerの作成
  • 合成用コンポジション作成
  • インストラクション作成
  • インストラクションを合成用コンポジションに設定
  • exportする

わからないこと

動画に画像のロゴを追加する際に、必要な手順の論理が、解説記事を読んでもいまいちつかめません。だから、上記のような時系列で動画に画像のロゴを追加するために必要なものが揃っているのかも定かではありません。

補足

下記のような実装でアプリを実行すると、ドキュメントフォルダに、動画ファイルが生成されません。exportを消してみれば、、ドキュメントフォルダに、動画ファイルが生成され正常に動きます。

実装

swift

1 2 //動画トリミング 3 func createAudioFileFromAsset(_ asset: AVAsset){ 4 5 6 7 // ロゴのCALayerの作成 8 let logoImage: UIImage = UIImage(named: "iwk.jpg")! 9 let logoLayer: CALayer = CALayer() 10 logoLayer.contents = logoImage.cgImage 11 logoLayer.opacity = 0.9 12 // 親レイヤーを作成 13 let parentLayer: CALayer = CALayer() 14 parentLayer.frame = CGRect(x: 0, y: 0, width: 100, height: 100) 15 parentLayer.addSublayer(logoLayer) 16 17 18 // 合成用コンポジション作成 19 let videoComp: AVMutableVideoComposition = AVMutableVideoComposition() 20 let videoSize: CGSize = videoAssetSourceTrack.naturalSize 21 videoComp.renderSize = videoSize 22 videoComp.frameDuration = CMTimeMake(1, 30) 23 videoComp.animationTool = AVVideoCompositionCoreAnimationTool.init(postProcessingAsVideoLayer: parentLayer, in: parentLayer) 24 25 26 // インストラクション作成 27 let instruction: AVMutableVideoCompositionInstruction = AVMutableVideoCompositionInstruction() 28 instruction.timeRange = CMTimeRangeMake(kCMTimeZero, comp.duration) 29 let layerInstruction: AVMutableVideoCompositionLayerInstruction = AVMutableVideoCompositionLayerInstruction.init(assetTrack: videoAssetSourceTrack) 30 instruction.layerInstructions = [layerInstruction] 31 32 // インストラクションを合成用コンポジションに設定 33 videoComp.instructions = [instruction] 34 35 36 37 let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] as URL 38 let filePath = documentsDirectory.appendingPathComponent("rendered-audio.m4v") 39 //filePath.videoAssetTrack.naturalSize = 320.0 40 if let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPreset640x480){ 41 //exportSession.naturalSize.preferredTransform = 320.0 42 exportSession.canPerformMultiplePassesOverSourceMediaData = true 43 exportSession.outputURL = filePath 44 exportSession.timeRange = CMTimeRangeMake(kCMTimeZero, asset.duration) 45 exportSession.outputFileType = AVFileTypeQuickTimeMovie 46 //exportSession.videoComposition = videoComp 47 exportSession.exportAsynchronously { 48 _ in 49 print("finished: \(filePath) : \(exportSession.status.rawValue) ") 50 } 51 } 52 53 } 54

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

投稿2017/09/22 00:52

keys

総合スコア215

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問