PowerShellを介したFFmpegの使用-引数でのダッシュと引用符の正しい使用


1

StackExchangeは長い間答えを探す最初の場所でした-残念ながら、現在の問題に対する(有効な)ソリューションが見つからなかったため、この質問を開きました。

私がやろうとしているのは、FFmpegを介してファイルのリスト(つまり、スクリプトと同じフォルダーを共有するすべてのMP4ファイル)を自動的に処理するPowerShellスクリプト(私はPSが初めてです)を作成することです。

TL; DR:うまくいかない:-vf "iamafilterargument"変数を含むフィルターコマンド()を使用する。

私がcmdに手書きしたときに動作するようにしようとしているコマンドは次のとおりです:

ffmpeg -i <input_file> -an -c:v libx264 -crf 16 -preset veryslow -vf "drawtext=fontsize=12:fontfile=/Windows/Fonts/arial.ttf:text='<input_filename>':bordercolor=black:borderw=2:fontcolor=white:x=(w-tw)/2:y=5:alpha=0.5" <output_filename>.mkv

cmdを介して、これは意図したとおりに機能します。今、私のPSスクリプト:

$encoder = "C:\FFMPEG\ffmpeg.exe"
$dateien = Get-ChildItem .\*.mp4
$dateinamen = ForEach-Object {$dateien.BaseName}    
    for($i=0; $i -lt $dateien.Length; $i++){
        $filterbefehl = " -i " + $dateien[$i] + " -an -map_metadata -1 -vf=`"drawtext=fontsize=12:fontfile=/Windows/Fonts/arial.ttf:text=" + $dateinamen[$i] + ":bordercolor=black:borderw=2:fontcolor=white:x=(w-tw)/2:y=5:alpha=0.5`" -c:v libx264 -intra -crf 16 -hide_banner " + $dateinamen[$i] + ".mkv"
        Start-Process -FilePath $encoder -ArgumentList $filterbefehl -NoNewWindow; pause
    }
    Write-Host "Done!"

ただし、FFmpegからこのエラーメッセージが表示されます:(意図的にファイル名を残しました-ファイル全体は "cam4_2017-03-01_2238.mp4"と呼ばれます。)

認識されないオプション 'vf = drawtext = fontsize = 12:fontfile = / Windows / Fonts / arial.ttf:text = cam4_2017-03-01_2238:bordercolor = black:borderw = 2:fontcolor = white:x =(w-tw)/ 2:y = 5:alpha = 0.5 ' 引数リストの分割エラー:オプションが見つかりません

私はいろいろなことを試しました:

  • バッククォート( `")の代わりに二重二重引用符( "")を使用する
  • を使用して &$encoder $filterbefehl
  • $ filterbefehlのコンテンツを含む -ArgumentList
  • $ filterbefehlに二重引用符の代わりに単一引用符を使用する

上記の結果は、今まで達成できた作業スクリプトに最も近いものです。適切な引用符を取得する方法を見つけることができなかったため、他のほとんどの試みは失敗しました(「」と「」の両方が機能しませんでした)。

使用ソフトウェア:-Win10 Pro(Win> = 7で動作させたいが)-Powershell 5.1(Build 14393)-ZeranoeのWebサイトのFFmpeg-binariy-最新バージョン(20170225-7e4f32f)(3.2.2を使用しなかった違いが生じる・異なる)

助けてくれてありがとう!


1
何があってはなりません=-vf=
ギャン

おっと、そうだ、@ Mulvya-私はそれを何千回も使ったが、これが方程式マークを含めたのは初めてfontfileだ。かなり恥ずかしいもの-初心者のミスのために失敗
;

@flolilo SUに関する最初のほとんどの投稿の品質をはるかに超える非常に詳細な質問をしました。恥ずかしがってはいけません。fontfileフォントへのパスに関するエラーですか?
ルート

@root ;-)という親切な言葉に感謝します-FFmpegのエラーはFontconfig error: Cannot load default config file-作業ディレクトリがシステムディスク(D:\ Pathなど)にない場合にこのエラーが表示されることを理解するのに時間がかかりました。そのため、私のコードは次のようになります $system_volume = "C:\" $files_volume = "D:\Path" cd $system_volume <ffmpeg command as above, with FULL PATH for input and output files> cd $files_volume <additional commands> (スクリプト全体が非常に長くなりました。これは全体の一部に過ぎないためです-後で、ファイルを連結します...)再び助けてくれてありがとう!
フロリロ

回答:


1

@Mulvyaの答えは正しかった-に修正-vf="<params>"する-vf "<params>"と、コードは機能する。

補足:誰かがdrawtextを操作しようとしてFontconfig error: Cannot load default config fileFFmpegからエラーを受け取った場合-作業ディレクトリがシステムディスク(D:\ Pathなど)にないかどうかを確認してください。その場合、コードを次のように変更します。

$system_volume = "C:\"
$files_volume = "D:\Path"
cd $system_volume <ffmpeg drawtext-command as above, with FULL PATH for input and output files>
cd $files_volume <additional commands>

助けてくれてありがとう!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.