次のプロジェクトを実行すると、デバイス上で編集済みのビデオが生成されます。オーディオファイルで次の実装を試してみました。ただし、ムービーとして実行するとエラーは発生しませんが、ムービーは生成され、ディレクトリには入りません https://github.com/Ryosuke-Hujisawa/My_AVAssetExportSession_AVMutableComposition-2私のavfoundationが動作しないのはなぜですか?
私のプロジェクトにはモデルがあります。モデルは以下です https://github.com/justinlevi/AVAssetExportSession_AVMutableComposition
私はオーディオファイルに成功しました。オーディオがトリムされ編集された状態のディレクトリにありました。私はビデオを編集したい。ビデオを編集することはできますが、編集してもエラーは発生しませんが、結果はディレクトリに存在しません。または、オーディオファイルの状態でディレクトリに存在し、アニメーションとして生成されません。私を助けてください。
import UIKit
import AVFoundation
class ViewController: UIViewController {
var asset: AVAsset?
@IBAction func exportBtnDidTap(_ sender: AnyObject) {
guard let asset = asset else {
return
}
createAudioFileFromAsset(asset)
}
override func viewDidLoad() {
super.viewDidLoad()
let videoAsset = AVURLAsset(url: Bundle.main.url(forResource: "sample", withExtension: "m4v")!)
let comp = AVMutableComposition()
let videoAssetSourceTrack = videoAsset.tracks(withMediaType: AVMediaTypeVideo).first! as AVAssetTrack
let videoCompositionTrack = comp.addMutableTrack(withMediaType: AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid)
do {
try videoCompositionTrack.insertTimeRange(
CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(10, 600)),
of: videoAssetSourceTrack,
at: kCMTimeZero)
}catch { print(error) }
asset = comp
}
func deleteFile(_ filePath:URL) {
guard FileManager.default.fileExists(atPath: filePath.path) else {
return
}
do {
try FileManager.default.removeItem(atPath: filePath.path)
}catch{
fatalError("Unable to delete file: \(error) : \(#function).")
}
}
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: AVAssetExportPresetAppleM4A){
exportSession.canPerformMultiplePassesOverSourceMediaData = true
exportSession.outputURL = filePath
exportSession.timeRange = CMTimeRangeMake(kCMTimeZero, asset.duration)
exportSession.outputFileType = AVFileTypeAppleM4A
exportSession.exportAsynchronously {
_ in
print("finished: \(filePath) : \(exportSession.status.rawValue) ")
}
}
}
}
私はexportSession.outputFileType = AVFileTypeAppleM4Aしてみてください - > exportSession.outputFileType = AVFileTypeAppleM4V – howmanylife
が、これはERRある - >理由: '無効な出力ファイルタイプ' ***まずスローコールスタック: – howmanylife
AVFileTypeMPEG4をお試しください? –