Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.
Ventura ships both a software decoder and an hardware decoder VideoToolbox components.
But at the moment the front facing softwares are enabled only to decode avif images, AV1 in mp4 and mov containers is not enabled yet.
I didn't check whether the hardware decoder is used on Apple Silicon, and if so on which CPU family.
 
AVIF is working in Safari, Finder, and Preview. I used the Netflix samples here to test: http://download.opencontent.netflix.com/?prefix=AV1/Chimera/AVIF/

Ventura ships both a software decoder and an hardware decoder VideoToolbox components.
That means it should work in QuickTime though. Right now QuickTime is a no go.

Safari 16.1 and QuickTime 10.5 won't play back Netflix's AV1 Chimera sample on an M1 with Ventura. VLC will play the 1080p version of Chimera, but at 100% CPU usage.

I had the same results with all test files from http://av1.webmfiles.org. VLC plays them back, but in software. Quicktime, Quick Look, and Safari won't.

iOS 16.1 also will not play back AV1 in .mp4 containers.

I'm somewhat relieved that M1 / M1 Pro actually handles VP9 and AV1 playback with minimal heat/fans/power draw despite not having true hardware decode. Not sure how they manage it! Was super hesitant and pissed when they came out and didn't announce that support.
VP9 isn't bad for battery use, but trying out some AV1 1080p content today, I was seeing 77-100% CPU usage (with my activity monitor running 0%-800%) in VLC.
 
No it doesn't mean it should work in QuickTime. Some components are disabled and not loaded by default.
 
  • Like
Reactions: Piipperi
Since M2 got a significant improvement in the media engine over M1, I could see Apple turning on AV1 acceleration in hardware for M2 without including M1. OTOH, even if it’s already there in both M1 and M2, there’s no guarantee Apple would activate it for either of them.

I still remember iPhone 6 with A8 got HEVC encoding for FaceTime but then Apple just stopped talking about it completely. Ultimately later when Apple went full tilt with HEVC, Apple left out A8.

Anyhow, I’ll be buying an M2 Mac mini (or maybe an M2 Pro Mac mini if released). We will see if it ever gets official AV1 support.
 
Since M2 got a significant improvement in the media engine over M1, I could see Apple turning on AV1 acceleration in hardware for M2 without including M1. OTOH, even if it’s already there in both M1 and M2, there’s no guarantee Apple would activate it for either of them.

I still remember iPhone 6 with A8 got HEVC encoding for FaceTime but then Apple just stopped talking about it completely. Ultimately later when Apple went full tilt with HEVC, Apple left out A8.

Anyhow, I’ll be buying an M2 Mac mini (or maybe an M2 Pro Mac mini if released). We will see if it ever gets official AV1 support.
It's not about official support. If there's no HW accelerator, it'll just use SW for AV1. That's likely how FaceTime worked as well on the iPhone 6, because if you encoded high bitrate 1080p60 footage on a software encoder with the performance of the A8, your battery life would be really poor and it may not be even able to encode it in real time. FaceTime is low bitrate and low bitrates take nothing to really encode.
 
  • Like
Reactions: Botts85
It's not about official support. If there's no HW accelerator, it'll just use SW for AV1. That's likely how FaceTime worked as well on the iPhone 6, because if you encoded high bitrate 1080p60 footage on a software encoder with the performance of the A8, your battery life would be really poor and it may not be even able to encode it in real time. FaceTime is low bitrate and low bitrates take nothing to really encode.
If there is no official support, there would be no hardware support at all because Apple doesn't expose the functionality to 3rd party applications.

In terms of FaceTime, even at those bitrates the iPhone would have battery life issues with software encoding via HEVC, and the iPhone would get hot, but it didn't have either of those issues. I'm guessing that likely the hardware was there, but only for reduced resolutions and only exposed for FaceTime. There was no need to use HEVC in software, because hardware h.264 was already supported and the most commonly used format, since everything before iPhone 6 was h.264.

I suspect the iPhone 6 A8 was excluded later from official HEVC support because its (presumed) hardware support was too low a resolution, only appropriate for FaceTime. Official HEVC support starting with A9 specified 4K.
 
Last edited:
What's most perplexing to me is Apple hiding any information on if these chips support AV1 or not! (same for VP9 I suppose).
 
  • Like
Reactions: Populus
What's most perplexing to me is Apple hiding any information on if these chips support AV1 or not! (same for VP9 I suppose).
Yeah it doesn't make any sense at all, but at the end of the day it is what it is, it's only a bunch of us discussing this on a forum.
 
What's most perplexing to me is Apple hiding any information on if these chips support AV1 or not! (same for VP9 I suppose).
Apple never exactly hid it, since Big Sur added VP9 decoding support for intel chips before M1 came out. For some reason Apple just really dislikes open standards like Opus, VP9, AV1, etc. They're only using them as needed when they really feel pressurised to support them (which is why you can't play VP9 videos outside of Safari without the use of 3rd party apps, and they had to add VP9 support so people wouldn't switch to Chrome to play 4K YT)
 
Apple never exactly hid it, since Big Sur added VP9 decoding support for intel chips before M1 came out. For some reason Apple just really dislikes open standards like Opus, VP9, AV1, etc. They're only using them as needed when they really feel pressurised to support them (which is why you can't play VP9 videos outside of Safari without the use of 3rd party apps, and they had to add VP9 support so people wouldn't switch to Chrome to play 4K YT)
Hate might be the wrong word.

They are after all part of the AOMedia Steering Committee driving AV1 and do support VP9.
 
  • Like
Reactions: Botts85
Hate might be the wrong word.

They are after all part of the AOMedia Steering Committee driving AV1 and do support VP9.
True, though they were like the LAST big company to join. They have rights to HEVC and love making money from that licensing.
 
True, though they were like the LAST big company to join. They have rights to HEVC and love making money from that licensing.
yeah Apple was practically forced to do it. And AV1 is pushed by Netflix and YouTube so they'll need to add the support one day either way. They were probably hoping with VP9 that it wouldn't have caught on that much which is why it took them literally nearly 4 years to add the support for VP9 HW decoding on Intel. Also just to add to that whole HW thing, I sent a Feedback asking them about VP9 HW decoding on AMD hardware, and I got a response that it is not supported and have no plans to do so. So they want to do the minimal effort to support such codecs really.
 
don't mean to necro but I found this interesting and on an M4 Max I see hardware support across the board:

I wrote a tiny app in Swift to test it:



Code:
import VideoToolbox
import AVFoundation

// Function to check hardware decode support for a given codec
func checkHardwareDecodeSupport() {
    // List of codec types to check (based on M4 Max Media Engine + VP9)
    let codecTypes: [CMVideoCodecType] = [
        kCMVideoCodecType_H264,
        kCMVideoCodecType_HEVC,
        kCMVideoCodecType_AppleProRes422,
        kCMVideoCodecType_AppleProResRAW,
        kCMVideoCodecType_AV1,
        kCMVideoCodecType_VP9 // Added VP9
    ]

    // Dictionary to map codec types to human-readable names
    let codecNames: [CMVideoCodecType: String] = [
        kCMVideoCodecType_H264: "H.264",
        kCMVideoCodecType_HEVC: "HEVC (H.265)",
        kCMVideoCodecType_AppleProRes422: "ProRes 422",
        kCMVideoCodecType_AppleProResRAW: "ProRes RAW",
        kCMVideoCodecType_AV1: "AV1",
        kCMVideoCodecType_VP9: "VP9"
    ]
    VTRegisterSupplementalVideoDecoderIfAvailable(kCMVideoCodecType_VP9)
    print("Checking Hardware Decode Capabilities on Mac...\n")

    for codec in codecTypes {
        guard let codecName = codecNames[codec] else { continue }

        // Check if hardware decode is supported
        let isHardwareSupported = VTIsHardwareDecodeSupported(codec)
        print("Codec: \(codecName)")
        print("Hardware Decode Supported: \(isHardwareSupported ? "Yes" : "No")")
        print("---")
    }
}

// Run the check
checkHardwareDecodeSupport()



Checking Hardware Decode Capabilities on Mac...
Codec: H.264
Hardware Decode Supported: Yes
---
Codec: HEVC (H.265)
Hardware Decode Supported: Yes
---
Codec: ProRes 422
Hardware Decode Supported: Yes
---
Codec: ProRes RAW
Hardware Decode Supported: Yes
---
Codec: AV1
Hardware Decode Supported: Yes
---
Codec: VP9
Hardware Decode Supported: Yes
---



