powershell上でのgrepとsed

投稿者:arrumis

先日書いた日記(これ)に一言書き忘れていまして,混乱された方が居られるようで.申し訳ないです.

あの記事はLinux上で行ったときの記録です.という事を書いていませんでした.

ですので,改めて,powershell上で同じことをやってみたいと思います.

まずは,ffproveから情報を引き出す.


PS D:\EncodeTools\ffmpeg\bin> .\ffprobe.exe -i ..\sample.m2t
ffprobe version N-67118-g08e6832 Copyright (c) 2007-2014 the FFmpeg developers
 built on Oct 23 2014 23:47:32 with gcc 4.9.1 (GCC)
 configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfi
g --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-lib
opencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge
r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --
enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-
libx265 --enable-libxavs --enable-libxvid --enable-zlib
 libavutil 54. 10.100 / 54. 10.100
 libavcodec 56. 9.100 / 56. 9.100
 libavformat 56. 10.100 / 56. 10.100
 libavdevice 56. 1.100 / 56. 1.100
 libavfilter 5. 2.100 / 5. 2.100
 libswscale 3. 1.101 / 3. 1.101
 libswresample 1. 1.100 / 1. 1.100
 libpostproc 53. 3.100 / 53. 3.100
Input #0, mpegts, from '..\sample.m2t':
 Duration: 00:00:30.02, start: 0.440156, bitrate: 17906 kb/s
 Program 1
 Stream #0:0[0x200]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:
9], max. 24000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
 Stream #0:1[0x201]: Audio: aac ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 258 kb/s

 

 

たぶん,これも標準エラー出力なので,ちょいと確認してみましょう


PS D:\EncodeTools\ffmpeg\bin> $tmp=.\ffprobe.exe -i ..\sample.m2t
ffprobe version N-67118-g08e6832 Copyright (c) 2007-2014 the FFmpeg developers
built on Oct 23 2014 23:47:32 with gcc 4.9.1 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfi(以下省略)

変数に放り込もうとしても画面に出てくるので,標準エラー出力ですね.では,標準出力にひねり出してみましょう.


PS D:\EncodeTools\ffmpeg\bin> .\ffprobe.exe -i ..\sample.m2t 2>&1
ffprobe.exe : ffprobe version N-67118-g08e6832 Copyright (c) 2007-2014 the FFmpeg developers
発生場所 行:1 文字:14
+ .\ffprobe.exe <<<<  -i ..\sample.m2t 2>&1
+ CategoryInfo          : NotSpecified: (ffprobe version...mpeg developers:String) []、RemoteException
+ FullyQualifiedErrorId : NativeCommandError

built on Oct 23 2014 23:47:32 with gcc 4.9.1 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconf
ig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca(以下省略)

なんだか,エラーが出た感じですが,まぁ,いいでしょう.

続きまして,これを加工しますが,以下の物を使います.

Regular Expression

PowerShell 正規表現を使ってコマンド一本で文字列抽出 – YOMON8.NET

Linuxではffprobeから読み込むと,一行ごとに読み込んでくれましたが,どうやら,powershellでは同じように読み込んでくれないみたいなので,悩みました.

最初は,Select-Stringをつかって文字列特定して~~などと,考えたのですが,上手くいかなかったので他の手段を探したら,上記のような,良い物があると言うことで,こちらを使います.

では,いきましょう.

変数に情報を放り込みます


PS D:\EncodeTools\ffmpeg\bin> $bar=.\ffprobe.exe -i ..\sample.m2t 2>&1

PS D:\EncodeTools\ffmpeg\bin> echo $bar
ffprobe.exe : ffprobe version N-67118-g08e6832 Copyright (c) 2007-2014 the FFmpeg developers
発生場所 行:1 文字:19
+ $bar=.\ffprobe.exe <<<<  -i ..\sample.m2t 2>&1
+ CategoryInfo          : NotSpecified: (ffprobe version...mpeg developers:String) []、RemoteException
+ FullyQualifiedErrorId : NativeCommandError

built on Oct 23 2014 23:47:32 with gcc 4.9.1 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconf
ig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca
--enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-
libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroed
inger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aace
nc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --e
nable-libx265 --enable-libxavs --enable-libxvid --enable-zlib
libavutil      54. 10.100 / 54. 10.100
libavcodec     56.  9.100 / 56.  9.100
libavformat    56. 10.100 /
56. 10.100
libavdevice    56.  1.100 / 56.  1.100
libavfilter     5.  2.100 /  5.  2.100
libswscale      3.  1.101 /  3.  1.101
libswresample   1.  1.100 /  1.  1.100
libpostproc    53.  3.100 / 53.  3.100
Input #0, mpegts, from '..\sample.m2t':
Duration: 00:00:30.02, start: 0.440156, bitrate: 17906 kb/s
Program 1
Stream #0:0[0x200]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16
:9], max. 24000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x201]: Audio: aac ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 258 kb/s

これで,$barに情報が入りました.これを加工します.

切り分けたい情報を正規表現で示し,regex形式で変数に放り込み,Machesで当たりを引く訳ですが,最後のforeachで当たりの行を表示させます.


$pat = "[0-9]{3,4}x[0-9]{3,4}"
$regex=[regex]$pat
$regex.Matches($bar) | foreach { $_.Value }

そうすれば,以下のように欲しい情報が手に入るはずです


PS D:\EncodeTools\ffmpeg\bin> $regex.Matches($bar) | foreach { $_.Value }
1920x1080

さて,纏めましょう.コマンドを実行するとこうなるよ.

$bar= .\ffprobe.exe -i ..\sample.m2t 2>&1
$pat="[0-9]{3,4}x[0-9]{3,4}"
$regex=[regex]$pat
$foo=$regex.Matches($bar) | foreach { $_.Value }
echo $foo
1920x1080

“string” -match “string”
というコマンドでも,上手くいきそうな気がしますが,返値がT/Fなのでそのあとの変数代入が面倒くさいかなぁ.という気がします.

Linux,PC関係,徒然なる日記|2014年12月2日|12:01 PM|コメント(1)			



“powershell上でのgrepとsed” への1件のコメント

  1. […] はLinux上で行った記事です.powershell上で同じ事を行いたい場合はこちらの記事を参考にどうぞ. […]

« »