Win10竟會損壞用戶文件!可通過Windows Update升級KB5003214補丁進行修
如果你是一名音樂發(fā)燒友,那么應該知道Flac這種常見的無損音樂格式。Flac音樂文件支持metadata,用戶可以編輯metadata,讓音樂文件帶有藝術家、所屬專輯、音軌等等信息。
通常來說,metadata和音頻數(shù)據(jù)并不相關,修改metadata并不會影響音頻本身。
但是,近日微軟官方公布了Win10中存在一個Bug,在Win10中用資源管理器修改Flac文件的metadata,竟會導致音頻的損壞!
根據(jù)Windows Latest的報道,微軟最新發(fā)布的一份支持文件披露,如果在Win10的2004或者更高版本中,使用文件資源管理器修改Flac音樂文件的metadata,就會損耗Flac音頻文件。
這個Bug在Win10專業(yè)版、家庭版、企業(yè)版、工作站版乃至其他版本的Win10中均有出現(xiàn)。
根據(jù)微軟本月早些時候發(fā)布的支持文件,Win10的文件資源管理器導致了這個錯誤,它破壞了Flac文件頭包含的ID3框架也就是metadata,而這個ID3框架負責存儲音頻的注釋,例如音樂標題、藝術家、專輯、曲目編號等。
在Win10上,F(xiàn)lac的處理程序忽視了ID3框架,該程序認為Flac文件在使用4字節(jié)的文件頭,當Flac文件被Win10編輯的時候,ID3框架被覆蓋了,導致沒有了開始代碼,導致了音樂播放器無法識別被修改后的文件。
因此,在Win10中,如果你直接用文件資源管理器修改Flac音樂文件的標題、藝術家等metadata,會導致該文件無法播放。
幸運的是,微軟已經確定了Bug的根本原因,用戶可以通過Windows Update升級KB5003214補丁進行修復。
在KB5003214補丁中,微軟確認了上文提到的錯誤已經被修復,修改了Flac的標題、藝術家等metadata后,F(xiàn)lac不會再變得無法播放。
而對于已經損壞了的Flac文件,微軟則發(fā)布了一個PowerShell腳本來進行修復,運行該腳本后Flac文件即可重新播放,不過已經從ID3框架中丟失了的metadata信息并不能恢復。
下面是利用PowerShell腳本修復Flac文件的具體方法。
1、開啟記事本;
2、復制以下字符,粘貼到記事本中:
# 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
}
3、保存文件,在“另存為”對話框中,將目錄定位到你想要保存PowerShell腳本的位置;
4、在文件名輸入框中,輸入“FixFlacFiles.ps1”,將另存為文件的類型更改為Text Documents (*.txt);
5、進入到你保存該PowerShell腳本的目錄;
6、右鍵點擊剛剛保存的腳本,然后選擇“使用PowerShell運行”;
7、出現(xiàn)提示時,輸入無法播放的Flac文件的文件名,然后按下回車鍵。
微軟建議大家安裝本月推送的可選累積更新,以避免修改Flac文件metadata出現(xiàn)的問題。
2022-01-12 16:50:28
2022-01-12 14:16:53
2022-01-12 09:59:21
2022-01-12 08:30:09
2022-01-12 08:28:09
2022-01-12 08:26:11
2022-01-12 08:24:25
2022-01-12 08:22:56
2022-01-12 08:21:28
2022-01-12 08:19:22
2022-01-12 08:15:03
2022-01-12 08:13:37
2022-01-12 08:12:23
2022-01-11 16:27:40
2022-01-11 12:02:31 熱門文章
- 1消息稱Win11調整硬件安裝需求之后可運行5.25寸軟盤
- 2蘋果iPad mini 6屏幕刷新率只有60Hz屏幕或不能滿足游戲需求
- 3三星永久關閉Tizen應用商店:目前相關手機用戶已經無法訪問
- 4三星Galaxy S22 Ultra手寫筆延遲突破2.8毫秒!成品預計今年2月推出
- 5Win11照片應用迎來更新:重新優(yōu)化調整圖片編輯功能
- 6Chrome 97正式版預計年內2月1日轉正 修復數(shù)十個安全BUG
- 7消息稱iPhone 14 Pro前置攝像頭將采用藥丸屏設計 FaceID轉移到顯示屏下
- 8對不起,我恐怕不能這么做?用戶發(fā)現(xiàn)蘋果Siri無法為Apple Music歌曲評分
- 9微信視頻號直播推出扶持不少于10萬個優(yōu)質商家激勵計劃 引導私域用戶直播
- 10微信支持數(shù)字人民幣支付:將新增“使用數(shù)字人民幣付款”選項
熱點專題
-
絕版旗艦堅果R2獲更新:TNT連...1月7日消息,堅果R2用戶在百度貼吧反映,堅果R2手機獲得了SmartisanOS更新,版本號為8 5 1,新版系統(tǒng)... -
iPhone 13 Pro需求產能供不...富士康鄭州工廠又在招工了,iPhone的產能缺口看來很大。據(jù)悉,iPhone 13 Pro需求旺盛,最大組裝廠富士... -
百度投資生物醫(yī)藥公司瑞順生...企查查APP顯示,1月4日,廣東瑞順生物技術有限公司發(fā)生工商變更,新增百度關聯(lián)公司三亞百川致新私募股權... -
盜版軟件Popcorn Time宣布關...1月5日 消息:盜版軟件Popcorn Time宣布關閉了。這個通過盜版BitTorrent資源向用戶傳遞電影內容,并承... -
快手12月份打擊私單交易等詐...1月5日消息,日前,快手發(fā)布了最新一期關于嚴厲打擊詐騙類帳號的公告,該平臺 12 月份共處罰詐騙類帳... -
再也不怕磁盤占用高了!微軟W...微軟的Office辦公軟件是每個打工人幾乎都離不開的,它實際上是包括Word、Excel、PPT等多種軟件在內的全... -
黑莓BlackBerry OS停止運行...1月4日,黑莓打造的BlackBerry OS停服。官方稱,黑莓不再提供適用于BlackBerry7 1OS及更早版本、Black... -
Intel預熱12代雞血版i9-12900...今天晚上,Intel將會發(fā)布12代酷睿桌面版非K系列、移動版,應該會有博銳商務版,以及一個特殊型號:i9-12... -
曝5G版iPhone SE將于上半年...除了挖孔屏iPhone 14、M2處理器MacBook Air、40核CPU+128核GPU的Mac Pro等產品,蘋果名記Mark Gurma... -
曝iPhone 14有望取消劉海設...對于iPhone 14來說,按照蘋果一貫的更新節(jié)奏看,這一代新機的外形要發(fā)生變化了,而去掉劉海,改用打孔...
Copy 2006-2020 財訊中國 版權所有<豫ICP備17019456號-9
聯(lián)系網站:52 78 229 @qq.com
營業(yè)執(zhí)照公示信息
聲明:本站所有文章、數(shù)據(jù)僅供參考,使用前務請仔細閱讀法律聲明,風險自負。

相關新聞