note the call to:
Code:
VTRegisterSupplementalVideoDecoderIfAvailable(kCMVideoCodecType_VP9)
to enable VP9 support...
 
As AV1 is now hardware supported I just enable it on YouTube by default, seeing AV1 at 4K with ~5% CPU usage.
 
Last edited:
As AV1 is now hardware supported I just enable it on YouTube by default, seeing AV1 at 4K with ~5% CPU usage.
Are you dropping frames? Because on an M4 Pro watching YouTube 4K60 videos on a 4K monitor, I'm dropping frames whenever using AV1. VP9 runs okay, no frame drops.
 
Are you dropping frames? Because on an M4 Pro watching YouTube 4K60 videos on a 4K monitor, I'm dropping frames whenever using AV1. VP9 runs okay, no frame drops.
What video? I just tried this video at 8K 24 Hz AV1 in Chrome on my M4 Mac mini (non-Pro) and it was fine with no dropped frames. Monitor is 4K+ 3840x2560.

Screenshot 2025-09-26 at 2.12.18 PM.png
 
don't mean to necro but I found this interesting and on an M4 Max I see hardware support across the board:

I wrote a tiny app in Swift to test it:



Code:
import VideoToolbox
import AVFoundation

// Function to check hardware decode support for a given codec
func checkHardwareDecodeSupport() {
    // List of codec types to check (based on M4 Max Media Engine + VP9)
    let codecTypes: [CMVideoCodecType] = [
        kCMVideoCodecType_H264,
        kCMVideoCodecType_HEVC,
        kCMVideoCodecType_AppleProRes422,
        kCMVideoCodecType_AppleProResRAW,
        kCMVideoCodecType_AV1,
        kCMVideoCodecType_VP9 // Added VP9
    ]

    // Dictionary to map codec types to human-readable names
    let codecNames: [CMVideoCodecType: String] = [
        kCMVideoCodecType_H264: "H.264",
        kCMVideoCodecType_HEVC: "HEVC (H.265)",
        kCMVideoCodecType_AppleProRes422: "ProRes 422",
        kCMVideoCodecType_AppleProResRAW: "ProRes RAW",
        kCMVideoCodecType_AV1: "AV1",
        kCMVideoCodecType_VP9: "VP9"
    ]
    VTRegisterSupplementalVideoDecoderIfAvailable(kCMVideoCodecType_VP9)
    print("Checking Hardware Decode Capabilities on Mac...\n")

    for codec in codecTypes {
        guard let codecName = codecNames[codec] else { continue }

        // Check if hardware decode is supported
        let isHardwareSupported = VTIsHardwareDecodeSupported(codec)
        print("Codec: \(codecName)")
        print("Hardware Decode Supported: \(isHardwareSupported ? "Yes" : "No")")
        print("---")
    }
}

// Run the check
checkHardwareDecodeSupport()



Checking Hardware Decode Capabilities on Mac...
Codec: H.264
Hardware Decode Supported: Yes
---
Codec: HEVC (H.265)
Hardware Decode Supported: Yes
---
Codec: ProRes 422
Hardware Decode Supported: Yes
---
Codec: ProRes RAW
Hardware Decode Supported: Yes
---
Codec: AV1
Hardware Decode Supported: Yes
---
Codec: VP9
Hardware Decode Supported: Yes
---



note the call to:
Code:
VTRegisterSupplementalVideoDecoderIfAvailable(kCMVideoCodecType_VP9)
to enable VP9 support...

Enhanced code:
Code:
import VideoToolbox
import AVFoundation

