首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从AVAssetExportSession准确估计输出视频大小的方法

AVAssetExportSession是iOS中用于导出视频的类,它可以将一个AVAsset对象导出为不同格式的视频文件。要准确估计输出视频大小,可以通过以下步骤:

  1. 创建AVAssetExportSession对象,并设置其相关属性,如输出文件类型、输出文件路径等。
  2. 调用AVAssetExportSession的exportAsynchronously(completionHandler:)方法开始导出视频。
  3. 在导出完成后,可以通过AVAssetExportSession的status属性来判断导出是否成功。如果成功,可以获取输出视频文件的大小。

为了准确估计输出视频大小,可以使用以下方法:

  1. 在导出视频之前,可以通过AVAssetExportSession的estimatedOutputFileLength属性获取估计的输出文件大小。这个属性返回的是一个字节数,可以通过将其转换为合适的单位(如MB或GB)来表示。
  2. 如果需要更精确的估计,可以在导出完成后,通过获取输出文件的实际大小来计算。可以使用FileManager的attributesOfItem(atPath:)方法获取文件的属性,其中包括文件大小。

下面是一个示例代码,演示如何使用AVAssetExportSession来准确估计输出视频大小:

代码语言:txt
复制
import AVFoundation

func estimateOutputVideoSize(asset: AVAsset, outputURL: URL, outputFileType: AVFileType) -> String? {
    let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetPassthrough)
    exportSession?.outputURL = outputURL
    exportSession?.outputFileType = outputFileType
    
    // 开始导出视频
    let semaphore = DispatchSemaphore(value: 0)
    exportSession?.exportAsynchronously {
        semaphore.signal()
    }
    semaphore.wait()
    
    // 导出完成后,获取输出文件的大小
    if exportSession?.status == .completed {
        let fileManager = FileManager.default
        do {
            let attributes = try fileManager.attributesOfItem(atPath: outputURL.path)
            if let fileSize = attributes[.size] as? Int64 {
                let sizeInMB = Double(fileSize) / (1024 * 1024)
                return String(format: "%.2f MB", sizeInMB)
            }
        } catch {
            print("Failed to get file attributes: \(error)")
        }
    }
    
    return nil
}

// 使用示例
let asset = AVAsset(url: URL(fileURLWithPath: "path/to/input/video.mov"))
let outputURL = URL(fileURLWithPath: "path/to/output/video.mp4")
let outputFileType = AVFileType.mp4

if let estimatedSize = estimateOutputVideoSize(asset: asset, outputURL: outputURL, outputFileType: outputFileType) {
    print("Estimated output video size: \(estimatedSize)")
} else {
    print("Failed to estimate output video size")
}

在这个示例中,我们首先创建了一个AVAsset对象,表示输入视频文件。然后,我们指定了输出视频文件的URL和文件类型。接下来,我们调用estimateOutputVideoSize函数来估计输出视频的大小,并将结果打印出来。

请注意,这个示例只是演示了如何使用AVAssetExportSession来估计输出视频大小,并没有涉及到具体的腾讯云产品。如果需要使用腾讯云相关产品来处理视频,可以参考腾讯云文档或咨询腾讯云的技术支持。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用深度学习视频估计车辆速度

视频样本图像 训练视频标签是a .txt文件,其中每一行对应于特定帧速度。 方法 这个问题最有趣地方是你神经网络输入会是什么样子。仅从一个静态图像计算速度是不可能。...一种有效方法是将两个或更多图像堆叠在一起,或者像LSTM或Transformer那样连续地堆叠。另一个是计算光流,我决定用它。 什么是光流?...它基本上是一种为每个像素计算矢量方法,告诉你两幅图像之间相对运动。有一个很棒computerphile视频:https://www.youtube.com/watch?...如果你想象光流图像它会是这样: ? 训练 记住我们训练目的: 光流→模型→车速估计 我选择模型是EfficientNet。我非常喜欢它,因为它可扩展性。...我总是B0开始,然后放大到B3,因为我GPU只有6 GB内存。经过训练,我得到如下结果(loss为均方误差): ? 训练损失 ? 验证损失 很好,看起来一切都很正常!

