結論
一番簡単な対処法は「-」「:」を含む引数を「”」などで囲むことです。
ffmpeg -i input.mp4 "-c:v" h264_nvenc output.mp4
原因
PowerShellには以下のコマンドを同様のものとして扱う仕様があります。( 記事執筆現在 ( PowerShell 7.5.1 ) )
-<parameter_name> <parameter_value>
-<parameter_name>:<parameter_value>

about_Parameters - PowerShell
PowerShell でコマンド パラメーターを操作する方法について説明します。
この仕様によって本来「-c:v」としてコマンドに渡したい引数が「-c:」と「v」に分けられ、思わぬエラーが発生します。
このエラーが発生する状況
私の場合は以下の関数をPowerShwll起動時に読み込んでいます。
function ffmpeg {
ffmpeg.exe -hide_banner $args
}
このような場合に上記のような状況が発生し得ます。
まじめな解決策
「”」で毎回囲むのが面倒な人向けです。
解決策と言っても要は分割されるなら結合し直せばいいだけです。
function Merge-ColonSeparatedArgs {
if ($Args.Count -eq 0) {
return @()
}
$result = @()
$i = 0
while ($i -lt $Args.Count) {
$currentArg = $Args[$i]
# ハイフンで始まらない引数はそのまま追加
if (-not $currentArg.StartsWith("-")) {
$result += $currentArg
$i++
continue
}
# コロンで終わらない引数はそのまま追加
if (-not $currentArg.EndsWith(":")) {
$result += $currentArg
$i++
continue
}
# 次の引数が存在する場合結合して追加
if ($i + 1 -lt $Args.Count) {
$nextArg = $Args[$i + 1]
$result += "$currentArg$nextArg"
$i += 2
continue
}
# 通常の引数処理
$result += $currentArg
$i++
}
return $result
}
このような関数を作成し、
function ffmpeg {
$args = Merge-ColonSeparatedArgs $args
ffmpeg.exe -hide_banner $args
}
このように使用すれば解決します。
まとめ
PowerShellのエイリアス設定がまともなら起き得ないエラーでした。
コメント