0Pricing
Swift Academy · Урок

AVAsset и композиция

Исследуйте и объединяйте медиадорожки.

«AVAsset и композиция» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 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 и композиция» бесплатный?

Да — полный текст урока «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 включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Воспроизведение медиа с AVPlayer
  2. Запись аудио
  3. AVAsset и композиция
  4. Встраивание проигрывателей в SwiftUI
← Назад к Swift Academy