I really like Corel VideoStudio Pro for video editing, and I’ve been using it for 4 years now. Unfortunately it really falls down when it comes to QuickTime videos. Now that I own a Canon 7D that records in QuickTime format, this is a problem.
The underlying issue is that the software seems to lose all knowledge of its QuickTime capabilities when QuickTime has been upgraded on the machine. Since I use iTunes on this computer for my iPhone and iPad, there’s no possibility for me to downgrade QuickTime for VideoStudio.
So tonight I set out to find a solution.
QuickTime Pro and some C#
I purchased QuickTime Pro ($30) and found that I could take a .mov file and perform a Pass Through MP4 conversion which essentially just strips the embedded mp4 data from the .mov file without doing any real transcoding. This is exactly what I want – I don’t want to lose any video quality just because I want the raw mp4.
The problem now is that this is a completely manual process that I would need to do on each and every video file. File -> Export -> MPEG-4 -> Pass Through -> blah blah.
There’s just no way that was going to work, so I decided to write some code against the QuickTime COM api to automate the process.
The following code is for a command-line executable that will do this mov to mp4 conversion to a batch of mov files:
using System; using System.IO; using System.Reflection; using System.Threading; using QTOControlLib; using QTOLibrary; using QuickTimePlayerLib; namespace QTExtractor { class Program { static void Main(string[] args) { // get the player, and the "control" QuickTimePlayerApp qtApp = new QuickTimePlayerApp(); // have to wait for QT to open up. Thread.Sleep(5000); // get a Player instance QuickTimePlayer qtPlayer = qtApp.Players[1]; // the exporter we will configure once and re-use QTExporter exporter = null; foreach (string movFile in args) { // open the movie qtPlayer.OpenURL(movFile); // get the QTControl QTControl control = qtPlayer.QTControl; // configure the exporter if (exporter == null) { if (control.QuickTime.Exporters.Count == 0) { control.QuickTime.Exporters.Add(); } exporter = control.QuickTime.Exporters[1]; exporter.TypeName = "MPEG-4"; exporter.ShowProgressDialog = true; // load our embedded settings string settingsXml = ""; using (Stream resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("QTExtractor.Settings.Settings.xml")) { if (resourceStream == null) { throw new InvalidOperationException("Unable to locate the embedded settings.xml file for use with QuickTime Pro."); } using (StreamReader reader = new StreamReader(resourceStream)) { settingsXml = reader.ReadToEnd(); } } // set the settings xml CFObject newSettings = new CFObject(); newSettings.XML = settingsXml; exporter.Settings = newSettings; } // set the datasource to the new movie exporter.SetDataSource(control.Movie); // uncomment to obtain new settings xml for use in exports //exporter.ShowSettingsDialog(); //string settings = exporter.Settings.XML; //File.WriteAllText(@"C:tempsettings.xml", settings); // just place the mp4 alongside the mov string targetFile = Path.Combine(Path.GetDirectoryName(movFile), Path.GetFileNameWithoutExtension(movFile) + ".mp4"); exporter.DestinationFileName = targetFile; // Go! exporter.BeginExport(); } // close the player qtPlayer.Close(); } } }
After building this, I added a shortcut to my Windows 7 SendTo folder.
Now, in my video folder I’m able to multi-select as many .mov files as necessary, righ-click and select Send To -> QTExtractor. An .mp4 file will be created for each .mov!
The only downside is that the QT UI pops up as it is working – I haven’t looked but I suspect I can’t get around this. Oh well, this should suffice until Corel gets their act together.
Comments
2 responses to “Corel VideoStudio Pro and QuickTime, a Workaround”
[…] Post navigation ← Previous […]
LikeLike
[…] Copyright wareplanet.com Contact Powered by apanel for software. Corel VideoStudio Pro and QuickTime, a Workaround | The Johnson … […]
LikeLike