Ich gebe es ja zu – das ist ein enorm nerdiger Start in die Woche. Ich gehe sogar davon aus, dass dieser Beitrag so nerdig ist, dass er genau einen Menschen auf der Welt interessiert. Nämlich mich. Aber hey: Das hier ist ein Blog. Und zwar meines!
Es geht jedenfalls um Folgendes: Aus Gründen produziere ich vermehrt Videos mit Final Cut. Diese verwenden Einblender, und es ist nun mal eine traurige Tatsache, dass man sich bei denen oft vertippt. Ganz abgesehen davon, dass die völlig unbrauchbare Autokorrektur von OS X oft Fehler hineinbastelt.
Besonders ärgerlich sind solche Tippfehler übrigens bei Youtube, weil man dort die Videodatei nicht austauschen kann. Wenn man den Fehler erst nachträglich bemerkt, muss man sich entscheiden, ob man ihn belässt. Oder ob man das Video neu publiziert und die bereits erfolgten Views verliert.
Die Texte aus den Videos für die digitalen Patentrezepte gehen darum durchs Newsnet-Korrektorat. Die Kollegen dort möchten fürs Gegenlesen nicht das Video vorgelegt bekommen – verständlich, denn dann müssten sie, um in Ruhe alles zu studieren, bei jeder Texttafel oder Bauchbinde den Pause-Knopf drücken. Sie möchten lieber nur die Texte erhalten.
Von Hand herauskopieren wäre zu mühsam
Stellt sich also die Frage: Wie bekommt man diese aus dem Video in eine Textdatei? Copy-Paste steht für mich ausser Frage: zu mühsam und zu fehleranfällig. Man müsste die Textelemente einzeln markieren und per Zwischenablage übertragen. Klar, dass man bei diesem Verfahren genau jene Bauchbinde übersieht, in der es einen peinlichen Tippfehler hat. Abgesehen ist mein Credo, seit ich Computer benutze, genau solche monotone Handarbeit zu vermeiden.
Nun bietet Final Cut den schönen Befehl Ablage > XML exportieren. Er macht genau das, was man erwartet: Er schreibt das ganze Projekt in eine Datei mit Endung fcpxml, die man mit einem beliebigen Editor öffnen kann. Tut man das, erkennt man schnell, dass die Textelemente alle zwischen den Tags <text-style ref …> und <\text-style> stecken. Mit anderen Worten: Man muss nur den Inhalt dieser Tags sammeln, und schon hat man seine Textelemente beieinander.
Text Wrangler und Apple Script sind ein Traumpaar
Der Editor Text Wrangler ist dafür mit seiner AppleScript-Integration bestens geeignet. Man zeichnet ein Script auf, das im Wesentlichen aus drei Schritten besteht:
- Als Erstes befasst es sich mit dem Umstand, dass Textelemente auf mehreren Zeilen auch in der XML-Datei Absatzmarken enthalten – die sind für die zeilenweise operierende Grep-Suchfunktion ein Problem. Daher werden die Absatzmarken entfernt, bzw. in meinem Script durch den Hinweis (Absatz) ersetzt.
- Als zweites findet die Grep-Suche die <text-style ref …>-Tags und kopiert sie in eine neue Datei.
- In dieser neuen Datei löscht man wiederum per Grep-Suche alles raus, was man nicht drin haben will, und fertig ist die Laube.
Hier ist mein Script. Nicht sonderlich elegant oder ausgefeilt, aber es erfüllt seinen Zweck:
(Wer es selbst verwenden möchte, müsste die Pfade anpassen und anstelle von matthias seinen eigenen Benutzernamen eintragen. Wahrscheinlich würde es genügen, Macintosh HD:Users:matthias:Documents durch ~/Documents/ und die Doppelpunkte durch Slashes zu ersetzen. Habe ich aber bislang nicht ausprobiert.)
tell application "TextWrangler" activate save text document 1 to file "Macintosh HD:Users:matthias:Documents:sicherheitskopie.txt" without saving as stationery replace "[^>]\\n" using "\\1 (Absatz) " searching in text 1 of text document "sicherheitskopie.txt" options {search mode:grep, starting at top:true, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false} find "<text-style ref(.*)>(.*)</text-style>" searching in {text 1 of text document "sicherheitskopie.txt"} options {search mode:grep, starting at top:false, wrap around:true, backwards:false, case sensitive:false, match words:false, extend selection:false} export search results browser 1 to file "Macintosh HD:Users:matthias:Desktop:fundstellen.txt" close search results browser 1 saving no open {file "Macintosh HD:Users:matthias:Desktop:fundstellen.txt"} with LF translation replace "~/Documents/sicherheitskopie\\.txt:(.*):\\s{3,100}" using "" searching in text 1 of text document "fundstellen.txt" options {search mode:grep, starting at top:true, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false} replace "<text-style (.*)>(.*)</text-style>" using "\\2" searching in text 1 of text document "fundstellen.txt" options {search mode:grep, starting at top:true, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false} replace ">" using ">" searching in text 1 of text document "fundstellen.txt" options {search mode:literal, starting at top:true, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false} replace "&" using "&" searching in text 1 of text document "fundstellen.txt" options {search mode:literal, starting at top:true, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false} end tell
Und ja: Ich liebe AppleScript. Ich mache zwar nicht so viel damit, wie ich wollen würde. Aber für Fälle wie diesen ist AppleScript Gold wert. Man braucht sich dank der Möglichkeit, Scripts aufzuzeichnen, nicht allzu viele Gedanken über die Syntax zu machen. Die Aufzeichnung ist nicht perfekt. Wenn man beispielsweise während der Aufzeichnung die Zwischenablage benutzt, muss man die entsprechenden Paste-Befehle aus dem Script löschen, weil die den Ablauf durcheinanderbringen.
Programm-übergreifende Automatisierung
Man kann mit AppleScript sogar Programm-übergreifend arbeiten. Im vorliegenden Fall könnte man via Finder die temporären Dateien noch löschen. (Mache ich, sobald ich dazu komme.) Ein Problem wie dieses lässt sich unter Windows nicht so einfach und nicht so elegant lösen.
Für den Fall, dass Sie gerade mein Blog lesen, lieber Tim Cook: Das sind IMHO (noch immer) die Stärken von Apple – nicht diese überteuerte Golduhr und nicht dieser Me-too-Musikdienst.