2

AVAssetExportSession初期化パラメータの 1 つとしてプリセットを受け取ります。

AVAssetExportSession(asset: AVAsset, presetName: String)

プリセットはAVAssetExportPreset640x480やのような設定AVAssetExportPreset1920x1080です。ただし、カスタム解像度 (250x400 など) を使用してエンコードしたい場合、それを行う方法はありますか?

4

2 に答える 2

2

これらのエクスポート オプションは定義されており、カスタム解像度を使用してエンコードすることはできません。または、このアプローチを試すことができます

func exportVideo(asset:AVAsset, renderedWidth: CGFloat, renderedHeight: CGFloat, exportCompletionHandler: (() -> Void)?) {
        let videoTrack: AVAssetTrack = asset.tracksWithMediaType(AVMediaTypeVideo)[0]

        let videoComposition = AVMutableVideoComposition()
        videoComposition.frameDuration = CMTimeMake(1, 30)
        videoComposition.renderSize = CGSizeMake(renderedWidth, renderedHeight)

        let instruction: AVMutableVideoCompositionInstruction = AVMutableVideoCompositionInstruction.init()
        instruction.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(60, 30))

        let transformer: AVMutableVideoCompositionLayerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: videoTrack);
        //Apply any transformer if needed
        //

        instruction.layerInstructions = [transformer]
        videoComposition.instructions = [instruction]

        //Create export path
        let exportPath: NSURL = NSURL(fileURLWithPath: "export_path_here")
        //

        let exporter = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetHighestQuality)
        exporter?.videoComposition = videoComposition
        exporter?.outputURL = exportPath
        exporter?.outputFileType = AVFileTypeQuickTimeMovie

        exporter?.exportAsynchronouslyWithCompletionHandler({ () -> Void in
            //Do sth when finished
            if let handler = exportCompletionHandler {
                handler()
            }
        })
    }

これがお役に立てば幸いです。

参考:https ://www.one-dreamer.com/cropping-video-square-like-vine-instagram-xcode/

于 2016-04-20T06:13:46.763 に答える