iOS视频拍摄与压缩

iOS 慢动作与延时摄影实现细节全解析:AVCaptureHighFrameRateVideo 与时间压缩控制实践 在移动影像系统中,“慢动作(Slow Motion)”与“延时摄影(Time Lapse)”作为两种对时间进行非线性处理的拍摄模式,已经广泛应用于运动分析、创意视频制作和工业场景记录中。iOS 平台通过 `AVCaptureDevice` 的高帧率采集能力(如 120fps、240fps)与 AVFoundation 提供的帧率压缩机制,为开发者提供了灵活且性能稳定的慢动作与延时拍摄方案。 本文将详细解析 iOS 平台如何在硬件层面实现慢动作采集、高帧率配置、延时帧率压缩等关键机制,结合实际代码和测试数据, 阅读详情

最近在学习使用iOS自带的API进行视频压缩,所以就从视频拍摄开始学起,因为曾经想直接对已有视频进行压缩,无奈总是失败,经研究发现不可以直接调用PC中的视频文件进行压缩,否则直接AVAssetExportSessionStatusFailed。所以只可以用真机测试并调用不iPhone中的视频。废话不多说,上代码:

使用UIImagePickerController即可完成视频的拍摄,并存入自定义的目录中

方法如下

- (IBAction)start:(id)sender
{
    UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
    ipc.sourceType = UIImagePickerControllerSourceTypeCamera;//sourcetype有三种分别是camera,photoLibrary和photoAlbum
    NSArray *availableMedia = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];//Camera所支持的Media格式都有哪些,共有两个分别是@"public.image",@"public.movie"
    ipc.mediaTypes = [NSArray arrayWithObject:availableMedia[1]];//设置媒体类型为public.movie
    [self presentViewController:ipc animated:YES completion:nil];
    ipc.videoMaximumDuration = 30.0f;//30秒
    ipc.delegate = self;//设置委托
    [ipc release];
}

关于上面提到的ipc.sourceType的三种取值,camera指的是调用相机进行拍摄,而photoLibrary指的是手机中的所有图片,photoAlbum指的是单纯指的是相册中的图片。其余的不做过多解释。

然后在如下委托方法中进行拍摄完毕的一些处理

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    sourceURL = [[info objectForKey:UIImagePickerControllerMediaURL] retain];
    
    fileLenLabel.text = [NSString stringWithFormat:@"%f s", [self getVideoLength:sourceURL]];//这个url为什么可以呢,因为这里必须这样
    fileSizeLabel.text = [NSString stringWithFormat:@"%f kb", [self getFileSize:[[sourceURL absoluteString] substringFromIndex:16]]];//文件并没有存储在sourceURL所指的地方,因为这里自己加上了所以要将这段字符串去掉,这个Label是测试时工程中用到的显示所拍摄文件大小的标签
    NSLog([[sourceURL absoluteString] substringFromIndex:16]);
    [self dismissViewControllerAnimated:YES completion:nil];
}

好了,到这里就已经将拍摄好的视频存储在了sourceURL中。下面进行压缩处理

- (IBAction)convert:(id)sender
{//转换时文件不能已存在,否则出错
    AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:sourceURL options:nil];
    NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset];
    if ([compatiblePresets containsObject:resultQuality]) {
        AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:resultQuality];
        NSDateFormatter *formater = [[NSDateFormatter alloc] init];//用时间给文件全名,以免重复,在测试的时候其实可以判断文件是否存在若存在,则删除,重新生成文件即可
        [formater setDateFormat:@"yyyy-MM-dd-HH:mm:ss"];
        resultPath = [[NSHomeDirectory() stringByAppendingFormat:@"/Documents/output-%@.mp4", [formater stringFromDate:[NSDate date]]] retain];
        NSLog(resultPath);
        [formater release];
        exportSession.outputURL = [NSURL fileURLWithPath:resultPath];
        exportSession.outputFileType = AVFileTypeMPEG4;
        [exportSession exportAsynchronouslyWithCompletionHandler:^(void)
        {
            switch (exportSession.status) {
                case AVAssetExportSessionStatusUnknown:
                    NSLog(@"AVAssetExportSessionStatusUnknown");
                    break;
                case AVAssetExportSessionStatusWaiting:
                    NSLog(@"AVAssetExportSessionStatusWaiting");
                    break;
                case AVAssetExportSessionStatusExporting:
                    NSLog(@"AVAssetExportSessionStatusExporting");
                    break;
                case AVAssetExportSessionStatusCompleted:
                    NSLog(@"AVAssetExportSessionStatusCompleted");

                    break;
                case AVAssetExportSessionStatusFailed:
                    NSLog(@"AVAssetExportSessionStatusFailed");
                    break;
            }
            [exportSession release];
        }];
    }
}

