Applies ToWindows 10 Enterprise, version 2004 Windows 10 Home and Pro, version 2004 Windows 10 Pro, version 2004 Windows 10 Enterprise and Education, version 2004 Windows 10 Pro Education, version 2004 Windows 10 Pro for Workstations, version 2004 Windows 10 Pro, version 20H2 Windows 10 Enterprise, version 20H2 Windows 10 Enterprise and Education, version 20H2 Windows 10 Home and Pro, version 20H2 Windows 10 Pro Education, version 20H2 Windows 10 Pro for Workstations, version 20H2

สรุป

การอัปเดตนี้แก้ไขปัญหาการเข้ารหัสเมตาดาต้าซึ่งเป็นสาเหตุให้ไฟล์เพลง Free Lossless Audio Codec (FLAC) ไม่สามารถเล่นได้ ถ้าชื่อเรื่อง ศิลปิน หรือ Metadata อื่นๆ ถูกเปลี่ยนแปลง 

สาเหตุ

ปัญหานี้อาจเกิดขึ้นเมื่อไฟล์ FLAC มีเฟรม ID3 ก่อนส่วนหัวของ FLAC เฟรม ID3 มีเมตาดาต้า เช่น ชื่อเรื่องและศิลปิน ตัวจัดการคุณสมบัติ FLAC จะถือว่าไฟล์ FLAC ทั้งหมดที่เริ่มต้นด้วยรหัสเริ่ม 4 ไบต์ fLaC และไม่ได้เข้าบัญชีเฟรม ID3 ที่จุดเริ่มต้นของไฟล์ ดังนั้น เฟรม ID3 จะถูกเขียนทับโดยไม่ใช้รหัสเริ่มต้น fLaC แสดงไฟล์ไม่สามารถเล่นได้

การแก้ไข

เมื่อต้องการป้องกันปัญหานี้ให้กับไฟล์เพลง FLAC ในอนาคต ให้ติดตั้ง25 พฤษภาคม 2021 —KB5003214 (รุ่น OS 19041.1013, 19042.1013 และ 19043.1013) Preview

เมื่อต้องการซ่อมแซมไฟล์เพลง FLAC ที่ได้รับผลกระทบ ให้เรียกใช้สคริปต์ PowerShell ต่อไปนี้

