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を使用しなかった違いが生じる・異なる)
助けてくれてありがとう!
fontfile
だ。かなり恥ずかしいもの-初心者のミスのために失敗
fontfile
フォントへのパスに関するエラーですか?
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>
(スクリプト全体が非常に長くなりました。これは全体の一部に過ぎないためです-後で、ファイルを連結します...)再び助けてくれてありがとう!
=
で-vf=