私は、ffprobeクエリの出力を処理するバッチファイルを持っています。いくつかのffmpegディレクティブを決定するために使用するいくつかのデータビットを取得します。特に、ビデオフレームの高さが720以上の場合、h264ビデオをh265に変換しています。私もオーディオストリームをaacに変換します。まだ128kbps以上であれば128に変換します。標準出力からカンマ区切り値を設定する方法は?
ffprobeを何度も呼び出すことで、私のffmpegコマンドが何になるかを決めるステートメント。
バッチファイルをより効率的にしたいので、1つ(おそらく2つ)のffprobeクエリの出力を取り、その出力を/ fトークン=ループを作成すると、各ffprobeデータポイントを変数に設定して、変数をチェックしてffmpegコマンドの結果を決定することができます。
ここでは、ビデオストリームがhevcであるかどうかを簡単に確認する方法を示します。そうでなければ、ffmpegはビデオをhevcに変換し、オーディオをaacにコピーします。
for %%a in ("*.*") do (
ffprobe -v quiet -show_entries stream=index,codec_name,height -of csv "%%a" 2>&1 | findstr "hevc"
if errorlevel 1 (
ffmpeg.exe -hwaccel cuvid -i "%%a" -pix_fmt p010le -c:v hevc_nvenc -preset slow -rc vbr_hq -b:v 4M -maxrate:v 10M -c:a aac "%%~na.h265-convert.mp4"
))
ffprobeクエリ出力は次のように見えること:
stream,0,h264,480
私のようなもので、その出力をトークン化することができれば、私は考えていた:私は入れているかわからない
for /f "tokens=1,2,3,4 delims= " %%a in ("______") do set codec=%%b&set fheight=%%d
私が_______を持っている場所で。私は本当にそれが唯一のオプションでない限り、一時ファイルを作成したくありません。
1)これは私がやろうとしていることを達成するための効率的な方法ですか?
2)私のforループで使用するffprobeクエリの出力を呼び出すために、________の上に空白行がある場合は何を使用しますか?
について1)、あなたがすでに認識しているように、バッチは文字列解析のためのお尻に加えてffprobe出力を解析するのが難しいです。私はhttps:// stackoverflowに言及したように、mediainfoを置き換えてお勧めします。com/questions/32344947/ffmpeg-batch-extraction-media-duration-and-a-text-file – Harry
それは考えです。私は何かのためにMediaInfo CLIを使います。私はそれを考えなかった。 – gregm