// Function to check hardware decode and encode support for a given codec
func checkHardwareCodecSupport() {
    // List of codec types to check (based on M4 Max Media Engine + VP9)
    let codecTypes: [CMVideoCodecType] = [
        kCMVideoCodecType_H264,
        kCMVideoCodecType_HEVC,
        kCMVideoCodecType_AppleProRes422,
        kCMVideoCodecType_AppleProRes422HQ,
        kCMVideoCodecType_AppleProRes422LT,
        kCMVideoCodecType_AppleProRes422Proxy,
        kCMVideoCodecType_AppleProRes4444,
        kCMVideoCodecType_AppleProRes4444XQ,
        kCMVideoCodecType_AppleProResRAW,
        kCMVideoCodecType_AV1,
        kCMVideoCodecType_VP9 // Added VP9
    ]

    // Dictionary to map codec types to human-readable names
    let codecNames: [CMVideoCodecType: String] = [
        kCMVideoCodecType_H264: "H.264",
        kCMVideoCodecType_HEVC: "HEVC (H.265)",
        kCMVideoCodecType_AppleProRes422: "ProRes 422",
        kCMVideoCodecType_AppleProRes422HQ: "ProRes 422 HQ",
        kCMVideoCodecType_AppleProRes422LT: "ProRes 422 LT",
        kCMVideoCodecType_AppleProRes422Proxy: "ProRes 422 Proxy",
        kCMVideoCodecType_AppleProRes4444: "ProRes 4444",
        kCMVideoCodecType_AppleProRes4444XQ: "ProRes 4444 XQ",
        kCMVideoCodecType_AppleProResRAW: "ProRes RAW",
        kCMVideoCodecType_AV1: "AV1",
        kCMVideoCodecType_VP9: "VP9",
        kCMVideoCodecType_JPEG: "JPEG",
        0x64657068: "Depth (deph)", // 'deph' - Depth data
        0x64697368: "Disparity (dish)", // 'dish' - Disparity data
        0x6d757861: "Mux Audio (muxa)" // 'muxa' - Audio multiplexing
    ]
    VTRegisterSupplementalVideoDecoderIfAvailable(kCMVideoCodecType_VP9)
    print("Checking Hardware Decode & Encode Capabilities on Mac...\n")

    // First, let's list all available hardware encoders with detailed info
    print("=== Detailed Hardware Encoder Analysis ===")
    var encoderListOut: CFArray?
    let status = VTCopyVideoEncoderList(nil, &encoderListOut)
    
    if status == noErr, let encoderList = encoderListOut {
        let encoders = encoderList as! [CFDictionary]
        var hardwareEncoderCount = 0
        
        for (index, encoder) in encoders.enumerated() {
            if let codecType = CFDictionaryGetValue(encoder, Unmanaged.passUnretained(kVTVideoEncoderList_CodecType).toOpaque()) {
                let encoderCodec = Unmanaged<CFNumber>.fromOpaque(codecType).takeUnretainedValue()
                var codecValue: CMVideoCodecType = 0
                CFNumberGetValue(encoderCodec, CFNumberType.sInt32Type, &codecValue)
                
                if let isHardwareAccelerated = CFDictionaryGetValue(encoder, Unmanaged.passUnretained(kVTVideoEncoderList_IsHardwareAccelerated).toOpaque()) {
                    let accelerated = Unmanaged<CFBoolean>.fromOpaque(isHardwareAccelerated).takeUnretainedValue()
                    if CFBooleanGetValue(accelerated) {
                        hardwareEncoderCount += 1
                        let codecName = codecNames[codecValue] ?? "Unknown (\(String(codecValue, radix: 16)))"
                        
                        print("🔧 Hardware Encoder #\(hardwareEncoderCount): \(codecName)")
                        print("   Codec ID: 0x\(String(codecValue, radix: 16)) ('\(fourCCToString(codecValue))')")
                        
                        // Extract all available properties
                        let keys = CFDictionaryGetKeysAndValues(encoder, nil, nil)
                        let count = CFDictionaryGetCount(encoder)
                        
                        var keyPointers = [UnsafeRawPointer?](repeating: nil, count: count)
                        var valuePointers = [UnsafeRawPointer?](repeating: nil, count: count)
                        CFDictionaryGetKeysAndValues(encoder, &keyPointers, &valuePointers)
                        
                        for i in 0..<count {
                            if let keyPtr = keyPointers[i], let valuePtr = valuePointers[i] {
                                let key = Unmanaged<CFString>.fromOpaque(keyPtr).takeUnretainedValue() as String
                                
                                // Try to extract the value based on common types
                                if key.contains("CodecName") || key.contains("EncoderName") || key.contains("DisplayName") {
                                    if let stringValue = Unmanaged<CFString>.fromOpaque(valuePtr).takeUnretainedValue() as String? {
                                        print("   \(key): \(stringValue)")
                                    }
                                } else if key.contains("GPURegistryID") || key.contains("InstanceID") || key.contains("Rating") || key.contains("CodecType") {
                                    if let numberValue = Unmanaged<CFNumber>.fromOpaque(valuePtr).takeUnretainedValue() as CFNumber? {
                                        var intValue: Int64 = 0
                                        CFNumberGetValue(numberValue, CFNumberType.sInt64Type, &intValue)
                                        print("   \(key): \(intValue)")
                                    }
                                } else if key.contains("IsHardwareAccelerated") {
                                    if let boolValue = Unmanaged<CFBoolean>.fromOpaque(valuePtr).takeUnretainedValue() as CFBoolean? {
                                        print("   \(key): \(CFBooleanGetValue(boolValue) ? "Yes" : "No")")
                                    }
                                } else if key.contains("EncoderID") {
                                    if let stringValue = Unmanaged<CFString>.fromOpaque(valuePtr).takeUnretainedValue() as String? {
                                        print("   \(key): \(stringValue)")
                                    }
                                } else {
                                    // Safe generic value extraction - just show the description
                                    let cfValue = Unmanaged<AnyObject>.fromOpaque(valuePtr).takeUnretainedValue()
                                    let description = String(describing: cfValue)
                                    if description.count < 100 { // Avoid extremely long output
                                        print("   \(key): \(description)")
                                    }
                                }
                            }
                        }
                        print()
                    }
                }
            }
        }
        print("Total Hardware Encoders Found: \(hardwareEncoderCount)")
    }
    print()

    for codec in codecTypes {
        guard let codecName = codecNames[codec] else { continue }

        // Check if hardware decode is supported
        let isHardwareDecodeSupported = VTIsHardwareDecodeSupported(codec)
        
        // Check if hardware encode is supported by trying to copy encoder specifications
        var encodeSupported = false
        if status == noErr, let encoderList = encoderListOut {
            let encoders = encoderList as! [CFDictionary]
            for encoder in encoders {
                if let codecType = CFDictionaryGetValue(encoder, Unmanaged.passUnretained(kVTVideoEncoderList_CodecType).toOpaque()) {
                    let encoderCodec = Unmanaged<CFNumber>.fromOpaque(codecType).takeUnretainedValue()
                    var codecValue: CMVideoCodecType = 0
                    CFNumberGetValue(encoderCodec, CFNumberType.sInt32Type, &codecValue)
                    if codecValue == codec {
                        if let isHardwareAccelerated = CFDictionaryGetValue(encoder, Unmanaged.passUnretained(kVTVideoEncoderList_IsHardwareAccelerated).toOpaque()) {
                            let accelerated = Unmanaged<CFBoolean>.fromOpaque(isHardwareAccelerated).takeUnretainedValue()
                            if CFBooleanGetValue(accelerated) {
                                encodeSupported = true
                                break
                            }
                        }
                    }
                }
            }
        }
        
        print("Codec: \(codecName)")
        print("Hardware Decode Supported: \(isHardwareDecodeSupported ? "Yes" : "No")")
        print("Hardware Encode Supported: \(encodeSupported ? "Yes" : "No")")
        print("---")
    }
}

