Text-Datei Bestimmte Werte auslesen und vergleichen
Hallo zusammen,
ich arbeite in einem Tonstudio und auch hier entwickeln sich neue Arbeitsweisen.
Mein Problem:
Ich habe eine .edl-Datei: Das ist eine Datei die Timecodes enthält, die ich in meine DAW (Aufnahme und Schnitt-Programm) laden kann. Mit dieser EDL-Datei wird meine Aufnahme automatisch umsortiert, sodass ich weniger Arbeit mit dem Schnitt habe. Der Inhalt einer EDL sieht bspw. so aus:
Das klappt auch alles und nun kommt mein Problem.
Diese Timecodes sind nur die Angaben für den Rohschnitt.
Die Angaben für den Feinschnitt werden danach von der Redaktion in einem Worddokument vorgenommen und sieht dann wie folgt aus:
Die Timecodes sind auch alle in diesem Worddokument vorhanden, bloß in einer neuen Reihenfolge und mit ausgeschriebenem Text, also wurden Sequenzen vom Ende der Aufnahme in die Mitte getextet, sodass ich eine neue Anordnung der Timecodes habe.
Meine Frage:
Ist es überhaupt möglich, dass ein Skript erstellt werden kann, dass aus dem Word-Dokument erstmal nur die Klammern und deren Inhalt ausliest (also meine Timecode-Angaben). Und dann anschließend mit meiner EDL-Datei vergleicht und dann die EDL-Datei neu ausrichtet an der aktuellen Reihenfolge aus den Werten des Word-Dokuments?
Vielen Dank und liebe Grüße
Christoph
ich arbeite in einem Tonstudio und auch hier entwickeln sich neue Arbeitsweisen.
Mein Problem:
Ich habe eine .edl-Datei: Das ist eine Datei die Timecodes enthält, die ich in meine DAW (Aufnahme und Schnitt-Programm) laden kann. Mit dieser EDL-Datei wird meine Aufnahme automatisch umsortiert, sodass ich weniger Arbeit mit dem Schnitt habe. Der Inhalt einer EDL sieht bspw. so aus:
TITLE: 2023-02-14.wav
FCM: NON-DROP FRAME
001 01_Trint A C 00:10:23:00 00:10:23:21 00:00:00:00 00:00:00:21
* FROM CLIP NAME: 2023-02-14.wav
002 01_Trint A C 00:10:24:20 00:10:25:09 00:00:00:21 00:00:01:11
* FROM CLIP NAME: 2023-02-14.wav
003 01_Trint A C 00:10:25:21 00:10:27:17 00:00:01:11 00:00:03:06
* FROM CLIP NAME: 2023-02-14t.wav
004 01_Trint A C 00:10:28:16 00:10:31:10 00:00:03:06 00:00:06:01
* FROM CLIP NAME: 2023-02-14.wav
Das klappt auch alles und nun kommt mein Problem.
Diese Timecodes sind nur die Angaben für den Rohschnitt.
Die Angaben für den Feinschnitt werden danach von der Redaktion in einem Worddokument vorgenommen und sieht dann wie folgt aus:
HOST 4
[00:10:23] Hallo, Bettina. [00:10:23][0.3]
GAST 1
[00:10:24] Ja, hallo. [00:10:25][0.2]
HOST 5
[00:10:25] Hi. Schön, dass du da bist. [00:10:27][1.4]
GAST 2
[00:12:46] Ja, ich freue mich total. Schön, dass ihr mich einladet. [00:12:48][2.1]
[4.0]
Die Timecodes sind auch alle in diesem Worddokument vorhanden, bloß in einer neuen Reihenfolge und mit ausgeschriebenem Text, also wurden Sequenzen vom Ende der Aufnahme in die Mitte getextet, sodass ich eine neue Anordnung der Timecodes habe.
Meine Frage:
Ist es überhaupt möglich, dass ein Skript erstellt werden kann, dass aus dem Word-Dokument erstmal nur die Klammern und deren Inhalt ausliest (also meine Timecode-Angaben). Und dann anschließend mit meiner EDL-Datei vergleicht und dann die EDL-Datei neu ausrichtet an der aktuellen Reihenfolge aus den Werten des Word-Dokuments?
Vielen Dank und liebe Grüße
Christoph
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6046496396
Url: https://administrator.de/forum/text-datei-bestimmte-werte-auslesen-und-vergleichen-6046496396.html
Ausgedruckt am: 22.04.2025 um 05:04 Uhr
3 Kommentare
Neuester Kommentar

