プログラミング

Swiftで動画トリミングをする方法

0
0

swiftで動画トリミングをする方法

 

 

既存の動画ファイル(音声+映像)から映像と音声をそれぞれ抜き出し一つの新しい動画として生成しています。映像と音声は、意図的にそれぞれ別に抜き出しているのではなく、そうせざるを得ないのでそうしています。汎用性はありませんが、映像と音声をそれぞれ抜き出せることは自由自在に音声と映像を組み替えられるというメリットがあります。

swiftで動画トリミングをする実装

 

 

import UIKit
import AVFoundation

class ViewController: UIViewController {

var asset: AVAsset?

override func viewDidLoad() {
super.viewDidLoad()

let videoAsset = AVURLAsset(url: Bundle.main.url(forResource: "BabyImSorry", withExtension: "m4v")!)
let audioAsset1 = AVURLAsset(url: Bundle.main.url(forResource: "BabyImSorry", withExtension: "m4v")!)
let comp = AVMutableComposition()
let videoAssetSourceTrack = videoAsset.tracks(withMediaType: AVMediaTypeVideo).first! as AVAssetTrack
let videoCompositionTrack = comp.addMutableTrack(withMediaType: AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid)
let audioAssetSourceTrack1 = audioAsset1.tracks(withMediaType: AVMediaTypeAudio).first! as AVAssetTrack
let audioCompositionTrack = comp.addMutableTrack(withMediaType: AVMediaTypeAudio, preferredTrackID: kCMPersistentTrackID_Invalid)

do {

try videoCompositionTrack.insertTimeRange(
CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(15, 600)),
of: videoAssetSourceTrack,
at: kCMTimeZero)

try audioCompositionTrack.insertTimeRange(
CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(15, 600)),
of: audioAssetSourceTrack1,
at: kCMTimeZero)

}catch { print(error) }

asset = comp
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

func createAudioFileFromAsset(_ asset: AVAsset){

let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] as URL

let filePath = documentsDirectory.appendingPathComponent("rendered-audio.m4v")
//deleteFile(filePath)

if let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPreset640x480){

exportSession.canPerformMultiplePassesOverSourceMediaData = true
exportSession.outputURL = filePath
exportSession.timeRange = CMTimeRangeMake(kCMTimeZero, asset.duration)
exportSession.outputFileType = AVFileTypeQuickTimeMovie
exportSession.exportAsynchronously {
_ in
print("finished: \(filePath) : \(exportSession.status.rawValue) ")
}
}
}

@IBAction func saveVideo(_ sender: Any) {

guard let asset = asset else {
return
}

createAudioFileFromAsset(asset)
}

}

 

参考

 

Pocket
LinkedIn にシェア

エンジニアにおすすめできる本

Card image cap
リーダブルコード

より良いコードを書くためのシンプルで実践的なテクニック

Card image cap
Webを支える技術

HTTP,URI,HTML,そしてREST

Card image cap
誰でもPythonで作れる

儲かるAIとソフトウェアの作り方

Card image cap
プログラマが知るべき97のこと

現場で使える実践哲学のマスターピース

Card image cap
情熱プログラマー

時代を超えて。ソフトウェア開発者の幸せな生き方

Card image cap
アジャイルサムライ

プログラミング達人開発者への道

Card image cap
Rubyを作った男 まつもとゆきひろ

コードの世界 スーパー・プログラマになる14の思考法

  • この記事を書いた人
  • 最新記事

藤沢瞭介(Ryosuke Hujisawa)

りょすけと申します。18歳からプログラミングをはじめ、今はフロントエンドでReactを書いたり、AIの勉強を頑張っています。off.tokyoでは、ハイテクやガジェット、それからプログラミングに関する情報まで、エンジニアに役立つ情報を日々発信しています!

-プログラミング
-

Copyright© off.tokyo , 2021 All Rights Reserved Powered by AFFINGER5.