Ffmpegで動画の長さを取得するために私が見つけたすべての回答には、grep
が含まれています。これはcmd
にはネイティブにはありません。
「Grepforwindows」というものがあることは知っていますが、コマンドラインに付属している関数を使用したいと思います。
だから私がするときffmpeg -i input
私は得る
Input #0, flv, from 'vid_test001.flv':
Metadata:
creationdate : Fri Sep 19 15:58:17
Duration: 00:00:12.44, start: 0.000000, bitrate: 806 kb/s
Stream #0:0: Video: flv1, yuv420p, 320x240, 1k tbr, 1k tbn, 1k tbc
Stream #0:1: Audio: nellymoser, 22050 Hz, mono, flt
これから期間を取得したいのですが、この場合は「00:00:12.44」です。
ffmpeg -i "inputFile" 2>&1 | for /f "tokens=2 delims=, " %a in ('findstr /r /c:"^ *Duration:"') do echo %a
入力ファイルでffmpeg
を実行し、stderrの出力(ffmpegがデフォルトで情報を書き込む)を標準出力に送信します。リストをfindstr
でフィルタリングして、スペースで始まり、その後にDuration:
が続く行を取得します。見つかった行ごとに、フィールド区切り文字と見なされるスペースとコンマ、および行の2番目のトークン、つまりDuration:
ラベルの後の時間が要求されます。この値は、コンソールにエコーされるfor
置換可能パラメーター%a
に取得されます。
バッチファイルから使用するには、パーセント記号をエスケープし、%
を%%
に置き換えます。
Powershell(最近のバージョンのWindowsで標準装備されています)の使用に反対しない場合は、Select-String
コマンドを使用できます。
これは別のスーパーユーザーの質問からの素晴らしい投稿です- link
基本的に、コマンドの出力を取得して、結果をselect-stringにパイプすることができます。