做几点说明,在视频拍摄的时候有个参数是来设置拍摄质量的,三种取值UIImagePickerControllerQualityTypeHigh,Medium,Low,但是经过测试发现这三个参数对拍摄效果并无多大影响,压缩的时候也有一个参数三个取值(针对iPhone的只有三个,还有针对其它设备的不同分辨率如640*480等,但是他们并不适用于iPhone,还有一些针对PC的)这三个取值分别是AVAssetExportPresetMediumQuality,Highest,Low,其中Highest与Medium自我感觉并多大差异,清晰度相当,压缩后的文件大小也几乎一样,但是Low要小的多,一分中的视频如果用Medium(或Highest)大小是5M多点,如果是Low则为600KB左右,但是Low要相对模糊许多。一般选取Medium即可。

这里再对如何获取文件的大小以及视频的时长做一点小解释

- (CGFloat) getFileSize:(NSString *)path
{
    NSFileManager *fileManager = [[[NSFileManager alloc] init] autorelease];
    float filesize = -1.0;
    if ([fileManager fileExistsAtPath:path]) {
        NSDictionary *fileDic = [fileManager attributesOfItemAtPath:path error:nil];//获取文件的属性
        unsigned long long size = [[fileDic objectForKey:NSFileSize] longLongValue];
        filesize = 1.0*size/1024;
    }
    return filesize;
}此方法可以获取文件的大小,返回的是单位是KB。

- (CGFloat) getVideoLength:(NSURL *)URL
{
    NSDictionary *opts = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO]
                                                     forKey:AVURLAssetPreferPreciseDurationAndTimingKey];
    AVURLAsset *urlAsset = [AVURLAsset URLAssetWithURL:URL options:opts];
    float second = 0;
    second = urlAsset.duration.value/urlAsset.duration.timescale;
    return second;
}此方法可以获取视频文件的时长。

Latex下使用JabRef添加参考文献 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 Latex可以手动添加参考文献,但文献过多时,使用JabRef软件相对方便。 提示:以下是本篇文章正文内容,下面案例可供参考 一、JabRef安装 网址:http://www.jabref.org 打开网址后,点击“Download” 进入如下页面后,选择 portable (便携版,无需安装),下载后是一压缩包,打开即可使用。 二、使用 1.创建库 ... 阅读详情

相关推荐

J-SCOPE实战:除了看波形,如何用它和JLink-RTT模式高效调试你的STM32变量?

本文详细介绍了如何利用J-SCOPE和JLink-RTT模式高效调试STM32变量,实现实时数据可视化。通过对比HSS和RTT模式的优劣,提供固件端配置、J-SCOPE设置及实战应用案例,帮助开发者快速掌握这一高效调试技术,特别适用于电机控制、传感器融合等需要实时监控的场景。

weixin_29159613的博客 446

iOS视频录制、压缩、上传(整理)

iOS视频录制、压缩、上传(整理) 我们在项目中有时会碰到视频相关的需求,一般的可以分为几种情况: 1. 简单的视频开发,对界面无要求,可直接使用系统UIImagePickerController。 (1)使用UIImagePickerController视频录制,短视频10秒钟 (2)在UIImagePickerController代理方法 didFinishPickingMediaWithIn...

weixin_38516906的博客 2573

stm32学习笔记:ADC

stm32学习笔记:ADC

hmh520i的博客 3223

iOS录制(或选择)视频,压缩、上传(整理)

