Final Cut Pro X 10.1 revealed?
Wednesday, 06 November 2013
iMovie (2013) is an unreleased version of Final Cut Pro X with a consumer UI
In July 2011 I took a look inside the newly released Final Cut Pro X 10.0.0. I found text and graphics that hinted at unimplemented features. These features could have have missed the cut for the first public release. I guessed they would be more fully developed in future versions or dropped.
The evidence suggested that Apple might be working on features such as the reintroduction of Multicam, XML import and export, AppleScript integration, flexible window layouts and multi-user editing. Some of these appeared in later versions of Final Cut, some didn't.
A new version of iMovie was launched as part of Apple's October announcements. Here is some of what I've discovered inside iMovie (2013).
iMovie (2013) isn't an updated version of iMovie '11 (version 9), it is Final Cut Pro X with additional resources to implement the iMovie consumer editing interface.
It looks like there are new features in this unreleased version of Final Cut Pro X that many professional editors have been looking forward to for a long time.
In OS X, applications are stored as specialised folders that contain code, text, images, sounds and videos. To see inside any app using the Finder, Control- or Right-Click its icon and choose 'Show Package Contents' from the shortcut menu.
If you do this with the previous version of iMovie, you get a folder that looks like this:
Operational parts of apps are divided up into 'frameworks' and some UI images, sounds and videos are stored in a Resources directory.
Here's what is inside Final Cut Pro X 10.0.9:
Here's iMovie (2013):
Although iMovie (2013) and Final Cut Pro X 10.0.9 share many of the same frameworks, who is to say there's a whole copy of Final Cut built into every copy of iMovie? Apple could have used the elements of Final Cut that implement video editing and overlaid the iMovie UI. It turns out that a large amount of the graphics, text and code in iMovie isn't currently visible when you run the app.
Compare the resources folders in the same framework in both Final Cut Pro X 10.0.9 and iMovie (2013):
The documents and folders are very similar - including icons and Adobe Photoshop files. There are extra resources to implement the new iMovie Theatre feature. There are also resources that aren't seen in the current iMovie user interface: The Audition Spotlight that appears when switching between clips in an audition and icons for surround sound speakers for example.
Image resources in iMovie (2013) not yet visible to users include:
Final Cut Pro X 10.?
iMovie (2013) isn't based on Final Cut Pro X 10.0.9. I've found elements that show that the version of Final Cut is newer than the one released earlier this year.
Here's a list of Final Cut elements inside the iMovie (2013) application that don't yet appear in iMovie and Final Cut Pro X. I'm listing them here because they point to a possible direction for Final Cut Pro. Although I can find these references using a simple text editor, I don't have a way of confirming that any of this content will be available in a future version of Final Cut. I'm sharing what I've found in a free application I recieved with OS X Mavericks.
Fractured Twirl, Fractured Shatter, Fractured Extend, Fractured Flyback, Fractured, Fractured Radial, Fractured Wave, Fractured Flip, Fractured Confetti.
Here are the Fractured transition parameters: Animation Type, Backface Color, Delay, Density, Density Scale Start, Density Scale End, Dissolve In Out, Dissolve Point, Double Sided, Ease In, Ease Out, Extrude, Face Shape, Bulge Center, Fog, Fog Intensity, Fragment Aspect, Implode, Lighting, Mode, Multi Sample, Output Expansion, Randomize, Reassemble, Reassemble Point, Specular, Specular Color, Transparency
Final Cut Pro X libraries
Text inside iMovie associated with a new method for storing clips, projects and events [More on libraries and iMovie (2013)]:
"In Final Cut Pro 10.1 and later, projects and events are contained in a library.
" Click Update All to create a new library for the projects and events on each connected hard disk."
" Click Update Later to skip the update process for now."
" Click Locate to manually create a library for a specific hard disk, folder, or SAN location."
"Review the newly created libraries and confirm your projects and events are intact before emptying the trash."
"To skip copying your Projects and Events into the Library, click Ignore. (You may import them later.)"
"Copied Projects and Events can still be opened in earlier versions of %@. To copy your Projects and Events, click OK." [parts of text that include @ characters can be replaced by the app depending on the context. In this case the text would be 'iMovie' or 'Final Cut Pro']
"You are editing clips between libraries."
"You are editing compound clips or multicam clips between libraries"
"The Library must contain at least one Event"
"Consolidate Library Files "
"Consolidate Library Media"
"Consolidate Library Files will copy all of %@'s external Media into your library."
"The selected events refer to files outside the library bundle. To copy external media into the library bundle click Continue. You cannot undo this command._"
"Choose the current library or an external folder to consolidate the files into"
"Duplicate Project as Snapshot"
"Duplicate Open Project as Snapshot"
"Open Library Backup"
"To open this library backup, click Save and choose a new location to save the library"
"Opening a library backup will create a new copy of the library and attempt to restore its original media. The current version of library will not be affected."
"You have projects and events that refer to media on missing hard disks"
"To play back the missing file "%@," connect the hard drive "%"
"This Clip Uses the Following Missing Effect(s):"
"%@" could not be removed because applications are using it."
"This timeline contains Music Markers"
"%@ can align your clips to the music markers to time them to beats"
"Align Clips at Music Markers"
"Align to Music Markers"
"Edit to Markers"
"Add a new keyframe at the playhead"
"Smooth End Transition"
"Retime Set Transition FallOff"
"Set Smooth Transition Retiming"
"Set Smooth Keyframe Retiming"
"Trim To Playhead"
"Retime Blade Speed"
"Blade at Skimmer"
"The item is not on an edit frame boundary"
"Search your Aperture library"
"Choose to view projects, albums, and more from your Aperture Library"
"Double-click to open this smart album"
"Double-click to open this photo stream"
"Double-click to open this slideshow"
"Double-click to open this gallery"
"Double-click to open this faces group"
"Use proxy playback by changing the Media setting to 'Proxy' in the Viewer Options pop-up menu. (Requires proxy media.)"
"Apply to All Transitions"
"Flash and Hold Last Frame"
"To better fill titles"
"Reset All Tools"
"The file format you requested does not allow for sizes of more than 4GB"
"Cannot Send to Compresor"
"This snapshot is incompatible with the effect bundle part."
My Effect Bundle
"The selected clip has no %@ effects."
"Please enter a valid name for the bundle."
"Could not save bundle"
"Could not save the effects as a bundle."
[This might still apply to audio effect bundles, which have been inside Final Cut Pro X for a while, but might one day include video effects]
iMovie to Final Cut Pro
"To send your movie to Final Cut Pro, you must have Final Cut Pro version 10.1 or later installed."
"Send Movie to Final Cut Pro"
"Sending To Final Cut Pro"
"A compatible version of Final Cut Pro cannot be found."
"Some SAN locations are in use. To update these locations, make sure they are not in use, and try again."
There are no longer any 'Guards' text strings designed to be used in dialogue boxes to as found in Final Cut Pro X 10.0.0.
However, within the code inside Final Cut Pro 10.0.9, there are 14 references to Guards. In iMovie (2013) there are many more in the equivalent file:
Final Cut Pro X 10.1 XML
New aspects of Final Cut Pro X XML determine what features of Final Cut Pro Projects, Events and Libraries that third-party applications can manipulate.
In iMovie (2013) but not visible in the current UI:
"Export Event XML…"
"You can use the error log below to resolve issues in your XML file and try to import again"
"Select a library from the list of recent libraries. To import your XML into a different library, click Locate. To import your XML to a new library, choose New Library."
The format for the flavour of XML that Final Cut Pro X uses to export and import has been updated to version 1.3 from version 1.2. The new version can now store colour correction, title, audio and smart folder information.
Libraries and smart collections
<!ENTITY % collection_item "collection-folder | keyword-collection | smart-collection">
<!-- IMPORT OPTIONS -->
<!-- Element that contain options on how the import should be conducted (e.g. whether to copy assets, etc.) -->
<!ELEMENT import-options (option*)>
<!ELEMENT keyword-collection EMPTY>
<!ATTLIST keyword-collection name CDATA #REQUIRED>
<!ELEMENT collection-folder (%collection_item;)*>
<!ATTLIST collection-folder name CDATA #REQUIRED>
Final Cut Pro X XML v. 1.3 will be able to store smart events that constantly list clips and projects that have specific attributes such as role, sample rate and timecode.
<!-- SMART COLLECTIONS -->
<!ELEMENT smart-collection ((match-text | match-ratings | match-media | match-clip | match-stabilization | match-keywords | match-shot | match-property | match-time | match-timeRange | match-roles)*)>
<!ATTLIST smart-collection name CDATA #REQUIRED>
<!ATTLIST smart-collection match (any | all) #REQUIRED>
<!ELEMENT match-text EMPTY>
<!ATTLIST match-text enabled (0 | 1) "1">
<!ATTLIST match-text rule (includes | doesNotInclude | is | isNot) "includes">
<!ATTLIST match-text value CDATA #REQUIRED>
<!ELEMENT match-ratings EMPTY>
<!ATTLIST match-ratings enabled (0 | 1) "1">
<!ATTLIST match-ratings value (favorites | rejected) #REQUIRED>
<!ELEMENT match-media EMPTY>
<!ATTLIST match-media enabled (0 | 1) "1">
<!ATTLIST match-media rule (is | isNot) "is">
<!ATTLIST match-media type (videoWithAudio | videoOnly | audioOnly | stills) #REQUIRED>
<!ELEMENT match-clip EMPTY>
<!ATTLIST match-clip enabled (0 | 1) "1">
<!ATTLIST match-clip rule (is | isNot) "is">
<!ATTLIST match-clip type (audition | synchronized | compound | multicam | layeredGraphic | project) #REQUIRED>
<!ELEMENT match-stabilization EMPTY>
<!ATTLIST match-stabilization enabled (0 | 1) "1">
<!ATTLIST match-stabilization show-excessive-shake (0 | 1) #REQUIRED>
<!ELEMENT match-keywords (keyword-name*)>
<!ATTLIST match-keywords enabled (0 | 1) "1">
<!ATTLIST match-keywords rule (includesAny | includesAll | doesNotIncludeAny | doesNotIncludeAll) "includesAny">
<!ELEMENT keyword-name EMPTY>
<!ATTLIST keyword-name value CDATA #REQUIRED>
<!ELEMENT match-shot (shot-type*)>
<!ATTLIST match-shot enabled (0 | 1) "1">
<!ATTLIST match-shot rule (includesAny | includesAll | doesNotIncludeAny | doesNotIncludeAll) "includesAny">
<!ELEMENT shot-type EMPTY>
<!ATTLIST shot-type value (onePerson | twoPersons | group | closeUp | mediumShot | wideShot) #REQUIRED>
<!ELEMENT match-property EMPTY>
<!ATTLIST match-property enabled (0 | 1) "1">
<!ATTLIST match-property key (reel | scene | take | audioOutputChannels | frameSize | videoFrameRate | audioSampleRate | cameraName | cameraAngle) #REQUIRED>
<!ATTLIST match-property rule (includes | doesNotInclude | is | isNot) "includes">
<!ATTLIST match-property value CDATA #REQUIRED>
<!ELEMENT match-time EMPTY>
<!ATTLIST match-time enabled (0 | 1) "1">
<!ATTLIST match-time type (contentCreated | dateImported) #REQUIRED>
<!ATTLIST match-time rule (is | isBefore | isAfter) #REQUIRED>
<!ATTLIST match-time value CDATA #REQUIRED>
<!ELEMENT match-timeRange EMPTY>
<!ATTLIST match-timeRange enabled (0 | 1) "1">
<!ATTLIST match-timeRange type (contentCreated | dateImported) #REQUIRED>
<!ATTLIST match-timeRange rule (isInLast | isNotInLast) #REQUIRED>
<!ATTLIST match-timeRange value CDATA #REQUIRED>
<!ATTLIST match-timeRange units (hour | day | week | month | year) #IMPLIED>
<!ELEMENT match-roles (role*)>
<!ATTLIST match-roles enabled (0 | 1) "1">
<!ATTLIST match-roles rule (includesAny | includesAll | doesNotIncludeAny | doesNotIncludeAll) "includesAny">
<!ELEMENT role EMPTY>
<!ATTLIST role name CDATA #REQUIRED>
<!-- The 'adjust-color' element modifies the color adjustments for a clip. -->
<!-- This element contains adjustments for color balance, color match, and color corrections. -->
<!ELEMENT adjust-color (colorBalance?, colorMatch?, (cb-correction | filter-color)*)>
<!ELEMENT colorBalance (data)>
<!ATTLIST colorBalance enabled (0 | 1) "1">
<!ELEMENT colorMatch (data)>
<!ATTLIST colorMatch enabled (0 | 1) "1">
<!ELEMENT cb-correction (cb-values?, cb-values-outer?, cb-shape*, cb-isolation?)>
<!ATTLIST cb-correction enabled (0 | 1) "1">
<!-- The 'cb-values' element describes the colorboard adjustments for a color correction. -->
<!ELEMENT cb-values EMPTY>
<!ATTLIST cb-values global CDATA #REQUIRED>
<!ATTLIST cb-values shadows CDATA #REQUIRED>
<!ATTLIST cb-values midtones CDATA #REQUIRED>
<!ATTLIST cb-values highlights CDATA #REQUIRED>
<!-- The 'cb-values-outer' element describes the colorboard adjustments outside of the shapes for a color correction. -->
<!ELEMENT cb-values-outer EMPTY>
<!ATTLIST cb-values-outer global CDATA #REQUIRED>
<!ATTLIST cb-values-outer shadows CDATA #REQUIRED>
<!ATTLIST cb-values-outer midtones CDATA #REQUIRED>
<!ATTLIST cb-values-outer highlights CDATA #REQUIRED>
<!-- The 'cb-shape' element describes a shape used for a colorboard correction. -->
<!ELEMENT cb-shape (param*)>
<!ATTLIST cb-shape origin CDATA #IMPLIED>
<!ATTLIST cb-shape softness CDATA #IMPLIED>
<!ATTLIST cb-shape curvature CDATA #IMPLIED>
<!ATTLIST cb-shape rotation CDATA #IMPLIED>
<!ATTLIST cb-shape scale CDATA #IMPLIED>
<!ELEMENT cb-isolation (data)>
<!ELEMENT filter-color (param*)>
<!ATTLIST filter-color ref IDREF #REQUIRED> <!-- 'effect' ID -->
<!ATTLIST filter-color name CDATA #IMPLIED>
<!ATTLIST filter-color enabled (0 | 1) "1">
<!ELEMENT adjust-stabilization (param*)>
<!ATTLIST adjust-stabilization type (automatic | inertiaCam | smoothCam) "automatic">
<!ELEMENT adjust-rollingShutter EMPTY>
<!ATTLIST adjust-rollingShutter amount (none | low | medium | high | extraHigh) "none">
<!ELEMENT adjust-loudness EMPTY>
<!ATTLIST adjust-loudness amount CDATA #REQUIRED>
<!ATTLIST adjust-loudness uniformity CDATA #REQUIRED>
<!ELEMENT adjust-noiseReduction EMPTY>
<!ATTLIST adjust-noiseReduction amount CDATA #REQUIRED>
<!ELEMENT adjust-humReduction EMPTY>
<!ATTLIST adjust-humReduction frequency (50 | 60) #REQUIRED>
<!ELEMENT adjust-EQ (param*)>
<!ATTLIST adjust-EQ mode (flat | voice_enhance | music_enhance | loudness | hum_reduction | bass_boost | bass_reduce | treble_boost | treble_reduce) #REQUIRED>
<!ELEMENT adjust-matchEQ (data)>
<!ENTITY % marker_item "(marker | chapter-marker | rating | keyword | shot-marker)">
'Rating', 'Keyword' and 'Shot-marker' markers haven't been able to be exported or imported in XML files before.
<!ELEMENT shot-marker (shot-type)+>
<!ATTLIST shot-marker start %time; #IMPLIED>
<!ATTLIST shot-marker duration %time; #IMPLIED>
<!ATTLIST sequence keywords CDATA #IMPLIED>
Final Cut Pro X storylines are stored as 'Sequences' in Final Cut Pro X XML.
<!-- A 'filter-video' defines a video effect that's applied to its parent element. -->
<!-- Video filters are concatenated in the order in which they appear. -->
<!ELEMENT filter-video (data?, param*)>
<!ATTLIST filter-video ref IDREF #REQUIRED> <!-- 'effect' ID -->
<!ATTLIST filter-video name CDATA #IMPLIED>
<!ATTLIST filter-video enabled (0 | 1) "1">
<!-- A 'filter-audio' defines an audio effect that's applied to its parent element. -->
<!-- Audio filters are concatenated in the order in which they appear. -->
<!ELEMENT filter-audio (data?, param*)>
<!ATTLIST filter-audio ref IDREF #REQUIRED> <!-- 'effect' ID -->
<!ATTLIST filter-audio name CDATA #IMPLIED>
<!ATTLIST filter-audio enabled (0 | 1) "1">
<!ATTLIST filter-audio presetID CDATA #IMPLIED>
It will be possible to control the smoothness of the transitions between time remap segments:
<!ATTLIST timept inTime %time; #IMPLIED> <!-- transition in-time for point (used only with smooth interpolations) -->
<!ATTLIST timept outTime %time; #IMPLIED> <!-- transition out-time for point (used only with smooth interpolations) -->
Transition information now can include seperate audio filters and video filters. This implies more control in Final Cut about which audio transition is applied with a video transition. This XML encoding could store a transition between two clips with no audio transition applied during a video transition.
Is this Final Cut Pro X 10.1?
I have no way of knowing if the unreleased version of Final Cut Pro X that iMovie is based on is version 10.1. It might be where 10.1 was a few months ago - iMovie (2013) might get an update at the same time at Final Cut Pro X for compatibility reasons.
Trojan Horses have negative connotations: benign presents that hide malignant intent. In the case of iMovie, it seems that Apple wants the maximum number of people to get comfortable with editing while providing a direct connection to the world of professional post production.
Although Apple are unlikely to make Final Cut Pro X 10.1 a free upgrade, the sting of a full-price update might be reduced by full format Final Cut to iMovie and back roundtripping. Video editors, sound editors, photographers, colour graders and visual effects people can work in the $299 app while passing timelines and footage backwards and forwards to writers, directors, producers and others who can run iMovie (2013) for OS X at very low cost, or even for free. I don't have the tools to reverse engineer the code, so I don't know if such round-tripping will be possible, but as both applications might run on the same foundations, there's no technical reasons why this wouldn't be possible.
The future of storytelling will change a great deal if Apple convice more people that they can manipulate videos they shoot on iOS devices as easily as they've learned to take, modify and organise photos. I think the iMovie (2013)/Final Cut Pro X combination will help bring many more people to editing and visual storytelling all over the world.