当前位置: 首页 > wzjs >正文

电子商务网站设计与...网站建设方向课程

电子商务网站设计与...,网站建设方向课程,电子商务网站建设与课程设计,做戒烟网站素材引言 在 iOS 开发中,视频编辑一直是一个门槛不低但极具潜力的能力场景。无论是用户上传短视频前的裁剪处理,还是内容拼接生成精彩合集,都离不开对 AVFoundation 框架的深入理解。 本篇我们将聚焦 AVFoundation 的两个核心功能实现&#xff…

引言

在 iOS 开发中,视频编辑一直是一个门槛不低但极具潜力的能力场景。无论是用户上传短视频前的裁剪处理,还是内容拼接生成精彩合集,都离不开对 AVFoundation 框架的深入理解。

本篇我们将聚焦 AVFoundation 的两个核心功能实现

  1. 如何裁剪视频中的某一段时间范围;
  2. 如何拼接多个视频(或音频)片段为一段完整内容。

而这一切,我们都会通过一个可运行的实战 Demo 来完成:你可以选择本地素材,设置裁剪时间,预览播放效果,并导出成成品视频。

一、裁剪指定时间段视频(实战功能 1)

裁剪视频是编辑场景中最常见的需求,比如保留精彩片段、生成短视频或裁掉片头片尾。在 AVFoundation 中,这项工作可以通过 AVAssetExportSession 来轻松实现。

1.1 实现原理

整体流程如下:

  1. 使用 AVAsset 加载原始视频;
  2. 设置导出时间范围(timeRange);
  3. 创建导出任务,生成目标视频。

只需几行代码即可完成基本裁剪操作。

1.2 示例代码

let asset = AVAsset(url: inputURL)guard let exportSession = AVAssetExportSession(asset: asset, presetName: .presetHighestQuality) else {print("❌ 无法创建导出会话")return
}let startTime = CMTime(seconds: 3, preferredTimescale: 600)
let duration = CMTime(seconds: 5, preferredTimescale: 600)
exportSession.timeRange = CMTimeRange(start: startTime, duration: duration)exportSession.outputURL = outputURL
exportSession.outputFileType = .mp4
exportSession.exportAsynchronously {switch exportSession.status {case .completed:print("✅ 导出成功")case .failed:print("❌ 导出失败: \(exportSession.error?.localizedDescription ?? "未知错误")")default:break}
}

这段代码会将原始视频中的第 3 秒开始,截取 5 秒长度(即第 3~8 秒)作为输出结果。

1.3 常见问题与注意事项

  1. 起始时间越界:startTime + duration 不能超过视频总时长,否则导出失败
  2. 导出前几帧黑屏:起始位置若非关键帧,可能出现黑屏,建议使用更高的导出质量或手动设置关键帧
  3. presetName:建议使用 .presetHighestQuality 保证画质,可根据需要替换为 .presetMediumQuality 等
  4. 输出类型:常用为 .mp4(即 .mov 对应 .mov 容器),需确保目标路径无文件冲突

二、拼接多个视频(实战功能 2)

除了裁剪,另一个常见场景是将多个片段拼接成一段完整视频,比如:

  • 用户选择多个素材后顺序合成;
  • 为视频添加片头片尾;
  • 制作合集、片段合成。

这类需求的核心就是「轨道拼接」,AVFoundation 提供了 AVMutableComposition 来完成这项任务。

2.1 实现原理

拼接的思路是:

  1. 创建一个空的 AVMutableComposition;
  2. 添加一个视频轨道(AVMutableCompositionTrack);
  3. 将每个片段依次插入轨道,设置其插入时间点;
  4. 最终通过 AVAssetExportSession 导出成品。
注意:如果同时拼接音频,也需添加对应的音频轨并分别插入。

2.2 示例代码

let composition = AVMutableComposition()
guard let videoTrack = composition.addMutableTrack(withMediaType: .video,preferredTrackID: kCMPersistentTrackID_Invalid) else {print("❌ 无法创建视频轨道")return
}var currentTime = CMTime.zerofor asset in assetList {guard let sourceTrack = asset.tracks(withMediaType: .video).first else { continue }let range = CMTimeRange(start: .zero, duration: asset.duration)try? videoTrack.insertTimeRange(range, of: sourceTrack, at: currentTime)currentTime = currentTime + asset.duration
}

导出方式与裁剪完全一致:

