Dubbing

Also, Nachtfalter hat mich gebeten, die Reihe “C4D für Clonk” auf Englisch zu vertonen. Eine spannende Herausforderung, wie ich finde! Sowas habe ich noch nie gemacht.
Worauf kommt es dabei an? Mir geht durch den Kopf: Eine Übersetzung, die nicht nur sinngemäß richtig ist, sondern auch vom Timing her passen muss. Dann den Spaß sprechen und aufnehmen und an NF zur Nachbearbeitung schicken. Also Audacity öffnen, Mikro her und lossprechen…? Nein! Ganz Ingenieurs-mäßig orientiere ich mich erstmal daran, was die Profis tun und welche Werkzeuge sie nutzen. Dubbing ist schließlich alltäglich im Filmgeschäft, also kennt man sich dort vermutlich damit aus.

Um es kurz zu machen, wenn überhaupt mit Tools gearbeitet wird gibt es zwei Varianten: Karaoke-mäßig stehender Text mit einer bewegten Markierung, oder ein laufendes Textband (“Rythmo Band”). Letzteres gefällt mir persönlich zwar besser (man sieht Wortlängen, Pausen und ihre Längen, etc. auf einen Blick), aber ich bin mit allem zufrieden, das mich sinnvoll unterstützt. Und da kommen wir auch gleich zum Problem: Die existierende Software ist entweder ungeeignet oder teuer. Verzichten möchte ich andererseits auch nicht. Da es mir nur darum geht, einen Text mit Timing anzuzeigen und Sound vom Mikrofon aufzunehmen, dachte ich mir, ich schreibe mir ein kleines Tool selbst.

Ein erster Mockup für das Interface ist erstellt. Arbeitstitel des Tools: DubbingKaraoke. :wink:

DAS erklärt einiges unserer letzten Unterhaltung .

Nett. Wie erstellst du die?

Die habe ich mir im GUI-Designer von Netbeans gebaut (plus noch ein paar Zeilen Code, um den Hintergrund der ersten zwei Wörter einzufärben und den Windows-Widget-Stil zu kriegen).

Das gleiche Problem hatte ich auch. Ich habe es mit Skriptvorlesen und Akzenten gelöst.

Habe mir Gedanken über internen Aufbau, Datenstrukturen, etc. gemacht. Das Dateiformat für Texte wird folgendermaßen aussehen:
- Ein “Segment” pro Zeile
- Ein Segment besteht aus einem Stück Text (ein kurzer Satz oder Teilsatz), Anfangszeit und Länge. Wenn man also z.B. einen Teilsatz oder ein Wort besonders gedehnt ausgesprochen haben möchte, kann man diesen Teil in einem neuen Segment beschreiben.
- Daraus liest das Tool aus wann welcher Text erscheinen soll, und wie schnell der Marker darüber wandert.
- Das Dateiformat ist quasi CSV: Eine Zeile ist nach dem Muster Startzeit[Tabstopp]Länge[Tabstopp]Text aufgebaut.
- Sollten Tabstopps im Text vorkommen, müssen diese aber (anders als bei CSV) nicht maskiert oder der Text in Anführungszeichen gesetzt werden. Alles nach dem zweiten Tabstopp gilt einfach als Text.
- Startzeit und Länge werden in Millisekunden angegeben in Form von positiven Zahlen
- Zeitliche Überschneidungen sind nicht erlaubt
- Zeichenkodierung ist UTF-8, Zeilenenden sind im Windows- oder Unix-Format
- Kommentarzeilen sind möglich und beginnen mit einem #

Beispiel:
1000  1000  Guten Tag!
2200  1800  Wie geht es euch heute?


[Edit]
- Tabstopp statt Semikolon
- Kommentarzeilen zum Dateiformat hinzugefügt

Tabs statt Semikolons würden hier vielleicht auch gut funktionieren, da die Zeiten dann schön übereinander bleiben (sofern der Tabstopp groß genug eingestellt ist oder gar elastisch ist).

Stimmt, wäre noch besser. Ich ändere es mal, danke!

GUI-Funktionalität
Ich stelle es mir so vor, dass man dem wandernden Marker entsprechend die aktuelle Zeile abliest, aber gleichzeitig im Blick noch ein paar Informationen über die nächste Zeile bekommen kann.
- Die Hintergrundfärbung der aktuellen Zeile zeigt an, wo man (ungefähr) sein sollte beim Sprechen.
- Der Fortschrittsbalken über der aktuellen Zeile macht eine Aussage über eine mögliche Pause zwischen aktueller und nächster Zeile.
- In der Zeile über dem Fortschrittsbalken kann man schon die nächste Zeile ablesen.

Fortschrittsbalken
Während die aktuelle Zeile läuft, ist der Balken entweder leer oder voll:
- Voll, wenn keine Pause oder eine sehr kurze auf die aktuelle Zeile folgt
- Leer, wenn eine "nicht sehr kurze" Pause folgt
⇒ Daraus kann man ableiten, ob man gleich weitersprechen muss.
Wenn gerade Pause ist, füllt sich der Fortschrittsbalken gemäß der Pausenlänge und der verstrichenen Zeit.
⇒ Daran sieht man, wann es weitergeht.
Wenn die Pause vorbei ist, rutscht die nächste Zeile in die aktuelle Zeile, die nächste Zeile wird "nachgefüllt" mit dem nächsten Segment in der Textdatei (sofern vorhanden), und der Marker fängt an zu laufen.