// Helper function to convert FourCC codes to readable strings
func fourCCToString(_ fourCC: CMVideoCodecType) -> String {
    let bytes = [
        UInt8((fourCC >> 24) & 0xff),
        UInt8((fourCC >> 16) & 0xff),
        UInt8((fourCC >> 8) & 0xff),
        UInt8(fourCC & 0xff)
    ]
    return String(bytes: bytes, encoding: .ascii) ?? "????"
}

// Run the check
checkHardwareCodecSupport()


Code:
./hardware_codec_checker
Checking Hardware Decode & Encode Capabilities on Mac...

=== Detailed Hardware Encoder Analysis ===
🔧 Hardware Encoder #1: ProRes 422
   Codec ID: 0x6170636e ('apcn')
   DisplayName: AppleProResHW 422
   PerformanceRating: 500
   EncoderName: AppleProResHW 422
   CodecType: 1634755438
   QualityRating: 90
   EncoderID: com.apple.videotoolbox.videoencoder.appleproreshw.422
   CodecName: AppleProResHW 422
   IsHardwareAccelerated: Yes

🔧 Hardware Encoder #2: ProRes 422 HQ
   Codec ID: 0x61706368 ('apch')
   DisplayName: AppleProResHW 422 HQ
   PerformanceRating: 500
   EncoderName: AppleProResHW 422 HQ
   CodecType: 1634755432
   QualityRating: 90
   EncoderID: com.apple.videotoolbox.videoencoder.appleproreshw.422hq
   CodecName: AppleProResHW 422 HQ
   IsHardwareAccelerated: Yes