最新做的一个功能涉及到了视频的录制、压缩及上传。根据网上诸多大神的经验,终于算是调通了,但也发现了一些问题,所以把我的经验分享一下。 首先,肯定是调用一下系统的相机或相册 代码很基本: [objc] view plain copy   //选择本地视频   - (void)choosevideo   { 

WZios的博客 1万+

计算机技术发展5大阶段,现阶段计算机技术应用及发展

【摘要】现代计算机科学技术的发展和普及运用,为世界各国民众基础性生产生活实践活动的组织开展路径造成了深刻影响,本文围绕现阶段计算机技术应用及发展,择取两个具体方面,展开了简要分析。【关键词】计算机技术;应用;发展改革开放以来,计算机设备的广泛运用,促进了计算机科学技术的逐步发展成熟。计算机科学技术是具备新兴表现特征的尖端应用技术,其在现代工业生产和社会生活实践活动过程中的广泛引入运用,给世界各国基...

weixin_42126677的博客 2637

奥顺居PHP测算引流SEO程序_八字风水_起名解梦_星座生肖综合门户源码

奥顺居PHP测算引流SEO程序_八字风水_起名解梦_星座生肖综合门户源码 S30新框架适合多种奥顺插件。

xl1407的博客 1752

iOS开发之视频压缩

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33728708的博客 676

GX WORKS2通过交换机连接PLC的方法

三菱PLC连接方法的分享

weixin_64927621的博客 3620

向日葵下载与安装(*)

向日葵软件用于控制远端电脑 下载地址: https://sunlogin.oray.com/download

weixin_42408447的博客 5万+

一文搞懂电流、电压的有效值 RMS

交流电有正半周、负半周,直接平均可能抵消成 0,但负半周一样会发热。这个交流电如果换成直流电,能产生同样发热功率时,对应的直流电压或电流”,电容耐压通常不能按 220V 选,常见会选 400V 或更高余量。所以做硬件时,220VAC 整流滤波后电容上会接近。电压/电流的有效值,也叫。如果它加在电阻上,发热按。

qq_52293640的博客 450

《FreeRTOS 入门与实战》第2章:开发环境搭建(实战)

STM32CubeIDE工程创建与FreeRTOS移植J-Link调试环境搭建SystemView可视化跟踪配置。

2301_79143213的博客 1733

20160918iOS音频开发之资源(AVAsset)与元数据,解决获取资源属性问题(三)

文主要是源码的分析,程序的结果可以查看20160916IOS音频开发之资源与元数据,解决获取资源属性问题(一)的截图,程序成功解决获取媒体元数据的信息,还可以对除了MP3之外的所有资源写入元数据信息。再次回顾我们的问题。 先提出一个问题,生活中有很多的媒体格式,mp3,avi,rmvb等等,在苹果环境下主要的媒体格式有4种,QuickTime(mov),MPEG-4 video(mp4,m4v),MPEG-4 audio(m4a),MPEG-Layer III audio(mp3),那么问题来了,假如给你一

u011397277的专栏 1万+

2026.5.3:Ubuntu26.04下uv所需的环境变量pyproject.toml

本文档提供了Python开发环境的配置指南。主要包括: 设置环境变量(HF_ENDPOINT、UV_PYTHON_INSTALL_MIRROR等) 创建pyproject.toml配置文件,定义项目元数据(名称、版本等) 指定依赖项(torch系列库)及其安装源(PyTorch官方CUDA 12.8镜像) 配置Python版本要求(>=3.13,<3.14) 设置平台限制(Linux/Windows) 该配置适用于需要PyTorch CUDA 12.8支持的项目开发环境搭建。

拥抱具身智能,昇腾Ascend C 590

iOS拍摄视频,自定义拍摄界面,高清压缩,添加水印

TakeVideo概述iOS系统本身有一套UIImagePickerController用来拍照片和拍摄视频,但是现在各大应用都喜欢自定义拍摄视频的界面,你肯定也心动了。拿微信来讲,小视频是最长是9秒钟,占用1.5MB,那我们也想做这样的效果,肿么办?? 本篇文章,将为你揭秘拍摄视频那点事。 我写了一个Demo叫做TakeVideo,涵盖了这些功能,大家可以去 Github下载 - TakeVi