สิ่งสำคัญ: สคริปต์นี้จะไม่คืนค่า Metadata ที่เก็บอยู่ในเฟรม ID3 ที่สูญหายไป อย่างไรก็ตาม ไฟล์จะเล่นได้อีกครั้ง

  1. เปิด แผ่นจดบันทึก

  2. คัดลอกและวางสคริปต์ต่อไปนี้ลงใน Notepad:

    # ลิขสิทธิ์ 2021 Microsoft

    # สคริปต์นี้จะซ่อมแซมไฟล์ FLAC ที่เสียหายโดย Media Foundation ในการอ้างอิงไปยัง KB5003430

    # อ้างอิงไปยัง KB5003430 เพื่อดูข้อมูลเพิ่มเติม

    param(

    [parameter(Mandatory=$true,

    HelpMessage="เส้นทางไปยังไฟล์ FLAC ที่เสียหายโดย Media Foundation",

    ValueFromRebanningArguments=$true)]

    [ValidateScript({ -not [String]::IsNullOr1mpty($_) -and (Test-Path $_) })]

    [String]$File

    )

    # เราต้องการส้ด้านหลังไฟล์ปัจจุบันเป็นกรณีของเรามีข้อผิดพลาดใดๆ

    $FileDirectory = Split-Path -แก้ไข$File

    $Filename = Split-Pathใบไม้ -แก้ไข$File

    $FullPath = Join-Path -แก้ไข$FileDirectory $Filename

    $Filename = [สตริง]::Format("Backup_{0:yyyyMMdd_hhmmss}_{1}", [DateTime]::Now, $Filename)

    $BackupLocation = Join-Path $FileDirectory $Filename

    Write-Output "เครื่องมือซ่อมแซม FLAC ของ Microsoft เครื่องมือนี้จะซ่อมแซมไฟล์เสียง FLAC ที่เสียหายเมื่อแก้ไขรายละเอียด"

    Write-Output "ไฟล์ที่ได้รับผลกระทบ: $FullPath"

    Write-Output "จะสํารองข้อมูลไฟล์: $BackupLocation"

    Write-Output "คุณต้องการใช้ต่อหรือไม่"

    $choice=$host.ui.PromptForChoice("การแก้ไขสคริปต์ FLAC", "คุณต้องการ continue", ('&Yes', '&No'), 1)

    ฟังก์ชัน ParsedStreamInfoMetadataBlock([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

    $MD 5HashBytes = New-Object ไบต์[] 16

    $stream Read($MD 5HashBytes, 0, $MD 5HashBytes.Length)

    $MD 5Hash = [Guid]($MD 5HashBytes)

    if ($sampleRate -eq 0)

    {

    return $false

    }

    # การผ่านการตรวจสอบเหล่านี้หมายความว่าเรามีส่วนหัวข้อมูลสตรีมและสามารถสร้างไฟล์ใหม่ได้

    Write-Output "ข้อมูล File Stream"

    Write-Output "อัตราตัวอย่าง: $sampleRate"

    Write-Output "แชนเนลเสียง: $channelCount"

    Write-Output "ความลึกของตัวอย่าง: $bitsPerSample"

    Write-Output "MD5 Audio Sample Hash: $MD 5Hash"

    return $true

    }

    if ($choice -eq 0)

    {

    Copy-Item $FullPath -ปลายทาง$BackupLocation -Force

    $stream = [System.IO.File]::Open($FullPath, [System.IO.FileMods]::Open)

    $stream Seek(4, [System.IO.SeekOrigin]::Begin)

    ขณะ ($stream ReadByte() -eq 0) {}

    # ตอนนี้ เราต้องค้นหาว่าเฟรม Metadata FLAC ที่ถูกต้องเริ่มต้นที่ไหน

    # เราอาจจะชี้ไปที่ไบต์สุดท้ายของสมาชิกขนาด ดังนั้นเราจะค้นหา 4 ไบต์และลองอีกครั้ง

    $flacDataStartPosition = $stream ตําแหน่ง - 4

    $stream Seek($flacDataStartPosition, [System.IO.SeekOrigin]::Begin)

    while (-not(ParsedStreamInfoMetadataBlock($stream)))

    {

    $flacDataStartPosition = $flacDataStartPosition + 1

    $stream Seek($flacDataStartPosition, [System.IO.SeekOrigin]::Begin)

    }

    # แทรกรหัสเริ่มต้น

    $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.FileMods]::CreateNew)

    [byte[]]$startCode = [char[]]('f', 'L', 'a', 'C');

    $fixedStream.Write($startCode, 0, $startCode.length)

    $stream คัดลอกไปยัง($fixedStream)

    $stream Close()

    $fixedStream.Close()

    Move-Item -Force "$FullPath.tmp" $FullPath

    }

  3. บนเมนูไฟล์ให้คลิกบันทึก

  4. ในกล่องโต้ตอบ บันทึก เป็น ให้ค้นหาโฟลเดอร์ที่คุณต้องการบันทึกสคริปต์ PowerShell

  5. ในกล่อง ชื่อไฟล์ ให้พิมพ์ FixFlacFiles.ps1แล้วเปลี่ยนกล่อง บันทึกเป็น ชนิด เป็น เอกสารข้อความ (*.txt)แล้วคลิกบันทึก

  6. ใน Windows Explorer ให้ค้นหาสคริปต์ PowerShell ที่คุณบันทึกไว้

  7. คลิกขวาที่สคริปต์ แล้วคลิก เรียกใช้ด้วยPowerShell

  8. เมื่อได้รับพร้อมท์ ให้พิมพ์ชื่อไฟล์ของไฟล์ FLAC ที่ไม่เล่นได้ แล้วกดEnter

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย