AVAsset والتركيب
افحص مسارات الوسائط واجمع بينها.
AVAsset والتركيب درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
يمثّل AVAsset الوسائط
يمثّل AVAsset جزءًا من الوسائط المعتمدة على الزمن، بما في ذلك مساراته ومدته وبياناته الوصفية، من دون أن يفرض تشغيله. وهو الأساس الذي يُبنى عليه التحرير.
import AVFoundation
let asset = AVURLAsset(url: fileURL)تحميل الخصائص بشكل غير متزامن
تُحمّل خصائص الأصل عند الحاجة. استخدم واجهة برمجة التطبيقات غير المتزامنة 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()إضافة مسارات إلى التركيب
أنشئ مسارًا قابلًا للتغيير لكل نوع من الوسائط، مع تحديد نوعه ومعرّف المسار.
let videoTrack = composition.addMutableTrack(
withMediaType: .video,
preferredTrackID: kCMPersistentTrackID_Invalid)إدراج النطاقات الزمنية
انسخ مقطعًا من مسار مصدر إلى مسار التركيب باستخدام 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)ضم عدة مقاطع
ألحِق المقاطع واحدًا تلو الآخر بإدراج كل مقطع عند مدة التركيب الحالية، وبذلك تنشئ خطًا زمنيًا واحدًا متصلًا.
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
}تركيب الفيديو للتأثيرات
للتحويلات أو الطبقات أو الانتقالات، اقرن التركيب بـ AVMutableVideoComposition الذي يحدد التعليمات لكل نطاق زمني.
let videoComposition = AVMutableVideoComposition()
videoComposition.frameDuration = CMTime(value: 1, timescale: 30)تصدير النتيجة
صيّر التركيب إلى ملف باستخدام AVAssetExportSession، مع اختيار إعداد مسبق وعنوان URL للمخرجات.
let export = AVAssetExportSession(
asset: composition, presetName: AVAssetExportPresetHighestQuality)
export?.outputURL = outputURL
export?.outputFileType = .mp4
await export?.export()معاينة قبل التصدير
بما أن التركيب هو نفسه AVAsset، يمكنك تغليفه داخل AVPlayerItem ومعاينة التعديل قبل اعتماد التصدير.
let previewItem = AVPlayerItem(asset: composition)
let player = AVPlayer(playerItem: previewItem)تحقق سريع: التركيب
اختبر مدى فهمك لـ AVAsset والتركيب.
مراجعة: AVAsset والتركيب
يمثّل AVAsset الوسائط، بما في ذلك المسارات والمدة والبيانات الوصفية، مع تحميل خصائصها بشكل غير متزامن. وينشئ AVMutableComposition خطوطًا زمنية قابلة للتحرير عبر إدراج نطاقات زمنية من مسارات المصدر، مما يتيح قص المقاطع وضمّها.
أضف AVMutableVideoComposition للتأثيرات، وعاين النتيجة بتغليف التركيب داخل AVPlayerItem، ثم صَيّرها باستخدام AVAssetExportSession.
الأسئلة الشائعة
هل درس «AVAsset والتركيب» مجاني؟
نعم — نص درس «AVAsset والتركيب» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «AVAsset والتركيب»؟
افحص مسارات الوسائط واجمع بينها. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «AVAsset والتركيب»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تشغيل الوسائط باستخدام AVPlayer
- تسجيل الصوت
- AVAsset والتركيب
- تضمين المشغلات في SwiftUI