WWDC Quick Look 💓 By SwiftGGTeam
生成字幕と字幕スタイルを知る

生成字幕と字幕スタイルを知る

元の動画を見る

ハイライト

Apple は iOS 27、macOS 27、tvOS 27、visionOS 27 で、オンデバイスの AI 生成字幕を導入しました。動画再生中に、システムは音声を自動的に字幕へ書き起こしたり、既存の字幕を別の言語へ翻訳したりできます。開発者が AI 関連コードを書く必要はありません。さらに新しい字幕スタイルのリアルタイムプレビュー API により、ユーザーは再生画面の中で字幕スタイルを切り替え、その場で確認できます。

主要内容

字幕の課題:コンテンツはあるが、言語が合わない

あなたはグローバルユーザー向けの動画 App を作っています。しかし現実的な問題があります。動画には1つの言語の字幕しかないか、字幕そのものがないかもしれません。ユーザーが音声を理解できなければ、視聴を諦めてしまいます。

これまでこの問題を解決するには、制作段階で多言語字幕を手作業で追加するか、App にサードパーティの音声認識や翻訳サービスを組み込む必要がありました。前者はコストと時間がかかり、後者はサーバーが必要で、プライバシーの懸念もあり、字幕レンダリングも自分で処理しなければなりませんでした。

Apple は今回、オンデバイス AI モデルを AVFoundation の再生パイプラインに直接組み込みました。

AI 生成字幕の2つの動作モード

(02:14) システムは字幕を生成する2つの方法を提供します。

音声書き起こし(Speech transcription):ソース音声をオンデバイスの Speech-To-Text モデルに入力し、字幕をリアルタイムに生成します。元動画に字幕がない場合に適しています。

言語翻訳(Language translation):英語字幕などのソース字幕をオンデバイスの翻訳モデルに入力し、イタリア語など別の言語の字幕を生成します。動画には字幕があるものの、対象言語がない場合に適しています。

どちらの方式もデバイス上でローカルに完結します。ネットワークリクエストは不要で、データがデバイス外へ出ることもありません。

ゼロコードで導入。ただし人が作った字幕が常に優先

(03:03) 一番よい知らせは、開発者が何もしなくてよいことです。ユーザーが動画再生中に AI 生成字幕の選択肢を選ぶと、システムが自動的に処理します。

システムはコンテンツ制作者が用意した人手の字幕(authored subtitles)を優先します。人手の字幕にユーザーが必要とする言語がない場合だけ、AI 生成字幕へフォールバックします。人手の字幕の内容やタイミングは変更されません。

対応デバイスと利用シーン

(04:03) iOS 27 と macOS 27 以降では、英語音声から英語字幕を生成できます。tvOS 27 と visionOS 27 も同じ機能に対応します。英語字幕から他の言語へ翻訳する多言語字幕翻訳は、iOS と macOS で利用できます。

対応する再生シーンは次のとおりです。

  • テレビチャンネルなどの HLS ライブストリーム
  • 映画、ドラマ、旅行動画、スポーツイベントなどのオンデマンド動画
  • App 内蔵動画やダウンロード済みメディアなどのローカルファイル

コンテンツ種別にも制限はありません。プロ制作のコンテンツも、iPhone で撮影した動画やソーシャルメディア動画のようなユーザー生成コンテンツも対応します。

字幕スタイルプレビューが設定 App から再生画面へ

(05:45) 以前、ユーザーが字幕スタイルを変更したい場合、App を離れて「設定 > アクセシビリティ」に移動し、スタイルを調整してから戻って効果を確認する必要がありました。流れが分断され、体験はよくありませんでした。

今は再生画面の字幕メニュー内で直接スタイルを切り替え、リアルタイムにプレビューできます。システムにはいくつかのプリセットスタイルが組み込まれており、ユーザーは枠線付きの太字黄色のようなカスタムスタイルも作れます。

AI 生成字幕はメニュー内で Sparkle アイコンによって示され、翻訳で生成された字幕にはさらに “Translated” ラベルが付きます。ユーザーは簡単に区別できます。

詳細

字幕選択 UI の3つの実装方法

(04:37) Apple は字幕選択を組み込む3つの方法を提供しています。統合の複雑さが低い順に並べると次のとおりです。

AVPlayerViewController(iOS)/ AVPlayerView(macOS):字幕選択とプレイヤーコントロールを含む完全な UI を備えています。AI 生成字幕とスタイルプレビューはゼロコードで使えます。

AVLegibleMediaOptionsMenuController:字幕選択コントロールだけを提供し、プレイヤーコントロールは含みません。既にカスタムプレイヤー UI を持つ App に向いています。

カスタムコントロール:メディア選択 UI を完全に自前で実装し、すべてのロジックを手動で処理します。

字幕スタイルプレビューの API 実装

(07:25) カスタムプレイヤーを使う開発者向けに、AVPlayerLayer はスタイルプレビューを直接表示する API を提供します。

各字幕スタイルには、システム内で profile ID があります。実装手順は4つです。

import AVFoundation
import MediaAccessibility

// 1. システム内のすべての字幕スタイル profile ID を取得する
func updateProfileList() {
    subtitleStyleProfileIDs = MACaptionAppearanceCopyProfileIDs() as? [String] ?? []
}

