Microsoft hat einen Artikel mit einem Workaround herausgegeben, der einen Fehler beschreibt, dass FLAC-kodierte Dateien bei der Bearbeitung der Metadaten im Windows Explorer zerstört werden können. Falls es schon aufgetreten ist, hat man auch gleich ein Script beigelegt.
Um diesen Fehler vorzubeugen, empfiehlt Microsoft die KB5003214 zu installieren. Dieser Workaround ist für die Windows 10 2004, Windows 10 20H2 und Windows 10 21H1
„Dieses Problem kann auftreten, wenn die FLAC-Dateien einen ID3-Frame vor dem FLAC-Header enthalten. Der ID3-Frame enthält Metadaten wie Titel und Interpret. Der FLAC-Property-Handler ging davon aus, dass alle FLAC-Dateien mit dem 4-Byte-Startcode fLaC beginnen und berücksichtigte den ID3-Frame am Anfang der Datei nicht. Daher würde der ID3-Frame ohne den Startcode fLaC überschrieben werden, wodurch die Datei nicht abspielbar wäre.“
Ich hab euch das Script einmal schon abgespeichert, sodass ihr es nur noch herunterladen und ausführen müsst.
Manueller Workaround:
- Notepad (Editor) öffnen und diesen Inhalt hineinkopieren:
Info aufklappen
# Copyright 2021 Microsoft # This script will repair a FLAC file that has been corrupted by Media Foundation in reference to KB5003430. # Refer to KB5003430 for further information param( [parameter(Mandatory=$true, HelpMessage="The path to the FLAC file that has been corrupted by Media Foundation", ValueFromRemainingArguments=$true)] [ValidateScript({ -not [String]::IsNullOrEmpty($_) -and (Test-Path $_) })] [String]$File ) # We need to back up the current file incase we have any errors $FileDirectory = Split-Path -Resolve $File $Filename = Split-Path -Leaf -Resolve $File $FullPath = Join-Path -Resolve $FileDirectory $Filename $Filename = [String]::Format("Backup_{0:yyyyMMdd_hhmmss}_{1}", [DateTime]::Now, $Filename) $BackupLocation = Join-Path $FileDirectory $Filename Write-Output "Microsoft FLAC Repair Tool. This tool will repair a FLAC audio file that was corrupted when editing its details." Write-Output "Affected File: $FullPath" Write-Output "A backup of the file will be made: $BackupLocation" Write-Output "Do you wish to continue?" $choice=$host.ui.PromptForChoice("Fixing FLAC Script", "Do you wish to continue", ('&Yes', '&No'), 1) function ParseStreamInfoMetadataBlock([System.IO.FileStream]$stream) { $blockType = $stream.ReadByte() $lastBlock = ($blockType -shr 7) -ne 0 $blockType = $blockType -band 0x7F if ($blockType -ne 0) { return $false } $blockSize = (($stream.ReadByte() -shl 16) -bor ($stream.ReadByte() -shl 8) -bor $stream.ReadByte()) if ($blockSize -lt 34) { return $false } $minAudioBlockSize = ($stream.ReadByte() -shl 8) -bor $stream.ReadByte() $maxAudioBlockSize = ($stream.ReadByte() -shl 8) -bor $stream.ReadByte() if ($minAudioBlockSize -lt 16 -or $maxAudioBlockSize -lt 16) { return $false } $minFrameSize = (($stream.ReadByte() -shl 16) -bor ($stream.ReadByte() -shl 8) -bor $stream.ReadByte()) $maxFrameSize = (($stream.ReadByte() -shl 16) -bor ($stream.ReadByte() -shl 8) -bor $stream.ReadByte()) $sampleInfo = (($stream.ReadByte() -shl 24) -bor ($stream.ReadByte() -shl 16) -bor ($stream.ReadByte() -shl 8) -bor $stream.ReadByte()) $sampleRate = $sampleInfo -shr 12 $channelCount = (($sampleInfo -shr 9) -band 0x7) + 1 $bitsPerSample = (($sampleInfo -shr 4) -band 0x1F) + 1 [UInt64]$sampleCount = (($stream.ReadByte() -shl 24) -bor ($stream.ReadByte() -shl 16) -bor ($stream.ReadByte() -shl 8) -bor $stream.ReadByte()) $sampleCount = (([UInt64]$sampleInfo -band 0xF) -shl 32) -bor $sampleCount $MD5HashBytes = New-Object byte[] 16 $stream.Read($MD5HashBytes, 0, $MD5HashBytes.Length) $MD5Hash = [Guid]($MD5HashBytes) if ($sampleRate -eq 0) { return $false } # Passing these checks means that we likely have a stream info header and can rebuild the file Write-Output "File Stream Information" Write-Output "Sample Rate: $sampleRate" Write-Output "Audio Channels: $channelCount" Write-Output "Sample Depth: $bitsPerSample" Write-Output "MD5 Audio Sample Hash: $MD5Hash" return $true } if ($choice -eq 0) { Copy-Item $FullPath -Destination $BackupLocation -Force $stream = [System.IO.File]::Open($FullPath, [System.IO.FileMode]::Open) $stream.Seek(4, [System.IO.SeekOrigin]::Begin) while ($stream.ReadByte() -eq 0) {} # We now need to figure out where a valid FLAC metadata frame begins # We are likely pointing to the last byte of the size member so we'll seek back 4 bytes and retry $flacDataStartPosition = $stream.Position - 4 $stream.Seek($flacDataStartPosition, [System.IO.SeekOrigin]::Begin) while (-not(ParseStreamInfoMetadataBlock($stream))) { $flacDataStartPosition = $flacDataStartPosition + 1 $stream.Seek($flacDataStartPosition, [System.IO.SeekOrigin]::Begin) } # Insert the start code $stream.Seek($flacDataStartPosition, [System.IO.SeekOrigin]::Begin) if (Test-Path "$FullPath.tmp") { Remove-Item "$FullPath.tmp" } $fixedStream = [System.IO.File]::Open("$FullPath.tmp", [System.IO.FileMode]::CreateNew) [byte[]]$startCode = [char[]]('f', 'L', 'a', 'C'); $fixedStream.Write($startCode, 0, $startCode.Length) $stream.CopyTo($fixedStream) $stream.Close() $fixedStream.Close() Move-Item -Force "$FullPath.tmp" $FullPath }
- Im Menü Datei -> Speichern unter den Dateinamen FixFlacFiles.ps1 eingeben und speichern
- Rechtsklick auf das Skript und „Mit PowerShell ausführen“
- Jetzt wird man aufgefordert, den Dateinamen der nicht abspielbaren FLAC-Datei einzugeben und drückt dann Enter.
Windows 10 Tutorials und Hilfe
In unserem Windows 10 Wiki findet ihr sehr viele hilfreiche Tipps und Tricks. Falls ihr Fragen habt, dann stellt diese ganz einfach bei uns im Forum.
- Installationsmedien: Aktuelle Installationsdateien findet ihr hier immer in der rechten Sidebar. Windows 10 2004 ISO (19041), oder 20H2 (2009) ISO (19042), Windows 10 21H1 (19043) ISO
- Installation: Windows 10 Clean installieren, Win 10 2004 / 20H2 / 21H1 neu installieren
- Aktuelle Probleme mit der: Windows 10 2004 / 20H2 / 21H1
- Reparaturen: Inplace Upgrade Reparatur, Win 10 reparieren über DISM, sfc und weiteres, Windows Update reparieren, Startmenü reparieren, Apps reparieren, Store reparieren, Netzwerk reparieren
- Anmeldung: Win 10 automatische Anmeldung
- Entfernen, Deinstallieren: Apps deinstallieren
- Datei Explorer: Ordner unter Dieser PC entfernen, Netzwerk, OneDrive u.a. im Explorer entfernen
- Richtige Nutzung: Startmenü richtig nutzen, Suche richtig nutzen,
- Wichtig: In jedem Tutorial steht, für welche Version es geeignet ist.
Manchmal ist weniger Wissen mehr. Zum Glück wußte ich nicht, dass man die Tags mit dem Explorer bearbeiten kann. Ich hab meine gesamte Musik im FLAC-Format, das sind ca. 2000 Rock/Pop/Blues und Hunderte Klassik-CDs. Damit ist mir ein Riesenärger erspart geblieben. Ich werd auch weiterhin dem Tool „mp3Tag“ vertrauen, es kam damit noch nie zum Datenverlust. Im Gegenteil, man kann damit sogar in FLAC-Dateien fälschlicherweise bzw. unnötige vorhandene ID3-Tags durch die richtigen FLAC-Headers ersetzen.