🔧 Hardware Encoder #3: ProRes 422 LT
   Codec ID: 0x61706373 ('apcs')
   DisplayName: AppleProResHW 422 LT
   PerformanceRating: 500
   EncoderName: AppleProResHW 422 LT
   CodecType: 1634755443
   QualityRating: 90
   EncoderID: com.apple.videotoolbox.videoencoder.appleproreshw.422lt
   CodecName: AppleProResHW 422 LT
   IsHardwareAccelerated: Yes

🔧 Hardware Encoder #4: ProRes 422 Proxy
   Codec ID: 0x6170636f ('apco')
   DisplayName: AppleProResHW 422 Proxy
   PerformanceRating: 500
   EncoderName: AppleProResHW 422 Proxy
   CodecType: 1634755439
   QualityRating: 90
   EncoderID: com.apple.videotoolbox.videoencoder.appleproreshw.422proxy
   CodecName: AppleProResHW 422 Proxy
   IsHardwareAccelerated: Yes

🔧 Hardware Encoder #5: ProRes 4444
   Codec ID: 0x61703468 ('ap4h')
   DisplayName: AppleProResHW 4444
   PerformanceRating: 500
   EncoderName: AppleProResHW 4444
   CodecType: 1634743400
   QualityRating: 90
   EncoderID: com.apple.videotoolbox.videoencoder.appleproreshw.4444
   CodecName: AppleProResHW 4444
   IsHardwareAccelerated: Yes

🔧 Hardware Encoder #6: ProRes 4444 XQ
   Codec ID: 0x61703478 ('ap4x')
   DisplayName: AppleProResHW 4444 XQ
   PerformanceRating: 500
   EncoderName: AppleProResHW 4444 XQ
   CodecType: 1634743416
   QualityRating: 90
   EncoderID: com.apple.videotoolbox.videoencoder.appleproreshw.4444xq
   CodecName: AppleProResHW 4444 XQ
   IsHardwareAccelerated: Yes

🔧 Hardware Encoder #7: Depth (deph)
   Codec ID: 0x64657068 ('deph')
   DisplayName: Apple Depth (HEVC)-Apple HEVC (HW)
   PerformanceRating: 400
   EncoderName: Apple Depth (HEVC)-Apple HEVC (HW)
   CodecType: 1684369512
   QualityRating: 90
   EncoderID: com.apple.videotoolbox.videoencoder.depth-hevc:com.apple.videotoolbox.videoencoder.ave.hevc
   CodecName: Depth
   SupportedSelectionProperties: {
}
   IsHardwareAccelerated: Yes

🔧 Hardware Encoder #8: Disparity (dish)
   Codec ID: 0x64697368 ('dish')
   DisplayName: Apple Disparity (HEVC)-Apple HEVC (HW)
   PerformanceRating: 400
   EncoderName: Apple Disparity (HEVC)-Apple HEVC (HW)
   CodecType: 1684632424
   QualityRating: 90
   EncoderID: com.apple.videotoolbox.videoencoder.disparity-hevc:com.apple.videotoolbox.videoencoder.ave.hevc
   CodecName: Disparity
   SupportedSelectionProperties: {
}
   IsHardwareAccelerated: Yes

