PowerShell 多平台一键生成 Blu-ray Live 分轨

前言

本人 n 年前的需求,需要自动化的将 Blu-ray Live 转换成 FLAC 格式的文件(自听&发种)。

⚠️ 注意:本脚本仅支持输出 flac !

前提

  1. 计算机安装有 PowerShell (Windows 已内置) Linux 、 MacOS 自行下载安装
  2. 计算机安装有 ffmpeg (Windows 需要添加到 Path 路径中)Linux 、 MacOS 通过软件源或使用 make 编译安装

用法

将下面脚本放在一个文件夹中,并在该文件夹启动 PowerShell 终端,然后输入以下命令

. .\Get-SplitedBDAudioTrack.ps1 ; Get-SplitedBDAudioTrack -a 01.flac -c 1.txt -o "E:\PPP 7th\Demux"

-a 是 eac3to 生成的 [code]flac[/code] 或者 wav 的路径
-c 是 eac3to 生成的章节文件的路径
-o 是输出文件夹

代码

#使用记事本另存为 Get-SplitedBDAudioTrack.ps1 编码为 UTF-8
function Get-SplitedBDAudioTrack {
    [CmdletBinding()]
    param (
        [Parameter(
            Mandatory = $true,
            Position = 0,
            HelpMessage = "Path to one or more locations.")]
        [ValidateNotNullOrEmpty()]
        [alias("a")]
        [string]
        $AudioTrackPath,
        [Parameter(
            Position = 1,
            HelpMessage = "Path to one or more locations.")]
        [ValidateNotNullOrEmpty()]
        [alias("c")]
        [string]
        $ChaptersFilePath,
        [Parameter(
            Mandatory = $true,
            Position = 2,
            HelpMessage = "Path to one or more locations.")]
        [ValidateNotNullOrEmpty()]
        [alias("o")]
        [string]
        $OutputDirectory
    )
    
    process {
        $ChaptersFile = Get-Content $ChaptersFilePath
        if (-not $ChaptersFile[0].StartsWith("CHAPTER")) {
            Write-Error -Message "Not a chapters file.";
            return 1;
        }
        $Chapters = New-Object 'System.Collections.Generic.Dictionary[[int],[string]]'
        $j = 0;
        for ($i = 0; $i -lt $ChaptersFile.Length; $i++) {
            $Chapters.Add((++$j), $ChaptersFile[$i].Split("=")[1]);
            $i++;
        }
        for ($i = 1; $i -le $j; $i++) {
            if ($i + 1 -gt $j) {
                ffmpeg -ss $Chapters[$i] -i $AudioTrackPath -acodec flac ($OutputDirectory + "\" + $i.ToString("00") + ".flac")
                break;
            }
            ffmpeg -ss $Chapters[$i] -to $Chapters[$i + 1] -i $AudioTrackPath -acodec flac ($OutputDirectory + "\" + $i.ToString("00") + ".flac")
        }
    }
}
posted @ 2022-05-02 23:14  Aoba_xu  阅读(85)  评论(0编辑  收藏  举报