Swift Academy · レッスン

AVAssetとコンポジション

メディアトラックを調べて組み合わせます。

レッスン 3/413 ステップ

「AVAssetとコンポジション」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

AVAssetはメディアを表す

AVAsset は、再生方法を決めずに、時間軸を持つメディアの一部とそのトラック、再生時間、メタデータをモデル化します。編集の基盤となるオブジェクトです。

import AVFoundation
let asset = AVURLAsset(url: fileURL)

プロパティを非同期で読み込む

アセットのプロパティは遅延ロードされます。非同期の load(_:) APIを使うと、処理をブロックせずに再生時間やトラックを取得できます。

let duration = try await asset.load(.duration)
let tracks = try await asset.load(.tracks)

トラック

アセットには AVAssetTrack があり、それぞれが1種類のメディア(動画、音声、字幕)を保持します。編集時には、これらのトラックを調査して再利用します。

let videoTracks = try await asset.loadTracks(withMediaType: .video)
let audioTracks = try await asset.loadTracks(withMediaType: .audio)

AVMutableComposition

AVMutableComposition は、ほかのアセットから時間範囲を挿入して構築する編集可能なアセットです。トリミングやクリップの連結の中心となります。

let composition = AVMutableComposition()

コンポジションのトラックを追加する

メディアの種類ごとに可変トラックを作成し、その種類とトラックIDを指定します。

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)

複数のクリップを連結する

現在のコンポジションの再生時間に各クリップを挿入して、クリップを末尾につなげます。これにより、1本の連続したタイムラインを構築できます。

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 でレンダリングします。

無料で開始

AI チューターと学ぶ Swift — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
122
レッスン
409

よくある質問

「AVAssetとコンポジション」レッスンは無料ですか?

はい。「AVAssetとコンポジション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「AVAssetとコンポジション」で何を学びますか?

メディアトラックを調べて組み合わせます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「AVAssetとコンポジション」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. AVPlayerによるメディア再生
  2. 音声の録音
  3. AVAssetとコンポジション
  4. SwiftUIへのプレイヤーの埋め込み
← Swift Academyに戻る