当前位置: 首页 > 面试题库 >

Swift-压缩视频文件

吕鸿文
2023-03-14
问题内容

因此,目前我正在使用它来压缩视频:

func compressVideo(inputURL: NSURL, outputURL: NSURL, handler:(session: AVAssetExportSession)-> Void)
    {
        let urlAsset = AVURLAsset(URL: inputURL, options: nil)

        let exportSession = AVAssetExportSession(asset: urlAsset, presetName: AVAssetExportPresetMediumQuality)

        exportSession!.outputURL = outputURL

        exportSession!.outputFileType = AVFileTypeQuickTimeMovie

        exportSession!.shouldOptimizeForNetworkUse = true

        exportSession!.exportAsynchronouslyWithCompletionHandler { () -> Void in

            handler(session: exportSession!)
        }

    }

当我在2秒钟内录制视频时,大小为 4.3 MB ,当我在6秒钟内录制视频时,文件的大小为 9.3 MB

有任何减小尺寸的提示吗?


问题答案:

此扩展专注于将其导出到较低质量的设置(在本例中为“中”),并使用mp4容器,而不是moviOS偏爱的容器。这可能会导致质量下降,但是您可以在尝试微调输出时尝试使用更高的输出设置和不同的格式。

extension PreviewVideoViewController: AVCaptureFileOutputRecordingDelegate {
    func fileOutput(_ output: AVCaptureFileOutput,
                    didFinishRecordingTo outputFileURL: URL,
                    from connections: [AVCaptureConnection],
                    error: Error?) {
        guard let data = try? Data(contentsOf: outputFileURL) else {
            return
        }

        print("File size before compression: \(Double(data.count / 1048576)) mb")

        let compressedURL = NSURL.fileURL(withPath: NSTemporaryDirectory() + UUID().uuidString + ".mp4")
        compressVideo(inputURL: outputFileURL as URL,
                      outputURL: compressedURL) { exportSession in
            guard let session = exportSession else {
                return
            }

            switch session.status {
            case .unknown:
                break
            case .waiting:
                break
            case .exporting:
                break
            case .completed:
                guard let compressedData = try? Data(contentsOf: compressedURL) else {
                    return
                }

                print("File size after compression: \(Double(compressedData.count / 1048576)) mb")
            case .failed:
                break
            case .cancelled:
                break
            }
        }
    }


    func compressVideo(inputURL: URL,
                       outputURL: URL,
                       handler:@escaping (_ exportSession: AVAssetExportSession?) -> Void) {
        let urlAsset = AVURLAsset(url: inputURL, options: nil)
        guard let exportSession = AVAssetExportSession(asset: urlAsset,
                                                       presetName: AVAssetExportPresetMediumQuality) else {
            handler(nil)

            return
        }

        exportSession.outputURL = outputURL
        exportSession.outputFileType = .mp4
        exportSession.exportAsynchronously {
            handler(exportSession)
        }
    }
}


 类似资料:
  • 问题内容: 我正在尝试将用户相机拍摄的视频从UIImagePickerController压缩(不是现有视频,而是一个正在播放的视频)以上传到我的服务器,并花费少量时间这样做,因此较小的尺寸是理想的选择,而不是30-在更新质量的相机上为45 mb。 这是为iOS 8快速压缩的代码,压缩效果非常好,我轻松地从35 mb降至2.1 mb。 这是我的UIImagePickerController的代码,

  • 我正在编写一个Swift应用程序,通过网络发送iPhone摄像头的视频输入(帧),这样我以后就可以在macOS应用程序上显示它们了。

  • 我正在尝试使用ffmpeg和使用以下命令压缩一个视频。 然而,生成的视频的大小大于原始视频的大小。有没有人可以指出为什么会发生这种情况,如果有其他命令我应该使用。

  • 我试着按照ffmpeg4android库,我得到了压缩视频时的问题,如下面的日志图像。 我使用意图转移到压缩媒体类, 03-13 14:49:45.770:I/FFMPEG4Android(6065):WorkingFolderPath://sdcard/videokit/ 03-13 14:49:45.775:d/ffmpeg4android(6065):工作目录存在,不存在(许可证文件和演示视

  • 我正试图在我的网站上添加三个视频。我在用JW-Player。它可以工作,但一个简单的10秒视频(3MB)需要一分钟以上的时间来加载。我以为这是我的主机服务的问题,但我已经尝试上传另一个类似格式的视频建立在互联网上,比我的长(22MB),它加载在几秒钟内! 我正在用Avidemux将一个。AVI(MPEG4,9280 Kbps,640x480,25 fps,273 MB,4分钟,无音频)视频剪切和转

  • 其次,当使用摄像机录制视频时,默认情况下它不会被压缩,所以我想whatsapp使用压缩它,而且不需要时间。(尝试了1min的视频1920x1080,大小为125MB,很快变成640x360,大小为5MB,并自动开始上传)..他们怎么可能这样做?而为什么选择640x360,在我看来对于2个异步任务来说速度非常快:压缩+上传。 当我在.mp4-codec:v libx264-crf 23-preset