{"$schema": "https://raw.githubusercontent.com/guitaripod/wwdc-sessions/master/schema/transcript.schema.json", "id": "wwdc2026-256", "language": "eng", "source": "https://developer.apple.com/videos/play/wwdc2026/256", "wordCount": 1378, "segments": [{"start": 7.0, "text": "Hi, I'm James and I'm an engineer on the AVFoundation team."}, {"start": 11.0, "text": "I love to travel, so today,"}, {"start": 14.0, "text": "I'll take you on a trip to explore a couple of features related to subtitles."}, {"start": 18.0, "text": "People use subtitles for many reasons."}, {"start": 21.0, "text": "Subtitles are vital for people who are deaf or hard of hearing,"}, {"start": 25.0, "text": "or who have other accessibility needs."}, {"start": 28.0, "text": "They need subtitles to understand the content."}, {"start": 31.0, "text": "Some people read subtitles to assist in understanding the spoken dialogue."}, {"start": 37.0, "text": "I use subtitles when I physically can't hear the audio,"}, {"start": 40.0, "text": "like when I'm in a busy airport."}, {"start": 43.0, "text": "Apple AI-generated subtitles can be created live,"}, {"start": 47.0, "text": "locally on the device as the media plays."}, {"start": 51.0, "text": "In this video, first,"}, {"start": 53.0, "text": "I'll show you how the Apple AI-generated subtitles appear in your app."}, {"start": 58.0, "text": "Afterwards, I'll show the subtitle style preview feature"}, {"start": 62.0, "text": "that lets people customize subtitles while playing video."}, {"start": 66.0, "text": "Next, I'll show how media assets are authored."}, {"start": 70.0, "text": "The media creation journey usually begins with filming"}, {"start": 74.0, "text": "and editing the Video and Audio content."}, {"start": 77.0, "text": "Then, subtitles, text that represents spoken words in the audio,"}, {"start": 82.0, "text": "are created manually."}, {"start": 84.0, "text": "Later in this video, I'll refer to such subtitles as Authored subtitles."}, {"start": 90.0, "text": "The content author can create multiple subtitles,"}, {"start": 93.0, "text": "each for one particular language."}, {"start": 96.0, "text": "Also, they can create multiple audio languages."}, {"start": 99.0, "text": "The final media contains the Video, Audio and Authored subtitles all together."}, {"start": 106.0, "text": "Even content with multiple audio and subtitle languages"}, {"start": 110.0, "text": "might not have a language the viewer understands."}, {"start": 114.0, "text": "People can have their device create generated subtitles to help fill the gap"}, {"start": 119.0, "text": "when the original content doesn't have the subtitle language they need."}, {"start": 124.0, "text": "This enables more people to access and experience the content."}, {"start": 130.0, "text": "Next, this is how generated subtitles are created."}, {"start": 134.0, "text": "There are two use cases for generated subtitles."}, {"start": 137.0, "text": "In the first use case, subtitles are generated from audio."}, {"start": 142.0, "text": "The source audio goes into the on-device Speech-To-Text model"}, {"start": 147.0, "text": "and subtitles are created."}, {"start": 150.0, "text": "This is called Speech transcription."}, {"start": 153.0, "text": "Second, for language translation,"}, {"start": 156.0, "text": "subtitles are generated from other subtitles."}, {"start": 160.0, "text": "The source subtitles, English in this case,"}, {"start": 163.0, "text": "go into the on-device translation model."}, {"start": 166.0, "text": "New subtitles in a different language are created, Italian, for example."}, {"start": 171.0, "text": "This is called Language translation."}, {"start": 174.0, "text": "Generated subtitles provide additional languages."}, {"start": 178.0, "text": "The authored subtitles are preferred and remain unchanged."}, {"start": 183.0, "text": "The good news is that you don't need to implement anything"}, {"start": 186.0, "text": "to turn on generated subtitles."}, {"start": 189.0, "text": "They're available automatically during video playback."}, {"start": 194.0, "text": "Generated subtitles are provided for many playback scenarios."}, {"start": 198.0, "text": "Subtitles can be generated for HTTP live streaming content,"}, {"start": 202.0, "text": "including Live streams, like TV channels."}, {"start": 206.0, "text": "It also includes Video on demand movies and shows,"}, {"start": 209.0, "text": "including travel videos and live events, like sports."}, {"start": 215.0, "text": "File-based content is also supported,"}, {"start": 218.0, "text": "like app-bundled videos or downloaded media."}, {"start": 223.0, "text": "Several content types are supported."}, {"start": 226.0, "text": "Professional content, like movies and series, is supported."}, {"start": 231.0, "text": "So is customer-created content,"}, {"start": 234.0, "text": "like camera capture from the iPhone and social media videos."}, {"start": 239.0, "text": "Now, I'll show you the supported devices and languages."}, {"start": 243.0, "text": "Generated subtitles are available on multiple devices."}, {"start": 247.0, "text": "This table shows the supported devices and languages."}, {"start": 251.0, "text": "Starting in iOS and macOS 27,"}, {"start": 254.0, "text": "English subtitles can be generated from English audio."}, {"start": 258.0, "text": "This is also supported on tvOS and visionOS 27."}, {"start": 263.0, "text": "Also, multiple subtitle languages"}, {"start": 266.0, "text": "can be generated from English subtitles on iOS and macOS."}, {"start": 271.0, "text": "Now that you know about generated subtitles,"}, {"start": 273.0, "text": "I'll talk about how to present them in your app."}, {"start": 277.0, "text": "It's important to provide subtitle selection UI during video playback."}, {"start": 282.0, "text": "Here are the options for your app."}, {"start": 285.0, "text": "This is the AVPlayerViewController UI on iOS."}, {"start": 289.0, "text": "It fully implements subtitle selection and player controls."}, {"start": 293.0, "text": "You don't need to do anything extra."}, {"start": 296.0, "text": "AVPlayerView on macOS provides similar functionality."}, {"start": 301.0, "text": "This is AVLegibleMediaOptionsMenuController."}, {"start": 305.0, "text": "It presents subtitle selection controls and implements the behavior."}, {"start": 310.0, "text": "It's a good choice when you want to add subtitle selection UI"}, {"start": 313.0, "text": "to your existing player UI, since it does not provide player controls."}, {"start": 319.0, "text": "Or, you can implement custom controls for media selection"}, {"start": 323.0, "text": "to match the style of other controls in your app."}, {"start": 327.0, "text": "Like the ones I created here in my app."}, {"start": 330.0, "text": "Generated subtitles make the content in your app more accessible."}, {"start": 335.0, "text": "More people can understand and enjoy the content."}, {"start": 339.0, "text": "Now I'll show you another subtitle feature that makes your app even more accessible."}, {"start": 345.0, "text": "Subtitles help make content accessible,"}, {"start": 347.0, "text": "but the presentation of the subtitles is also important."}, {"start": 351.0, "text": "The Settings app has let people select"}, {"start": 354.0, "text": "and change subtitle and caption styling for many years."}, {"start": 358.0, "text": "There are a few built-in styles,"}, {"start": 360.0, "text": "and people can create custom styles to fit their needs."}, {"start": 364.0, "text": "I've created a custom style called Bold Yellow."}, {"start": 368.0, "text": "It has yellow text with a little extra border"}, {"start": 371.0, "text": "to make it easier for me to read."}, {"start": 373.0, "text": "I can select the style in the Settings app,"}, {"start": 376.0, "text": "but it would be easier, and more accessible,"}, {"start": 379.0, "text": "to change the style while watching a video."}, {"start": 382.0, "text": "That's exactly what the subtitle style preview does."}, {"start": 386.0, "text": "I'm watching a video and I have the Style menu open."}, {"start": 390.0, "text": "I have the same styles available that were in the Settings app."}, {"start": 394.0, "text": "The subtitle style can now be changed right from the menu"}, {"start": 398.0, "text": "where you select subtitles during video playback."}, {"start": 401.0, "text": "Not only that, but a preview of the style is shown to make selection easier."}, {"start": 407.0, "text": "This is what my Bold Yellow style looks like in a video."}, {"start": 411.0, "text": "There are several ways"}, {"start": 412.0, "text": "to implement the subtitle style preview feature in your app."}, {"start": 416.0, "text": "First, this is AVPlayerViewController on iOS."}, {"start": 420.0, "text": "It fully implements the subtitle style preview and player controls."}, {"start": 425.0, "text": "AVPlayerView on macOS provides similar functionality."}, {"start": 430.0, "text": "This is AVLegibleMediaOptionsMenuController."}, {"start": 434.0, "text": "It presents subtitle style preview controls and implements the behavior."}, {"start": 439.0, "text": "It's a good choice when you want to add the subtitle preview"}, {"start": 442.0, "text": "to your existing player UI."}, {"start": 445.0, "text": "Next, AVPlayerLayer has an API to show the style preview."}, {"start": 449.0, "text": "I'll show you how to implement it in a moment."}, {"start": 452.0, "text": "Also, AVCaptionRenderer can provide the style preview,"}, {"start": 457.0, "text": "but you are responsible for rendering it."}, {"start": 459.0, "text": "Now, here's the AVPlayerLayer implementation."}, {"start": 463.0, "text": "Each subtitle style in the system is assigned a profile ID."}, {"start": 468.0, "text": "First, fetch all of the styles by their profile IDs."}, {"start": 472.0, "text": "Populate your UI with the names for the styles."}, {"start": 476.0, "text": "When a style is selected, show the stylized preview."}, {"start": 480.0, "text": "New subtitles are shown using the specified style."}, {"start": 484.0, "text": "Any existing subtitles are automatically hidden"}, {"start": 487.0, "text": "so they don't interfere with the preview."}, {"start": 490.0, "text": "Pass nil for the text parameter."}, {"start": 493.0, "text": "In that case, localized system text is shown."}, {"start": 496.0, "text": "Use the position parameter to avoid any UI controls."}, {"start": 500.0, "text": "This is an offset from the default location of the preview text."}, {"start": 505.0, "text": "Call this function again to show a different style."}, {"start": 508.0, "text": "You can call it as many times as needed."}, {"start": 512.0, "text": "Stop the preview when selection is done."}, {"start": 515.0, "text": "This removes the preview text"}, {"start": 517.0, "text": "and restores any existing subtitles that are active."}, {"start": 521.0, "text": "Set the chosen style."}, {"start": 523.0, "text": "It will be used for all subtitles on the system."}, {"start": 527.0, "text": "You can build this feature in your app to let people quickly choose subtitles"}, {"start": 531.0, "text": "that are easier to read while watching a video."}, {"start": 535.0, "text": "Now, I will show you both of these subtitle features together."}, {"start": 539.0, "text": "I'm planning a camping trip to Italy."}, {"start": 542.0, "text": "I'm going to watch this camping video for some inspiration."}, {"start": 546.0, "text": "It's has English subtitles, but I want Italian subtitles,"}, {"start": 550.0, "text": "so I can brush up on my Italian."}, {"start": 553.0, "text": "To change the language, I'll open the Subtitles menu,"}, {"start": 556.0, "text": "then click Language."}, {"start": 559.0, "text": "Several subtitles are available."}, {"start": 561.0, "text": "Some are authored and some generated."}, {"start": 564.0, "text": "The generated options are marked with a sparkle symbol"}, {"start": 568.0, "text": "and the word Translated."}, {"start": 570.0, "text": "I'll pick the Italian generated subtitles."}, {"start": 574.0, "text": "Now I have Italian subtitles in my video."}, {"start": 583.0, "text": "I'll change the style to make them easier to read."}, {"start": 587.0, "text": "First, I'll open the Subtitles menu, then select Style."}, {"start": 591.0, "text": "I'll try Large Text."}, {"start": 594.0, "text": "The existing subtitles have been replaced with a placeholder message,"}, {"start": 598.0, "text": "in Italian, using the Large Text styling."}, {"start": 602.0, "text": "The text is larger, but let me try my custom style."}, {"start": 609.0, "text": "Oh, I like that."}, {"start": 611.0, "text": "I'll dismiss the menu."}, {"start": 614.0, "text": "The subtitles are now using my custom style."}, {"start": 617.0, "text": "This trip is going to be amazing."}, {"start": 620.0, "text": "Before I go, here are your next steps."}, {"start": 623.0, "text": "Now that you know about the generated subtitles feature,"}, {"start": 626.0, "text": "I encourage you to go explore it."}, {"start": 629.0, "text": "For example, watch some travel videos and turn on generated subtitles."}, {"start": 634.0, "text": "Also, make sure your app has UI to select subtitles."}, {"start": 638.0, "text": "Implement the subtitle style preview too."}, {"start": 641.0, "text": "People appreciate this accessibility feature"}, {"start": 644.0, "text": "when they need to change the style of their subtitles."}, {"start": 648.0, "text": "Thank you for watching."}, {"start": 649.0, "text": "I have to go catch a plane to Italy."}, {"start": 651.0, "text": "Ciao ciao."}]}