AVAsset และ Composition
ตรวจสอบและรวมแทร็กสื่อ
AVAsset และ Composition เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
AVAsset แทนสื่อ
AVAsset ใช้จำลองสื่อที่มีการกำหนดเวลา เช่น แทร็ก ระยะเวลา และข้อมูลเมตา โดยไม่ผูกกับการเล่นโดยตรง จึงเป็นพื้นฐานของการตัดต่อ
import AVFoundation
let asset = AVURLAsset(url: fileURL)การโหลดคุณสมบัติแบบไม่พร้อมกัน
คุณสมบัติของแอสเซ็ตจะโหลดเมื่อจำเป็น ใช้ API แบบไม่พร้อมกัน load(_:) เพื่อดึงข้อมูลระยะเวลาหรือแทร็กโดยไม่บล็อกการทำงาน
let duration = try await asset.load(.duration)
let tracks = try await asset.load(.tracks)แทร็ก
แอสเซ็ตมี AVAssetTrack หลายรายการ โดยแต่ละรายการเก็บสื่อประเภทเดียว เช่น วิดีโอ เสียง หรือคำบรรยาย คุณสามารถตรวจสอบและนำแทร็กเหล่านี้กลับมาใช้เมื่อตัดต่อ
let videoTracks = try await asset.loadTracks(withMediaType: .video)
let audioTracks = try await asset.loadTracks(withMediaType: .audio)AVMutableComposition
AVMutableComposition คือแอสเซ็ตที่แก้ไขได้ ซึ่งคุณสร้างขึ้นโดยแทรกช่วงเวลาจากแอสเซ็ตอื่น นี่คือแกนหลักของการตัดและการต่อคลิป
let composition = AVMutableComposition()การเพิ่มแทร็กให้กับ composition
สร้างแทร็กที่แก้ไขได้สำหรับสื่อแต่ละประเภท โดยระบุประเภทและรหัสแทร็ก
let videoTrack = composition.addMutableTrack(
withMediaType: .video,
preferredTrackID: kCMPersistentTrackID_Invalid)การแทรกช่วงเวลา
คัดลอกส่วนหนึ่งจากแทร็กต้นทางไปยังแทร็กใน composition ด้วย insertTimeRange พร้อมเลือกตำแหน่งที่จะวางบนไทม์ไลน์
let range = CMTimeRange(start: .zero, duration: try await asset.load(.duration))
try videoTrack?.insertTimeRange(range, of: sourceTrack, at: .zero)การตัดคลิป
แทรกเพียงบางส่วนของต้นทางโดยระบุช่วงย่อย ซึ่งประกอบด้วยจุดเริ่มต้นและระยะเวลาที่สั้นลง เพื่อใช้ตัดคลิป
let clip = CMTimeRange(
start: CMTime(seconds: 5, preferredTimescale: 600),
duration: CMTime(seconds: 10, preferredTimescale: 600))
try videoTrack?.insertTimeRange(clip, of: sourceTrack, at: .zero)การต่อคลิปหลายรายการ
ต่อคลิปเข้าด้วยกันจากต้นจนจบ โดยแทรกแต่ละคลิปที่ระยะเวลาปัจจุบันของ composition เพื่อสร้างไทม์ไลน์ต่อเนื่องเพียงชุดเดียว
var cursor = CMTime.zero
for src in sourceTracks {
let r = CMTimeRange(start: .zero, duration: src.timeRange.duration)
try videoTrack?.insertTimeRange(r, of: src, at: cursor)
cursor = cursor + r.duration
}composition วิดีโอสำหรับเอฟเฟกต์
สำหรับการแปลง การซ้อนเลเยอร์ หรือการเปลี่ยนฉาก ให้ใช้ composition ร่วมกับ AVMutableVideoComposition ซึ่งกำหนดคำสั่งสำหรับแต่ละช่วงเวลา
let videoComposition = AVMutableVideoComposition()
videoComposition.frameDuration = CMTime(value: 1, timescale: 30)การส่งออกผลลัพธ์
เรนเดอร์ composition ลงในไฟล์ด้วย AVAssetExportSession โดยเลือกค่าที่ตั้งไว้ล่วงหน้าและ URL ปลายทาง
let export = AVAssetExportSession(
asset: composition, presetName: AVAssetExportPresetHighestQuality)
export?.outputURL = outputURL
export?.outputFileType = .mp4
await export?.export()การดูตัวอย่างก่อนส่งออก
เนื่องจาก composition เป็น AVAsset อยู่แล้ว คุณจึงห่อหุ้มไว้ใน AVPlayerItem เพื่อดูตัวอย่างการตัดต่อก่อนยืนยันการส่งออกได้
let previewItem = AVPlayerItem(asset: composition)
let player = AVPlayer(playerItem: previewItem)ตรวจสอบความเข้าใจอย่างรวดเร็ว: composition
ทดสอบความเข้าใจเกี่ยวกับ AVAsset และ composition ของคุณ
ทบทวน: AVAsset และ composition
AVAsset ใช้จำลองสื่อ (แทร็ก ระยะเวลา และข้อมูลเมตา) พร้อมการโหลดคุณสมบัติแบบไม่พร้อมกัน ส่วน AVMutableComposition สร้างไทม์ไลน์ที่แก้ไขได้ด้วยการแทรกช่วงเวลาจากแทร็กต้นทาง ทำให้ตัดและต่อคลิปได้
เพิ่ม AVMutableVideoComposition สำหรับเอฟเฟกต์ ดูตัวอย่างโดยห่อหุ้ม composition ไว้ใน AVPlayerItem และเรนเดอร์ด้วย AVAssetExportSession
คำถามที่พบบ่อย
บทเรียน “AVAsset และ Composition” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “AVAsset และ Composition” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “AVAsset และ Composition”
ตรวจสอบและรวมแทร็กสื่อ คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “AVAsset และ Composition” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเล่นสื่อด้วย AVPlayer
- การบันทึกเสียง
- AVAsset และ Composition
- การฝังตัวเล่นใน SwiftUI