How to download Apple event videos in 4K with Dolby Atmos
First visit the Apple Events web page and find the link to the stream you want to download, e.g. the link for the iPhone 14 event from September 2022 looks like this:
https://events-delivery.apple.com/2807skttevpekgjkgcyolyxgkexyahqp/m3u8/vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj.m3u8
Now you need to install the yt-dlp command line utility, in Terminal type:
brew install yt-dlp
yt-dlp
is a fork of the youtube-dl
utility that has better compatibility. Although these utilities are primarily designed for Youtube both work with many other kinds of streams.
Next, you need to view the audio and video formats available in the stream, using the uppercase -F
argument:
% yt-dlp -F 'https://events-delivery.apple.com/2807skttevpekgjkgcyolyxgkexyahqp/m3u8/vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj.m3u8'
[generic] Extracting URL: https://events-delivery.apple.com/2807skttevpekgjkgcyolyxgkexyahqp/m3u8/vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj.m3u8
[generic] vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj: Downloading webpage
[generic] vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj: Downloading m3u8 information
[info] Available formats for vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj:
ID EXT RESOLUTION FPS │ TBR PROTO │ VCODEC VBR ACODEC MORE INFO
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
audio-atmos-eac3-640-English mp4 audio only │ m3u8 │ audio only unknown [en] English
audio-atmos-eac3-640-English_Audio_Descriptions mp4 audio only │ m3u8 │ audio only unknown [en] English Audio Descriptions
audio-stereo-aac-128-English mp4 audio only │ m3u8 │ audio only unknown [en] English
audio-stereo-aac-128-English_Audio_Descriptions mp4 audio only │ m3u8 │ audio only unknown [en] English Audio Descriptions
401 mp4 640x360 30 │ 401k m3u8 │ avc1.64001e 401k video only
434 mp4 640x360 30 │ 434k m3u8 │ avc1.64001e 434k video only
911 mp4 640x360 30 │ 912k m3u8 │ avc1.64001e 912k video only
944 mp4 640x360 30 │ 944k m3u8 │ avc1.64001e 944k video only
510 mp4 640x360 30 │ 511k m3u8 │ hvc1.1.6.H120 511k video only
1021 mp4 640x360 30 │ 1021k m3u8 │ hvc1.1.6.H120 1021k video only
835 mp4 960x540 30 │ 836k m3u8 │ avc1.64001f 836k video only
1346 mp4 960x540 30 │ 1346k m3u8 │ avc1.64001f 1346k video only
805 mp4 960x540 30 │ 806k m3u8 │ hvc1.1.6.H120 806k video only
1316 mp4 960x540 30 │ 1316k m3u8 │ hvc1.1.6.H120 1316k video only
1192 mp4 1280x720 30 │ 1193k m3u8 │ avc1.4d401f 1193k video only
1265 mp4 1280x720 30 │ 1266k m3u8 │ avc1.64001f 1266k video only
1703 mp4 1280x720 30 │ 1703k m3u8 │ avc1.4d401f 1703k video only
1776 mp4 1280x720 30 │ 1776k m3u8 │ avc1.64001f 1776k video only
1177 mp4 1280x720 30 │ 1177k m3u8 │ hvc1.1.6.H120 1177k video only
1255 mp4 1280x720 30 │ 1255k m3u8 │ hvc1.1.6.H120 1255k video only
1687 mp4 1280x720 30 │ 1688k m3u8 │ hvc1.1.6.H120 1688k video only
1765 mp4 1280x720 30 │ 1765k m3u8 │ hvc1.1.6.H120 1765k video only
2905 mp4 1920x1080 30 │ 2905k m3u8 │ avc1.640028 2905k video only
3197 mp4 1920x1080 30 │ 3197k m3u8 │ avc1.640028 3197k video only
3415 mp4 1920x1080 30 │ 3416k m3u8 │ avc1.640028 3416k video only
3707 mp4 1920x1080 30 │ 3707k m3u8 │ avc1.640028 3707k video only
2808 mp4 1920x1080 30 │ 2809k m3u8 │ hvc1.1.6.H120 2809k video only
3070 mp4 1920x1080 30 │ 3071k m3u8 │ hvc1.1.6.H120 3071k video only
3319 mp4 1920x1080 30 │ 3319k m3u8 │ hvc1.1.6.H120 3319k video only
3581 mp4 1920x1080 30 │ 3581k m3u8 │ hvc1.1.6.H120 3581k video only
4661 mp4 2560x1440 30 │ 4661k m3u8 │ hvc1.1.6.H150 4661k video only
5171 mp4 2560x1440 30 │ 5172k m3u8 │ hvc1.1.6.H150 5172k video only
8243 mp4 3840x2160 30 │ 8244k m3u8 │ hvc1.1.6.H150 8244k video only
8754 mp4 3840x2160 30 │ 8754k m3u8 │ hvc1.1.6.H150 8754k video only
10729 mp4 3840x2160 30 │ 10729k m3u8 │ hvc1.1.6.H150 10729k video only
11239 mp4 3840x2160 30 │ 11239k m3u8 │ hvc1.1.6.H150 11239k video only
We’ll download the best audio and video streams available, which is the atmos and highest bitrate 4k. We need to look at the first column to find the IDs of these streams and use them with the lowercase -f
argument and +
to combine the streams:
% yt-dlp -f 11239+audio-atmos-eac3-640-English 'https://events-delivery.apple.com/2807skttevpekgjkgcyolyxgkexyahqp/m3u8/vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj.m3u8'
[generic] Extracting URL: https://events-delivery.apple.com/2807skttevpekgjkgcyolyxgkexyahqp/m3u8/vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj.m3u8
[generic] vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj: Downloading webpage
[generic] vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj: Downloading m3u8 information
[info] vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj: Downloading 1 format(s): 11239+audio-atmos-eac3-640-English
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 949
[download] Destination: vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj [vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj].f11239.mp4
[download] 100% of 7.03GiB in 00:10:07 at 11.86MiB/s
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 953
[download] Destination: vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj [vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj].faudio-atmos-eac3-640-English.mp4
[download] 100% of 434.95MiB in 00:04:50 at 1.50MiB/s
[Merger] Merging formats into "vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj [vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj].mp4"
Deleting original file vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj [vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj].f11239.mp4 (pass -k to keep)
Deleting original file vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj [vod_index-bHTtMFcgdqmJGoHoDBPadNWwGwrNevrj].faudio-atmos-eac3-640-English.mp4 (pass -k to keep)
We can monitor the progress of the download and if we don’t like the download size or time it will take we can cancel with ctrl+c and select different streams. The above output was copied when the download was complete, first it downloaded the video, then audio and finally merged them into one at a file size of 8.01GB.
Some improvements you could make is download multiple audio streams to make the file more compatible across different devices or choose an output filename so don’t need to rename afterwards. Please post a comment if you would like to include any of these changes in this article.