My wish was to cut MP4 files without re-enconding them. So that should be fast and lossless.
For this part I found a nice software that does it for me: Smart Cutter
But one problem of this software is the usability. So i downloaded a trial version of Adobe Premiere Pro CC and tried following. I cutted my video with Premiere and exported an EDL file that contains all cut-points of this video.
Smart Cutter doesn’t support the exported format of Premiere Pro, so it is necessary to adapt the data in the EDL file. To do this automatically I wrote an AutoIT script that you can find here:
#include <FileConstants.au3> #include <MsgBoxConstants.au3> #include <StringConstants.au3> #include <File.au3> ; ====================================================== ; This script converts the EDL file that was exported by Adobe Premiere Pro ; to a EDL file that can be read by Smart Cutter ; by PS ; ====================================================== ; Check the commandline If $CmdLine[0] = "" Then MsgBox($MB_SYSTEMMODAL, "Missing file", "No file given. Please start with a file as argument.") Exit EndIf ; read the given file, convert them and write the result file Func convert() Local $sDrive, $sDir, $sFileName, $sExtension _PathSplit ( $CmdLine[1], $sDrive, $sDir, $sFileName, $sExtension ) ToolTip("Converting file: " & $sFileName & $sExtension) ; Open the file for reading and store the handle to a variable. Local $hFileOpen = FileOpen($CmdLine[1], $FO_READ) If $hFileOpen = -1 Then MsgBox($MB_SYSTEMMODAL, "", "An error occurred when reading the file.") Return False EndIf ; Read the contents of the file using the handle returned by FileOpen. Local $sFileRead = FileRead($hFileOpen) ; Close the handle returned by FileOpen. FileClose($hFileOpen) ; Remove all unnecessary strings from the file $sFileRead = StringRegExpReplace($sFileRead, "TITLE: .*\r\n", "") $sFileRead = StringRegExpReplace($sFileRead, "\* FROM CLIP NAME:.*(\r\n)?", "") $sFileRead = StringRegExpReplace($sFileRead, "\d{3}\W*AX\W* AA/V\W*C\W*", "") $sFileRead = StringRegExpReplace($sFileRead, "\r\n\r\n", @CRLF) ; prepare timestamps $timestampsstr = "00:00:00:00 " $timestamps = StringSplit($sFileRead, @CRLF, $STR_ENTIRESPLIT) For $i = 1 to $timestamps[0] $timestampParts = StringSplit($timestamps[$i], " ") If @error = 1 Then ContinueLoop $timestampsstr = $timestampsstr & $timestampParts[1] & @CRLF & $timestampParts[2] & " " Next $timestampsstr = $timestampsstr & "999999:99:99:99" ; parse the timestamps $result = "" $timestamps = StringSplit($timestampsstr, @CRLF, $STR_ENTIRESPLIT) For $i = 1 to $timestamps[0] $timestampParts = StringSplit($timestamps[$i], " ") If @error = 1 Then ContinueLoop ;MsgBox($MB_SYSTEMMODAL, "Missing file", "jo: " & $timestamps[$i]) $part1 = timestampToSecondsString($timestampParts[1]) $part2 = timestampToSecondsString($timestampParts[2]) If $part1 = $part2 Then ContinueLoop $timestampFormated = $part1 & " " & $part2 & " 0" $result = $result & $timestampFormated & @CR & @LF Next ; Write new file Local $hFileOpen = FileOpen(_PathMake($sDrive, $sDir, $sFileName & "_SmartCutter", $sExtension), $FO_OVERWRITE) FileWrite($hFileOpen, $result) FileClose($hFileOpen) Sleep(1000) EndFunc ; Timestamp format have to be: 00:02:35:35 Func timestampToSecondsString($timestamp) $times = StringSplit($timestamp, ":") If $times[0] <> 4 Then MsgBox($MB_SYSTEMMODAL, "", "Wrong timestamp:" & $timestamp) Return "" EndIf $hours = Number($times[1]) $minutes = Number($times[2]) $seconds = Number($times[3]) $mseconds = Number($times[4]) Return $hours * 3600 + $minutes * 60 + $seconds & "." & $mseconds EndFunc convert()
Put this script in a AU3 file and compile this to a EXE file.
Now you can drop your Premiere Pro EDL files to this EXE file and you will get new EDL files that are supported by Smart Cutter.