因此,我深入研究了如何使用 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
}