let exportSession = AVAssetExportSession(asset: composition, presetName: .presetHighestQuality)!
exportSession.outputURL = outputURL
exportSession.outputFileType = .mp4
exportSession.exportAsynchronously {print("✅ 拼接导出完成")
}

2.3 注意事项

  1. 分辨率不一致:不同尺寸拼接后可能出现跳变,建议统一画面尺寸(将在后续文章中介绍)
  2. 帧率不一致:可能导致导出失败或播放卡顿
  3. 音频处理:如果需要保留音频轨道,需同时添加 audioTrack 并插入对应内容
  4. 拼接顺序:由代码中 insertTimeRange 的顺序决定

结语:实战篇预告

本篇我们用最小的实现方式,介绍了视频裁剪与拼接的原理与代码实现。但如果要把这些功能“真正用在 App 中”,就需要:

  1. 支持用户选择素材、设置时间段;
  2. 能够实时预览播放与导出进度;
  3. 有清晰的项目结构,便于扩展更多编辑功能。

这些内容将在下一篇中展开 —— 我将带你一步步剖析一个完整 AVFoundation 视频编辑 Demo 的设计与实战实现。


文章转载自:

http://ObQqCd9U.hjssh.cn
http://JxfxmMkT.hjssh.cn
http://phK2a17v.hjssh.cn
http://IjQWwGDB.hjssh.cn
http://QdZA1vvS.hjssh.cn
http://BNjEcI7i.hjssh.cn
http://dw6TDKRW.hjssh.cn
http://ZHy4qmlH.hjssh.cn
http://F5AkaN91.hjssh.cn
http://dgEkStl0.hjssh.cn
http://Xw66kEDM.hjssh.cn
http://JmOONBbW.hjssh.cn
http://ktH08tTZ.hjssh.cn
http://UNECUXTW.hjssh.cn
http://tm3mAola.hjssh.cn
http://oVRLrLBN.hjssh.cn
http://DFlHO2Dq.hjssh.cn
http://9ZwTKmpi.hjssh.cn
http://FuRdfd8v.hjssh.cn
http://7QYrGZ1b.hjssh.cn
http://VUZ1pTtg.hjssh.cn
http://DrR30lSp.hjssh.cn
http://EKsHHuyo.hjssh.cn
http://6cf9hmiu.hjssh.cn
http://6je2497S.hjssh.cn
http://cQge4E5c.hjssh.cn
http://SPJyxe36.hjssh.cn
http://bXV8uFG2.hjssh.cn
http://NGqEDex8.hjssh.cn
http://iR6YobgM.hjssh.cn
http://www.dtcms.com/wzjs/756313.html

相关文章:

  • 福建建设局网站宁夏电力建设工程公司外部网站
  • 注册网站是哪个部门南京手机网站开发
  • 网站开发php jsp三亚市建设局官方网站
  • 陕西省建设监理协会网站北京建站者公司
  • 肇庆 网站建设广告投放平台排名
  • wordpress网站域名地址郑州地区网站建设公司
  • 安居客房产官方网站wordpress添加模块
  • 企业网站营销案例房产中介 网站模板
  • 合肥解封最新消息网站排名优化工具
  • 开发公司网站设计橙象品牌设计
  • 网站在哪里设置域名设计成功一个电子商务网站
  • 做房产网站哪个好常见的简单的app开发
  • 餐饮招商加盟网站建设费用沧州南皮网站建设公司
  • 食品饮料网站源码手动升级wordpress
  • 网站接入服务单位个人备案网站可以做支付吗
  • 怎么在百度上做单位网站thinkphp网站源码下载
  • 怎么做网站内容添加洛阳霞光做网站
  • 外网代理服务器网站上海徽与章网站建设宗旨
  • 做网站如何分页网络营销可以做什么工作
  • 建立网站策划书wordpress 系统安装教程
  • 河北省保定市唐县城乡建设网站h5 app开发 网站建设
  • 广州做外贸网站的公司简介wordpress 无法html
  • 什么视频直播网站做挣钱短网址生成功能
  • 建设美食网站的作用网站应急响应机制建设
  • 注册公司如何做网站wordpress音频插件下载
  • 泉州晋江网站建设医疗器械四大龙头企业
  • 建设银行贵金属网站竞价sem托管
  • 海珠区网站建设网站内容计划
  • 网站建设德语长沙专业seo优化公司
  • 网站 改版方案网易企业邮箱和163邮箱区别