Was mir eventuell noch fehlt ist eine Möglichkeit abzuschätzen, wie schnell die aktuelle Zeile gesprochen werden soll. Vielleicht eine kleine Sekunden-Angabe irgendwo?

>Was mir eventuell noch fehlt ist eine Möglichkeit abzuschätzen, wie schnell die aktuelle Zeile gesprochen werden soll. Vielleicht eine kleine Sekunden-Angabe irgendwo?


Als visueller Ansatz koenntest du vielleicht den Zeichenabstand veraendern, sodass die Breite der Zeile von der gewuenschten Zeit abhaengt - allerdings geht dabei moeglicherweise einiges an Lesbarkeit verloren.

Datei-Output
Ein Blick in die Zukunft, denn so weit bin ich noch lange nicht. Aber: Ich würde gerne das Tool selbst Audio vom Mikrofon aufnehmen und in Dateien schreiben lassen. Ich habe darüber nachgedacht, wie diese Dateien aussehen sollen. So wie ich das sehe gibt es zwei Möglichkeiten:
1. Eine große Audiodatei, in der Sprache und Pausen enthalten sind
2. Pro Segment eine Datei, also nur mit Sprache

Für eine große Audiodatei spricht, dass Nachtfalter sie einfacher in's Video einfügen kann. Da das Tool die Timings verwaltet sollte die Datei gleich perfekt passen und keine Schnitte benötigen. Dagegen spricht, dass die Implementierung etwas schwieriger wird: Das Tool sieht vor, dass man Segmente vor und zurück springen kann, z.B. um ein schlecht gesprochenes zu wiederholen. Dann müsste ich passend dazu in der Audiodatei seeken. Ich weiß im Moment nicht, wie das geht.
Für die kleinen Dateien spricht dementsprechend, dass ich einfach pro Segment eine Datei erstellen oder überschreiben kann. Benennen würde ich sie dann gemäß der Startzeit des Segments, wie in der Eingabe-Textdatei angegeben. Das macht es für NF schwieriger, aber immerhin hätte er den Anhaltspunkt wo der Abschnitt hingehört.

Die Segmente zu einer einzelnen Datei zusammenzusetzen geht aber eigentlich recht einfach z.B. mit ffmpeg.

Du könntest natürlich auch beides möglich machen und unten ein Häkchen hinsetzen, welches man nach Lust und Laune (de)aktivieren kann:
[x] Ergebnis zusammengesetzt in eine Sounddatei schreiben.

…es sei denn, du willst sowas nicht und die GUI so einfach wie möglich halten.

Auch wahr. Vorerst würde ich mich trotzdem auf eine der Varianten beschränken, weil ich schnell(er) zu einem benutzbaren Ergebnis kommen möchte. Später könnte ich mir das durchaus als Option im Menü oder so vorstellen.

> …es sei denn, du willst sowas nicht und die GUI so einfach wie möglich halten.


Sinnvolle Funktionen baue ich gerne (irgendwann) ein. Ich würde mich beim Interface an die Regeln "Sinnvolle Standards" und "So einfach wie möglich, so komplex wie nötig" halten. Ich arbeite ja nicht für Gnome .

Ich suche nach einem besseren Namen, zufrieden bin ich mit dem Arbeitstitel nämlich nicht. Was würde einen guten Namen für mich ausmachen?
- Der Begriff "Dubbing" sollte im Namen enthalten sein. "Dub" ginge auch, aber wegen Verwechslungsgefahr mit Dubstep wäre mir die längere Variante lieber. (Ernsthaft: Wenn man was zum Thema Dubbing sucht und nur "Dub" in die Suchmaschine seiner Wahl eingibt sind ziemlich viele Ergebnisse zum Thema Dubstep enthalten - gefällt mir nicht. "Dubbing" liefert andererseits auch zig Ergebnisse zum Thema Angeln. baaah…) Synonyme wären auch in Ordnung ("Synchro(nisation)", …).
- Sollte nicht zu verspielt aber auch nicht zu abstrakt/trocken klingen
- Sollte nicht zu überheblich klingen ("Dubbing Master" entspricht z.B. nicht meinem Geschmack, ich mag's lieber etwas demütiger)
- Darf nicht bescheuert klingen (Ein Freund schlug mir "DubDub" vor - das ist mir aber zu plemplem .)
- Sollte möglichst einzigartig sein (Damit das Tool auch gut per Suchmaschine gefunden werden kann)
- Kann ruhig möglichst genau beschreiben, was das Tool tut, muss jetzt aber nicht unbedingt sein ("Dubbing Karaoke" beschreibt das ja halbwegs, aber der Name ist mir nicht ernsthaft genug. "Dubbing Prompter" wäre besser, aber ist auch wieder so trocken)

Startschuss! \o/

revno: 1
committer: Nachtschatten <ChyH@gmx.net>
branch nick: trunk
timestamp: Fri 2013-03-08 01:50:44 +0100
message:
  Started project.


Ich habe zwar unfassbar wenig Zeit, aber ich habe dennoch in den letzten Tagen ein paar grundlegende Dinge geklärt: Die grundlegende Architektur (MVVM), die Unterteilung des Model in technisches und domänenspezifisches Modell, sowie einige zentrale Klassen in ersterem.
Ein paar Zeilen Code* sind ebenfalls schon geschrieben und ich habe herumprobiert, wie meine Interfaces und Datenstrukturen aussehen sollen. Sobald es was Vorzeigbares gibt mehr dazu.

*Java, die GUI wird vermutlich Swing nutzen.