捐血一袋救人一命

2020年11月23日 星期一

使用 PowerShell 呼叫 ffmpeg,將多個 .ts 檔案合併,並轉換成 mp4 影片

使用 PowerShell 呼叫 ffmpeg,將多個 .ts 檔案合併,並轉換成 mp4 影片


# 自行指定 ffmpeg.exe 的完整路徑

$ffmpeg = """C:\Program Files\ffmpeg\bin\ffmpeg.exe"""

# 指定 .ts 影片路徑,請不要使用中文,ffmpeg 會不認得

$Root = "d:\tmp\Demon Slayer_0001"

# 如果清單檔案存在,就刪除現有清單檔案

If(Test-Path -Path "$Root\list.txt"){

    Remove-Item -Path "$Root\list.txt"

}

# 讀取 *.ts 檔案,排序,將檔案名稱輸出到清單檔案

Get-ChildItem -Path $Root -Filter *.ts | Sort-Object -Property Name | ForEach{

    "file '$Root\$_'" | Out-File -FilePath "$Root\list.txt" -Append -Encoding oem

}

Write-Host "Combine Files.... Please Wait"

# 清單檔案包含路徑,所以要加上 -safe 0 參數;避免路徑中有空白字元,所以路徑檔名要有雙引號

$ArgumentList = "-f concat -safe 0 -i ""{0}\list.txt"" -c copy ""{0}\Combine.ts""" -f $Root

Write-Host "$ffmpeg $ArgumentList" -ForegroundColor Red

Start-Process -FilePath $ffmpeg -ArgumentList $ArgumentList -Wait -WindowStyle Hidden -WorkingDirectory $Root


Write-Host "Convert Files.... Please Wait"

$ArgumentList = "-i ""{0}\Combine.ts"" -acodec copy -vcodec copy ""{0}\Combine.mp4""" -f $Root

Write-Host "$ffmpeg $ArgumentList" -ForegroundColor Red

Start-Process -FilePath $ffmpeg -ArgumentList $ArgumentList -Wait -WindowStyle Hidden -WorkingDirectory $Root


0 意見: