Tag Archives: video

Data inside Apple’s AAE files

by ,

An AAE file is an XML text file saved next to your JPEG images or MOV videos that describe adjustments to that file. For instance, I have a “Slo-mo” video I took with my iPhone 6 Plus, and the AAE file looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>adjustmentBaseVersion</key>
    <integer>0</integer>
    <key>adjustmentData</key>
    <data>
    YnBsaXN0MDDRAQJac2xvd01vdGlvbtIDBAUXV3JlZ2lvbnNUcmF0ZaEG0QcIWXRpbWVS
    YW5nZdIJCgsUVXN0YXJ0WGR1cmF0aW9u1AwNDg8QERITVWZsYWdzVXZhbHVlWXRpbWVz
    Y2FsZVVlcG9jaBABEQEMEQJYEADUDA0ODxUWEhMQAxEC4SI+AAAACAsWGyMoKi03PEJL
    VFpganBydXh6g4WIAAAAAAAAAQEAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAI0=
    </data>
    <key>adjustmentEditorBundleID</key>
    <string>com.apple.camera</string>
    <key>adjustmentFormatIdentifier</key>
    <string>com.apple.video.slomo</string>
    <key>adjustmentFormatVersion</key>
    <string>1.1</string>
</dict>
</plist>

All the interesting bits are in the opaque hex code inside the “data” tag. If you decode that as base64, you get a binary plist file, and converting that to ascii gives you this:

{
    slowMotion = {
        rate = "0.125";
        regions = (
                        {
                timeRange = {
                    duration = {
                        epoch = 0;
                        flags = 3;
                        timescale = 600;
                        value = 737;
                    };
                    start = {
                        epoch = 0;
                        flags = 1;
                        timescale = 600;
                        value = 268;
                    };
                };
            }
        );
    };
}

So there you go – you can probably edit that data and write it back after encoding it to base64.