// 2. ユーザーがスタイルを選択したとき、プレイヤー上にプレビューを表示する
func showPreviewStyle(subtitleStyleProfileID: String) {
    // text に nil を渡すと、システムの既定のローカライズ済みプレビューテキストを表示する
    // position は既定位置からのオフセットで、UI コントロールを避けるために使う
    playerLayer.setCaptionPreviewProfileID(subtitleStyleProfileID, position: .zero, text: nil)
}

// 3. ユーザーが選択を確定したら、プレビューを停止する
func stopPreviewStyle() {
    // プレビューテキストを取り除き、元の有効な字幕に戻す
    playerLayer.stopShowingCaptionPreview()
}

// 4. 選択したスタイルをシステムの有効なスタイルに設定する
func setSubtitleStyle(subtitleStyleProfileID: CFString) {
    // これは、この機能に対応するデバイス上のすべての App に影響する
    MACaptionAppearanceSetActiveProfileID(subtitleStyleProfileID)
}

重要な点:

  • MACaptionAppearanceCopyProfileIDs() は、システムプリセットとユーザー定義を含むすべてのスタイル ID を CFArray として返します。Swift の [String] へブリッジする必要があります。
  • setCaptionPreviewProfileID(_:position:text:) を呼ぶと、システムは動画内の現在の字幕を自動的に隠し、プレビューテキストを表示します。
  • positionCGPoint オフセットです。プレイヤー下部にコントロールバーがある場合、Y 軸に負の値を与えるとプレビューテキストの重なりを避けられます。
  • textnil を渡すと、システムは “Subtitle Preview” などのローカライズ済み既定プレビューテキストを表示します。
  • stopShowingCaptionPreview() はプレビューテキストを取り除き、元の字幕表示を復元します。
  • MACaptionAppearanceSetActiveProfileID() はグローバル設定で、システム全体の字幕スタイルに影響します。ユーザーが明確に確定した後だけ呼び出すべきです。

完全なユーザーシナリオ

(08:55) 発表者は、英語のキャンプ動画を見ながら語学練習のためにイタリア語字幕を使いたい、という実際のシナリオを示しました。

ユーザーは字幕メニューを開き、Language を選び、人手の字幕と AI 生成字幕を含む複数の選択肢を確認し、Translated と表示されたイタリア語の生成字幕を選びます。字幕はすぐにイタリア語で表示されます。

続いて Style メニューを開き、Large Text を選ぶと、より大きなフォントのプレビューが表示されます。さらにカスタムスタイルを選んで確定すると、字幕は新しいスタイルで表示されます。

この流れ全体は再生画面から離れずに完了し、開発者が AI 関連コードを書く必要もありません。

実践アイデア

1. 教育 App に多言語字幕サポートを追加する

  • 作るもの:オンライン講座動画が、学生の母語字幕を自動的にサポートするようにします。
  • 価値がある理由:AI 翻訳字幕によって講座コンテンツを英語非母語話者にも届けられます。オンデバイス処理なので追加のサーバーコストもありません。
  • 始め方:動画プレイヤーが AVPlayerViewController を使っているか、AVLegibleMediaOptionsMenuController を組み込んでいることを確認します。字幕メニューに AI 生成オプションが自動的に表示されます。

2. カスタムプレイヤーにスタイルプレビューを統合する

  • 作るもの:プレイヤーの設定パネルに「字幕スタイル」オプションを追加し、ユーザーが視聴しながら調整できるようにします。
  • 価値がある理由:以前は App を離れてシステム設定でスタイルを変更する必要がありました。今は再生画面内で直接完了でき、体験がより連続的になります。
  • 始め方MACaptionAppearanceCopyProfileIDs() でスタイル一覧を取得し、AVPlayerLayer.setCaptionPreviewProfileID() でリアルタイムプレビューを実装します。

3. ライブ配信 App のアクセシビリティを補完する

  • 作るもの:スポーツイベントやニュース配信などのリアルタイムコンテンツで AI 生成字幕をサポートします。
  • 価値がある理由:ライブコンテンツには事前作成字幕がないことが多く、AI 音声書き起こしがリアルタイムに字幕を生成し、聴覚に障害のあるユーザーの理解を助けます。HLS ライブストリームは直接対応します。
  • 始め方:ライブプレイヤーが AVPlayer ベースかどうか確認します。そうであれば、生成字幕機能は自動的に有効になります。

4. 字幕メニューで AI 生成コンテンツを明示する

  • 作るもの:システム提供の Sparkle アイコンと “Translated” ラベルを使い、どの字幕が AI 生成かユーザーに明確に伝えます。
  • 価値がある理由:透明性は信頼につながります。ユーザーは AI 字幕が人手の字幕ほど正確ではない可能性を理解し、期待値を調整できます。
  • 始め方:システム提供の AVLegibleMediaOptionsMenuController を使います。これらの表示は追加コードなしで自動的に出ます。

関連セッション

  • HTTP Live Streaming の新機能 - HLS ライブストリームは AI 生成字幕の中核的な利用シーンの1つであり、HLS の新機能を知ることでストリーミング再生体験を最適化できます
  • アクセシビリティの新機能 - 字幕はアクセシビリティの重要な一部です。他の支援機能と組み合わせることで、より完全なアクセシブル体験を構築できます
  • SwiftUI のコンテナビュー pattern を探る - SwiftUI でカスタムプレイヤー UI を構築している場合、コンテナビュー pattern はプレイヤーコントロールと字幕メニューの整理に役立ちます
  • AVFoundation の新機能 - AVFoundation 全体の更新と、再生フレームワークの最新機能の概要

コメント

GitHub Issues · utterances