1.5K20
  • 使用深度学习视频估计车辆速度

    作者:Sharif Elfouly 编译:ronghuaiyang 导读 使用光流 + CNN方法来预测车辆速度,用PyTorch实现,有代码。...视频样本图像 训练视频标签是a .txt文件,其中每一行对应于特定帧速度。 方法 这个问题最有趣地方是你神经网络输入会是什么样子。仅从一个静态图像计算速度是不可能。...它基本上是一种为每个像素计算矢量方法,告诉你两幅图像之间相对运动。有一个很棒computerphile视频:https://www.youtube.com/watch?...如果你想象光流图像它会是这样: ? 训练 记住我们训练目的: 光流→模型→车速估计 我选择模型是EfficientNet。我非常喜欢它,因为它可扩展性。...我总是B0开始,然后放大到B3,因为我GPU只有6 GB内存。经过训练,我得到如下结果(loss为均方误差): ? 训练损失 ? 验证损失 很好,看起来一切都很正常!

    96220

    输出不同像元大小批量重采样方法

    本文主要介绍内容是一种基于ArcGIS ModelBuilder输出不同像元大小批量重采样方法 刚开始我思路是使用For循环然后加重采样工具进行输出,结果输出图像都是一个像元大小(以下模型为错误演示...) 后来经过思考发现,重采样工具输出像元大小数据类型为“像元大小xy”,而For循环输出数据类型为值 所以只要再在这个模型里面添加一个“计算值”工具就可以吧for循环输出值转化为“像元大小xy...”就可以了 将值作为表达式添加到“计算值”工具中,然后再将计算值工具所输出value数据类型设为“像元大小xy” 同理如果我们在使用ModelBuilder时候,如果数据类型不对,应该也都可以使用计算值工具来进行转换...(计算值工具里面的数据类型还挺多) 之后就很简单了,输出文件名称用行内变量替换为像元大小值,直接运行工具就好了 顺手我将这个模型做成了一个工具,因为我gis版本为arcgis10.6,低版本可能会出现不兼容...例如,如果起初值为 10,终止值为 100,每次增加量为10进行递增,则迭代会一直递增到值 100。 则会输出像元大小为10,20,30,40,…100栅格数据

    1.1K40

    AVFoundation 框架初探究(三)

    说一下 AVAsset 三个属性/方法:       1、commonMetadata 这个属性Common键空间获取元数据,这个属性会返回以一个包含所有可用元数据数组       2、availableMetadataFormats...按照书中描述这样写法获取到 Key 是整型数据,而我们获取到是上面的输出,其实在最上面的描述信息中可以看到上面是有Key 这个属性,这点暂时我也没明白,但事实是按照我们上面的输出日志我们的确是不能理解...这一章最后说居然是 AVAssetExportSession ----       AVAssetExportSession 这个我们再前面说过,在前面拍摄完视频之后我们就利用这个 AVAssetExportSession...方法导出了,导出数据会在改方法Block中回调       5、最后就是在回调block中根据AVAssetExportSession对象status属性去判断压缩是否成功,进而进行自己想要操作...self.videoPath]; float dataSize = (float)data.length/1024/1024; NSLog(@"视频压缩后大小

    75170

    输出不同像元大小批量重采样方法

    本文主要介绍内容是一种基于ArcGIS ModelBuilder输出不同像元大小批量重采样方法 刚开始我思路是使用For循环然后加重采样工具进行输出,结果输出图像都是一个像元大小(以下模型为错误演示...后来经过思考发现,重采样工具输出像元大小数据类型为“像元大小xy”,而For循环输出数据类型为值 ? ?...所以只要再在这个模型里面添加一个“计算值”工具就可以吧for循环输出值转化为“像元大小xy”就可以了 ?...将值作为表达式添加到“计算值”工具中,然后再将计算值工具所输出value数据类型设为“像元大小xy” ? ?...则会输出像元大小为10,20,30,40,…100栅格数据

    1.2K10

    AVFoundation 框架初探究(三)

    说一下 AVAsset 三个属性/方法:       1、commonMetadata 这个属性Common键空间获取元数据,这个属性会返回以一个包含所有可用元数据数组       2、availableMetadataFormats...按照书中描述这样写法获取到 Key 是整型数据,而我们获取到是上面的输出,其实在最上面的描述信息中可以看到上面是有Key 这个属性,这点暂时我也没明白,但事实是按照我们上面的输出日志我们的确是不能理解...这一章最后说居然是 AVAssetExportSession ----       AVAssetExportSession 这个我们再前面说过,在前面拍摄完视频之后我们就利用这个 AVAssetExportSession...方法导出了,导出数据会在改方法Block中回调       5、最后就是在回调block中根据AVAssetExportSession对象status属性去判断压缩是否成功,进而进行自己想要操作...self.videoPath]; float dataSize = (float)data.length/1024/1024; NSLog(@"视频压缩后大小

    1.2K30

    多媒体-图片、音频、视频压缩

    前言 很多时候我们需要把一些图片、音频、视频上传到服务器,于是就有了文件压缩这个问题了,这篇文章就小结一下具体文件压缩实现吧。...** 在Iphone上有两种读取图片数据简单方法 **UIImageJPEGRepresentation和UIImagePNGRepresentation.** UIImageJPEGRepresentation...(size); // 绘制改变大小图片 [image drawInRect:CGRectMake(0, 0, size.width, size.height)]; // 当前context...Snip20161207_2.png #include "lame.h" //经过转化,音频文件大小得到了很大压缩 //这里转化,隐藏了两个参数 :原始路径cafPathStr 输出路径...:文件不存在"); } return 0; } 视频压缩 以2s为例 未经压缩视频大小有 8968k 而经过压缩视频长度有 240k,俩者差了 40多倍 # iOS录制视频是mov

    1.8K10

    AVFoundation 框架初探究(四)

    具体在下面@discussion部分有讨论,我们再总结一下它三个值分别代表含义 // AVLayerVideoGravityResizeAspect 会在承载层范围内缩放视频大小来保持视频原始比例宽高...AVAssetExportSession ----       我们先看看在我们Demo里面我们使用到关于AVAssetExportSession代码,我们在这里使用它时候只是利用它进行了一下视频压缩...: #pragma mark -- #pragma mark -- 视频压缩方法 -(void)compressVideoWithFileUrl:(NSURL *)fileUrl{ /...也要注意这一点 */ // 压缩后视频方法命名 NSDateFormatter * formatter = [[NSDateFormatter alloc]init];...self.videoPath]; float dataSize = (float)data.length/1024/1024; NSLog(@"视频压缩后大小

    1.4K60

    腾讯视频架构重构,看DDD概念与方法

    4万行代码降到1.8万,腾讯视频竟然用DDD做架构重构?》中,我们详细拆解了 DDD 理论发展和实际落地过程中量化评估方案,为大家深入浅出地揭开了 DDD 神秘面纱。...把大型系统逻辑上切分成若干层,分而治之。 把大型系统提炼为一个抽象结构,例如,冯诺依曼计算机=IO+CPU+Memory。...战略精炼:对核心域进一步萃取,过滤掉不必要杂质,使得其方向更清晰,内容更准确、内核更精干。...案例分析 案例:腾讯视频会员技术架构 通过隐喻与分层两个手法,可以很快看清腾讯视频会员技术架构: 隐喻:支撑域+核心域+通用域 分层:表示层+应用层+设施层 还是视频会员技术架构例子,只是换了几个不同视角来看...我12年开始接触领域驱动设计,到现在已经十年了,对 DDD 理解也经历了一个禅宗式参悟过程:参禅之初,看山是山,看水是水;禅有悟时,看山不是山,看水不是水;禅中彻悟,看山仍然山,看水仍然是水。

    1.2K42

    MYSQL 正则查询 扯到 查询中大小写敏感解决方法

    的人有 1万6千多人 下面有一个需求,想找到 G 大小开头,中间是字母 结尾是 i firstname 下面的语句应该能满足你需求 select * from employees where...写法有些怪异但如果按照平时查询方法,会将他们一股脑都查询出来 select * from employees where first_name = 'georgi'; 我们使用上面的语句来查询...,结果可想而知,会不区分大小写来将所有的Georgi gEORGI 都查出来 其实在早期MYSQL 版本 5.X 之前 正则表达式是可以区分大小 但现在版本是不能区分。...如何让目前正则表达式能区分出大小写 我们可以在 你要查询字段名前加上 binary 然后匹配正常正则,你就可以查到你要查数据了,请见上图 那么问题来了,题目说扯到大小写敏感,你上面那个能算是扯到大小写敏感吗...,如果我不用正则表达式,或者我不愿意在字段前面加binary ,你怎么解决我大小写敏感问题。

    2.7K10

    高性能且灵活 iOS 视频剪辑与特效开源框架 – VideoLab

    有了这些混合参数之后,可以通过自定义 Compositor 来混合对应图像帧。 整体工作流如图所示,接受指令,把原视频帧通过合成器,生成合成后帧,输出给播放器或者导出器。...让我们聚焦到合成器,我们有多个原始帧,需要处理并输出一帧。...因此,我们需要有一个对象可以解析这几个描述对象,并用AVFoundation 方法生成AVPlayerItem 与AVAssetExportSession。...图中能看到VideoRenderLayer1和VideoRenderLayer5共用一个视频轨道,这是因为苹果对视频轨道有限制,我们需要尽量重用,每条视频轨道对应一个解码器,当解码器数量超出系统限制时...添加音频轨道第二步,将AudioRenderLayer视频轨道添加到AVComposition中,对于RenderLayerSource包含音频轨道AudioRenderLayer,Source

    1.6K20

    AVFoundation框架解析看这里(1)- 概论

    资源导出会话:是一个通过资源文件对象去创建一个指定预设输出转码内容会话 AVAssetImageGenerator用于截取视频某帧画面 AVAssetReader资源读取音视频数据 AVAssetReaderOutput...读取资源文件输出类 AVAssetResourceLoader资源文件加载器会AVURLAsset和代理方法得到加载内容 AVAssetTrack资源分轨 AVAssetTrackGroup这里面封装了一组资源分轨...AVCaptureDevice硬件捕获设备类 AVCaptureInput硬件捕获设备获得输入数据 AVCaptureOutput获得输出数据 AVCaptureSession用于调配音视频输入与输出之间数据流...AVCaptureVideoPreviewLayer捕获视频数据预览图层 AVMetadataObject音视频元数据是一个基类里面包含面部检测元数据和二维码元数据 AVPlayer音视频播放器...AVPlayerItem音视频播放元素 AVPlayerItemMediaDataCollector音视频播放器元素媒体数据收集器 AVPlayerItemOutput播放器元素输出类 AVPlayerItemTrack

    1.5K21

    【干货】ICCV2017 PoseTrack challenge优异方法:基于检测和跟踪视频中人体姿态估计

    【导读】近日,针对视频中场景复杂、人物众多等困难挑战,来自Facebook、CMU和达特茅斯学院研究人员提出了一种新颖基于检测和跟踪视频中人体姿态估计方法。...其方法是一种轻量级两阶段建模方式:先对单帧或者短片段进行关键点估计,后续使用轻量级跟踪方法来生成关键点预测并链接到整个视频上。另外,本文还对Mask R-CNN进行了3D扩展。...基于最新的人体检测和视频理解方面的进展,文章提出了一种极度轻量化和高效两阶段方法:先对单帧或者短片段进行关键点估计,后续使用轻量级跟踪方法来生成关键点预测并链接到整个视频上;对于帧层次(frame-level...大部分现有的视频姿态估计方法使用了手工设计图模型或者整数规划优化,通过计算整个时间预测来进行基于帧关键点预测。...这些 tubes被用来3D feature blob中提取区域特征,其使用了一个时空RoIAlign机制。

    2.7K60

    CVPR 2020丨基于记忆增强全局-局部整合网络:更准确视频物体检测方法

    搜索方法采用是典型one-shot model 方法。 ? cell-basedarchitecture鲁棒性分析 ?...当我们stand-alone转向one-shot model时,虽然最佳模型准确性仅下降5 - 10个百分点,但前景较差架构准确性下降了60个百分点。...作者认为神经网络架构搜索能够找到哪些操作是有效,如果这些有效操作存在于模型中,那么就可以预测这些架构准确率很高,如果他们不存在模型中,所以就预测他们准确率很低。...,所以Tree-lstm输入是前一个lstm输出,Tree-lstm输出是后一个lstm输入。...结构可以看出来,和人工设计网络结构不同,这些网络结构有时会经历很多个非线性激活层。

    72930

    ECCV 2018 | 建模任务相关注视点转移,实现第一人称视频注视点准确估计

    机器之心发布 作者:Yifei Huang(黄逸飞)、Minjie Cai(蔡敏捷)、Zhenqiang Li(李振强)、Yoichi Sato(佐藤洋一) 准确估计第一人称视频中人注视点能够帮助计算机更好地预测人关注区域...近日,来自东京大学和湖南大学研究者们提出了一个全新视角和方法对这一问题进行建模,新方法在第一人称视频注视点估计任务上大大超出了已有方法性能。...本文致力于提出一个有效方法来实现对第一人称视频注视点准确估计。...传统方法通常将这一问题构建成一个视觉显著性(visual saliency)估计问题,通过自下而上(bottom-up)方法框架输入图像或视频中提取自定义(例如手位置)或可学习视觉特征(例如卷积神经网络...结论 本文提出了一个能够准确预测第一人称视频注视点方法。作者创新性地提出了一个注意转移模型,该模型通过挖掘视频中注视点上下文时序信息,来对人在完成特定任务时所关注物体时序关系进行建模。

    62621

    基于视频行人再识别新进展:区域质量估计方法和高质量数据集

    【导读】近日,针对基于视频行人再识别中局部噪声大、数据集质量低问题,来自商汤科技(SenseTime)、中国香港中文大学和北京航空航天大学学者发表论文提出基于区域质量估计网络和一个更高质量数据集...为此,这篇文章提出了一种新颖基于区域质量估计网络(RQEN),其使用一种巧妙训练方法,能够提取不同帧之间互补区域信息,从而更好地进行训练。...其目的是削弱质量差图像区域影响,同时利用序列中互补信息。该方法使用端到端(end-to-end)训练使网络能够估计图像不同区域信息有效性。...提出联合训练多级特征工作流程,使基于区域质量预测器能够在iLIDS-VID和PRID 2011上对区域质量进行适当估计,从而实现基于视频行人再识别。...分数[0 -1]分别映射到不同颜色(蓝色-红色) ▌结论 本文针对基于视频行人再识别问题,提出一种基于区域质量估计网络(RQEN)。

    1.1K60
    领券