Hi.
Aber das man Word für die Detaillierung nutzt ist mir jetzt auch noch nicht untergekommen, aber soll ja auch User geben die mit Powerpoint ihre Rechnungen ausdrucken
.
Gruß h.
P.s. schöner Dreher im Usernamen 😉
Zitat von @chrsitopherik:
Die Timecodes sind auch alle in diesem Worddokument vorhanden, bloß in einer neuen Reihenfolge und mit ausgeschriebenem Text,
Aber in der Word-Datei ohne die letzten Digits für die Einzel-Frame-Angabe, man müsste also die Frameangaben in der EDL ignorieren, könnte dann aber zu Dubletten führen sollte es zwei Schnitte rein im Framebereich geben (innerhalb einer Sekunde).Die Timecodes sind auch alle in diesem Worddokument vorhanden, bloß in einer neuen Reihenfolge und mit ausgeschriebenem Text,
Meine Frage:
Ist es überhaupt möglich, dass ein Skript erstellt werden kann, dass aus dem Word-Dokument erstmal nur die Klammern und deren Inhalt ausliest (also meine Timecode-Angaben). Und dann anschließend mit meiner EDL-Datei vergleicht und dann die EDL-Datei neu ausrichtet an der aktuellen Reihenfolge aus den Werten des Word-Dokuments?
Ja absolut kein Problem, aber Batch würde ich dafür ehrlich gesagt nicht mehr verwenden. Powershell,Python, c# etc. wäre schon eher geeigneter, die haben schon alle nötigen Werkzeuge an Bord und man braucht nicht dauernd zu externen oder zusätzlichen Tools greifen.Ist es überhaupt möglich, dass ein Skript erstellt werden kann, dass aus dem Word-Dokument erstmal nur die Klammern und deren Inhalt ausliest (also meine Timecode-Angaben). Und dann anschließend mit meiner EDL-Datei vergleicht und dann die EDL-Datei neu ausrichtet an der aktuellen Reihenfolge aus den Werten des Word-Dokuments?
Aber das man Word für die Detaillierung nutzt ist mir jetzt auch noch nicht untergekommen, aber soll ja auch User geben die mit Powerpoint ihre Rechnungen ausdrucken
Gruß h.
P.s. schöner Dreher im Usernamen 😉
Servus @chrsitopherik, willkommen auf Administrator.de!
Habe ich dir hier ein mögliches Grundgerüst für dein Vorhaben mit Powershell erstellt.
Wie @6017814589 aber schon angemerkt hat fehlen in deinem Word-Beispiel die letzten beiden Ziffern in den TimeCodes, habe diese deswegen im folgenden Skript einfach mal für die Zuordnung ignoriert, es werden also nur die ersten drei Zifferngruppen XX:XX:XX der Timecodes in der EDL ausgewertet, Falls das ein Fehler/Irrtum von deiner Seite war lässt sich das natürlich nachträglich noch korrigieren.
Individuelle Anpassung gerne nach Absprache bei Bedarf auch per PN.
Grüße Uwe
Habe ich dir hier ein mögliches Grundgerüst für dein Vorhaben mit Powershell erstellt.
Wie @6017814589 aber schon angemerkt hat fehlen in deinem Word-Beispiel die letzten beiden Ziffern in den TimeCodes, habe diese deswegen im folgenden Skript einfach mal für die Zuordnung ignoriert, es werden also nur die ersten drei Zifferngruppen XX:XX:XX der Timecodes in der EDL ausgewertet, Falls das ein Fehler/Irrtum von deiner Seite war lässt sich das natürlich nachträglich noch korrigieren.
# =================================================
# source word file
$wordfile = 'E:\test.docx'
# source edl file
$edlfile = 'E:\test.edl'
# output path for new ordered edl file
$edlfile_new = 'E:\test_finecut.edl'
# =================================================
$ErrorActionPreference = 'Stop'
# function to get word document main raw text content (only supports new the OpenXML Formats *.docx *.dotm etc. not the old binary formats)
function Get-WordContent {
param([parameter(mandatory=$true)][ValidateScript({Test-Path $_})][string]$path)
$doc = $null;$tmp = ''
try{
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.IO.Compression.Filesystem
$doc = [System.IO.Compression.ZipFile]::Open($path,[System.IO.Compression.ZipArchiveMode]::Read)
$tmp = "$env:TEMP\$([IO.Path]::GetRandomFileName())"
$doc.Entries | ?{$_.FullName -match '^word/document\.xml$'} | %{[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$tmp)}
$xml = New-Object XML
$xml.Load($tmp)
return $xml.DocumentElement.innerText
}catch{
throw $_
}finally{
if ($doc){$doc.Dispose()}
if($tmp -ne ''){remove-item $tmp -EA SilentlyContinue -Force}
}
}
# get wordfile content
$wordcontent = Get-WordContent $wordfile
# get edlfile content
$edlcontent = Get-Content $edlfile -raw
# get timecodes from word file
$word_timecodes = [regex]::matches($wordcontent,'(?is)\[(\d{2}:\d{2}:\d{2})\].*?\[(\d{2}:\d{2}:\d{2})\]').Captures | %{"$($_.Groups[1].Value) $($_.Groups[2].Value)"}
# get header from edl file
$edl_header = [regex]::match($edlcontent,'(?ism)^TITLE:.*?(?=^\d{3})').Value.trim()
# create ordered hashtable
$edl_order = [ordered]@{}
# add edl entries to hashtable
[regex]::matches($edlcontent,'(?ism)^\d+\s.*?(\d{2}:\d{2}:\d{2}):\d{2} (\d{2}:\d{2}:\d{2}):\d{2}.*?(?=^\d+\s|\z)').Captures | %{
$edl_order."$($_.Groups[1].Value) $($_.Groups[2].Value)" = $_.Value.trim()
}
# output header and word ordered edl entries to new edlfile with leading counters rewritten
$edl_header,($word_timecodes | %{$cnt=1}{$edl_order.$_ -replace '^\d+',('{0:D3}' -f $cnt);$cnt++}) | Set-Content $edlfile_new
Grüße Uwe