使用 ffmpeg 处理音频流的 PowerShell 脚本导致意外转换

使用 ffmpeg 处理音频流的 PowerShell 脚本导致意外转换

因此,我深入研究了如何使用 powershell 对 ffmpeg 进行递归转换。

该脚本几乎按照我的要求执行,但并非完全如此。在此参数中,AC3 转换为 Vorbis,PCM 转换为 Opus,同时复制 DTS。

我想要复制AC3并将PCM转换为pcm_s16be。

我的测试文件夹包含 ac3、dts 和 pcm 的视频

Stream mapping:
  Stream #0:0 -> #0:0 (mpeg2video (native) -> hevc (hevc_nvenc))
  Stream #0:1 -> #0:1 (ac3 (native) -> vorbis (libvorbis))
  Stream #0:2 -> #0:2 (copy)

知道我哪里做错了吗?顺便说一下,这是音乐视频

New-Item -ItemType Directory -Force -Path converted; 
Get-ChildItem -Path .\* -Include *.VOB,*.mkv -Recurse | ForEach-Object
  { 
  $audioStreams = ffprobe -loglevel error -select_streams a -show_entries stream=index:stream_tags=language:stream=codec_name -of csv=p=0 $_.FullName; $audioArgs = @(); 
  $audioStreams | ForEach-Object 
    { 
    $streamIndex,$streamLang,$codecName = $_.Split(","); 
    if ($streamIndex -ne $null -and $streamIndex -lt 2) 
      { 
      if ($codecName -eq "ac3") 
        { 
        $codec = "copy" 
        } 
      else 
        { 
        $codec = switch ($streamLang) { "dts" { "copy" } "pcm" { "pcm_s16be" } default { "copy" } } 
        }; 
      $audioArgs += "-map","0:a:?$streamIndex","-c:a:$streamIndex",$codec 
      } 
    }; 
  Write-Host "ffmpeg arguments: -fflags +genpts -i $($_.FullName) -vf bwdif,unsharp=lx=3:ly=3:la=0.5 -map 0:v @audioArgs -c:v hevc_nvenc -profile:v main10 -rc:v vbr -cq:v 18 converted\$($_.BaseName).mkv"; ffmpeg -fflags +genpts -i $_.FullName -vf bwdif,unsharp=lx=3:ly=3:la=0.5 -map 0:v @audioArgs -c:v hevc_nvenc -profile:v main10 -rc:v vbr -cq:v 18 converted\$($_.BaseName).mkv 
  }

相关内容