为 AVPlayer 视频添加字幕

Adding subtitles to AVPlayer video

我正在使用 AVPlayerView 来显示我的 Apps Bundle 目录中的一些本地视频。现在我想添加显示字幕的功能,以提高我的内容的可访问性。

由于我是程序员、电影制作人以及必须创建字幕的人,所以我对任何字幕格式和解决方案持开放态度。我发现了一些常见的格式(.srt.scc),但是,我想知道如何使用 "programmatically" 使用 AVPlayer 来处理它们。

我将视频初始化为:

let myVideoPlayer = AVQueuePlayer(url: URL(fileURLWithPath: "/myPath"))

例如,如果您在 QuickTime 中播放带字幕的视频,将两个文件(字幕和视频)放在同一目录中就足够了。我找不到任何提示或解决方案,例如将字幕文件-url 添加到 AVPlayer,这是我期望的。 好像不是这样的做法?

Other threads 提到 AVPlayers closedCaptionDisplayEnabledClosed Caption 轨道配合良好。但这又让我想到了这个问题:如何使用 AVPlayer 从单独的文件(如 .srt、.scc)显示字幕?

我最终采用了以下解决方法:将我的 material 从 Final Cut Pro X 导出为 .m4v,使用 SRT Edit Pro 手动创建字幕,然后使用 [=12] 将它们添加到视频文件=],所以我最后只有一个文件。这样 AVPlayer / QuickTime 会自动检测字幕轨道。

我使用了 ixany 的建议(将字幕添加到视频文件),但后来我不得不使用以下代码强制 AVPlayer 显示字幕:

let playerItem = AVPlayerItem(asset: asset)
if let group = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: .legible) {
    let locale = Locale(identifier: "en-EN")
    let options = AVMediaSelectionGroup.mediaSelectionOptions(from: group.options, with: locale)
    if let option = options.first {
        playerItem.select(option, in: group)
    }
}

并注意在 模拟器 中进行测试。对我来说,这只适用于真实设备。

这是在 AVPlayer 中添加隐藏式字幕的完美答案。只需将此代码粘贴到您的代码中。 谢谢

let playerItem = AVPlayerItem(asset: asset)
if let group = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: .legible) {
    let locale = Locale(identifier: "en")
    let options = AVMediaSelectionGroup.mediaSelectionOptions(from: group.options, with: locale)
    if let option = options.first {
        playerItem.select(option, in: group)
    }
}