为 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 closedCaptionDisplayEnabled
与 Closed 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)
}
}
我正在使用 AVPlayerView
来显示我的 Apps Bundle 目录中的一些本地视频。现在我想添加显示字幕的功能,以提高我的内容的可访问性。
由于我是程序员、电影制作人以及必须创建字幕的人,所以我对任何字幕格式和解决方案持开放态度。我发现了一些常见的格式(.srt
、.scc
),但是,我想知道如何使用 "programmatically" 使用 AVPlayer
来处理它们。
我将视频初始化为:
let myVideoPlayer = AVQueuePlayer(url: URL(fileURLWithPath: "/myPath"))
例如,如果您在 QuickTime 中播放带字幕的视频,将两个文件(字幕和视频)放在同一目录中就足够了。我找不到任何提示或解决方案,例如将字幕文件-url 添加到 AVPlayer
,这是我期望的。 好像不是这样的做法?
Other threads 提到 AVPlayers closedCaptionDisplayEnabled
与 Closed 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)
}
}