【发布时间】:2018-04-04 10:54:43
【问题描述】:
我正在开发基于视频的应用程序,我需要将 CIFilter 添加到从设备库中选择的捕获视频中。为此,我使用下面的 VideoEffects 库:
https://github.com/FlexMonkey/VideoEffects
使用它,我可以为我的视频添加过滤器,但问题是最终视频输出中缺少音频。我尝试了以下代码来添加音频资产但不工作:
videoOutputURL = documentDirectory.appendingPathComponent("Output_\(timeDateFormatter.string(from: Date())).mp4")
do {
videoWriter = try AVAssetWriter(outputURL: videoOutputURL!, fileType: AVFileTypeMPEG4)
}
catch {
fatalError("** unable to create asset writer **")
}
let outputSettings: [String : AnyObject] = [
AVVideoCodecKey: AVVideoCodecH264 as AnyObject,
AVVideoWidthKey: currentItem.presentationSize.width as AnyObject,
AVVideoHeightKey: currentItem.presentationSize.height as AnyObject]
guard videoWriter!.canApply(outputSettings: outputSettings, forMediaType: AVMediaTypeVideo) else {
fatalError("** unable to apply video settings ** ")
}
videoWriterInput = AVAssetWriterInput(
mediaType: AVMediaTypeVideo,
outputSettings: outputSettings)
//setup audio writer
let audioOutputSettings: Dictionary<String, AnyObject> = [
AVFormatIDKey : Int(kAudioFormatMPEG4AAC) as AnyObject,
AVSampleRateKey:48000.0 as AnyObject,
AVNumberOfChannelsKey:NSNumber(value: 1),
AVEncoderBitRateKey : 128000 as AnyObject
]
guard videoWriter!.canApply(outputSettings: audioOutputSettings, forMediaType: AVMediaTypeAudio) else {
fatalError("** unable to apply Audio settings ** ")
}
audioWriterInput = AVAssetWriterInput(
mediaType: AVMediaTypeAudio,
outputSettings: audioOutputSettings)
if videoWriter!.canAdd(videoWriterInput!) {
videoWriter!.add(videoWriterInput!)
videoWriter!.add(audioWriterInput!)
}
else {
fatalError ("** unable to add input **")
}
还有其他方法可以给视频添加滤镜吗?请给我建议。
我也尝试使用 GPUImage 添加 CIFilter,但这仅适用于实时视频,不适用于捕获的视频。
【问题讨论】:
-
您实际上是否将任何 aac 缓冲区附加到
audioWriterInput?您没有显示足够的代码来说明。 -
是的,我将其添加到 videoWriter (AVAssetWriter)。
-
我可以看到,但是您是否在其中附加了缓冲区?你能展示一下代码吗?
标签: ios swift avfoundation video-processing cifilter