🔧 Hardware Encoder #9: H.264
   Codec ID: 0x61766331 ('avc1')
   DisplayName: Apple H.264 (HW)
   PerformanceRating: 400
   EncoderName: Apple H.264 (HW)
   CodecType: 1635148593
   EncoderID: com.apple.videotoolbox.videoencoder.ave.avc
   CodecName: H.264
   IsHardwareAccelerated: Yes

🔧 Hardware Encoder #10: HEVC (H.265)
   Codec ID: 0x68766331 ('hvc1')
   DisplayName: Apple HEVC (HW)
   PerformanceRating: 400
   EncoderName: Apple HEVC (HW)
   CodecType: 1752589105
   QualityRating: 90
   EncoderID: com.apple.videotoolbox.videoencoder.ave.hevc
   CodecName: HEVC
   IsHardwareAccelerated: Yes

🔧 Hardware Encoder #11: JPEG
   Codec ID: 0x6a706567 ('jpeg')
   DisplayName: JPEG (HW)
   EncoderID: com.apple.videotoolbox.videoencoder.jpeg.ajpeg
   CodecType: 1785750887
   CodecName: JPEG
   EncoderName: JPEG (HW)
   IsHardwareAccelerated: Yes

🔧 Hardware Encoder #12: Mux Audio (muxa)
   Codec ID: 0x6d757861 ('muxa')
   DisplayName: Apple Muxed Alpha-Apple HEVC (HW)
   PerformanceRating: 400
   EncoderName: Apple Muxed Alpha-Apple HEVC (HW)
   CodecType: 1836415073
   QualityRating: 90
   EncoderID: com.apple.videotoolbox.videoencoder.hevc-with-alpha:com.apple.videotoolbox.videoencoder.ave.hevc
   CodecName: Muxed Alpha
   IsHardwareAccelerated: Yes

Total Hardware Encoders Found: 12

Codec: H.264
Hardware Decode Supported: Yes
Hardware Encode Supported: Yes
---
Codec: HEVC (H.265)
Hardware Decode Supported: Yes
Hardware Encode Supported: Yes
---
Codec: ProRes 422
Hardware Decode Supported: Yes
Hardware Encode Supported: Yes
---
Codec: ProRes 422 HQ
Hardware Decode Supported: Yes
Hardware Encode Supported: Yes
---
Codec: ProRes 422 LT
Hardware Decode Supported: Yes
Hardware Encode Supported: Yes
---
Codec: ProRes 422 Proxy
Hardware Decode Supported: Yes
Hardware Encode Supported: Yes
---
Codec: ProRes 4444
Hardware Decode Supported: Yes
Hardware Encode Supported: Yes
---
Codec: ProRes 4444 XQ
Hardware Decode Supported: Yes
Hardware Encode Supported: Yes
---
Codec: ProRes RAW
Hardware Decode Supported: Yes
Hardware Encode Supported: No
---
Codec: AV1
Hardware Decode Supported: Yes
Hardware Encode Supported: No
---
Codec: VP9
Hardware Decode Supported: Yes
Hardware Encode Supported: No
---
 
What video? I just tried this video at 8K 24 Hz AV1 in Chrome on my M4 Mac mini (non-Pro) and it was fine with no dropped frames. Monitor is 4K+ 3840x2560.

View attachment 2559370
Watching some Digital Foundry content like DF Direct, which is 4K 60, or their Ghost of Yotei review (4K60, HDR). I see frame drops when skipping around in the video with AV1 or changing screen size. It happens much less frequently or not at all when using VP9.
Screenshot 2025-09-26 at 10.35.38 PM.png
Screenshot 2025-09-26 at 10.34.25 PM.png
 
Watching some Digital Foundry content like DF Direct, which is 4K 60, or their Ghost of Yotei review (4K60, HDR). I see frame drops when skipping around in the video with AV1 or changing screen size. It happens much less frequently or not at all when using VP9. View attachment 2559619View attachment 2559620
I get dropped frames when changing screen size for both VP9 and AV1, for that Ghost of Yotei review in Chrome. I guess 4K 60 Hz is worse for this than 8K 24 Hz. However, if anything VP9 is worse for dropped frames than AV1 on my machine. Or at best, VP9 is about the same as AV1.

I don't notice it during playback though, since I don't really see the frame drop when changing the screen size. If I just leave it to play, there are no frame drops.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.