VictorZhang 6201

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

iOS 视频拍摄与压缩

最近在学习使用iOS自带的API进行视频压缩,所以就从视频拍摄开始学起,因为曾经想直接对已有视频进行压缩,无奈总是失败,经研究发现不可以直接调用PC中的视频文件进行压缩,否则直接AVAssetExportSessionStatusFailed。所以只可以用真机测试并调用不iPhone中的视频。废话不多说,上代码: 使用UIImagePickerController即可完成视频的拍摄,并存入自

程序是有生命的精灵 2023

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IOS开发—iOS视频拍摄与压缩

转载自:http://blog.youkuaiyun.com/lookyou111/article/details/25625609 最近在学习使用iOS自带的API进行视频压缩,所以就从视频拍摄开始学起,因为曾经想直接对已有视频进行压缩,无奈总是失败,经研究发现不可以直接调用PC中的视频文件进行压缩,否则直接AVAssetExportSessionStatusFailed。所以只可以用真机

Lotheve的私房菜 2598

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

iOS 之视频拍摄和压缩

最近在学习使用iOS自带的API进行视频压缩,所以就从视频拍摄开始学起,因为曾经想直接对已有视频进行压缩,无奈总是失败,经研究发现不可以直接调用PC中的视频文件进行压缩,否则直接AVAssetExportSessionStatusFailed。所以只可以用真机测试并调用不iPhone中的视频。废话不多说,上代码: 使用UIImagePickerController即可完成视频的拍摄,并存入自

Shicuf的专栏 447

iOS视频拍摄压缩上传和播放

iOS视频拍摄压缩上传和播放 视频分享 想实现iPhone手机拍摄一段视频,上传到云端分享给手机好友。 技术实现 视频压缩。iPhone拍摄的视频很大,几秒钟就几十兆文件了,需要做压缩,原来考虑用ffmpeg,安装起来比较复杂,网上也有很多教程,不过在通过appstore审核的时候有一定风险。 首先是点击开始录制的代码:     if ([UIImagePick

wenzfcsdn的专栏 3667

iOS每日一记之———————————————视频 拍摄 与压缩 阿里云OSS断点续传

..... 视频拍摄 //调用系统录像 - (void)addTakeVideo {     _imagePickerVc = [[UIImagePickerController alloc] init];     _imagePickerVc.delegate = self;     _imagePickerVc.modalTransitionStyle = UIModalTran

qq_26359763的博客 3661

AVPlayerViewController iOS视频录制,压缩,上传,预览。

#import &lt;AVKit/AVKit.h&gt; #import &lt;AVFoundation/AVFoundation.h&gt; AVPlayerViewControllerDelegate { AVPlayerViewController *mPMoviePlayerViewController; } //调用系统详解 UIIm...

WolfHong的专栏 1354

iOS自定义拍摄小视频压缩上传

// //  LittleVideoViewController.h //  uploadVideoDemo // //  Created by 欧阳荣 on 16/9/5. //  Copyright © 2016年 HengTaiXin. All rights reserved. // #import

疯狂的程序猿的博客 6861

ALAssetLibrary压缩视频以及PHoto框架压缩视频

视频获取上传方式 1:直接摄像头拍摄,压缩上传给服务端 2:从相册中选取已有视频,压缩上传给服务端。 第一种方法好处理,拍摄完直接拿到视频流和路径了,这个应该不难。 第二种方法,我在做项目的时候遇到不少坑(项目兼容7.0以上),所有在获取视频流的时候,8.0以上、8.0以下的方法不一样,被坑了。 下面直接贴代码并解释,但愿有遇到的朋友可以互勉,本菜鸟也是菜鸟一个,做的也不是很好。 ------

dongruanlong的博客 717
上一篇: iOS 系统信息
下一篇: 程序员想玩转大数据:需要知晓的12种工具
iXiJiangYue123
博客等级 码龄14年 5粉丝 2原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值