2011-02-24 6 views
0

私はRegexで試してみてください。私はちょうどしません。を入手してください。 FFMPEGのログファイルを走査してFPSを取得しようとしています。Regex:FFPSEGログからFPSを取得

基本的には、ログファイルの変数行(周り16/17のようです)の上にこの行が表示されます: -

Stream #0.1[0x1e0]: Video: mpeg1video, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 104857 kb/s, 25 fps, 25 tbr, 90k tbn, 25 tbc 

を私は私ができると考えている、ラインでラインを通過したいのですが/ nとそれからforループスルーで爆発しますが、私はその行をその行にしてからFPS値を取得したいと思います。

感謝の言葉をいただきました。あなたはこの試みることができる

+0

行は常に ''ストリームで開始していますか?その場合、 '/^Stream。+ ?,(\ d +)fps(、| $)/'は一発の価値があります。 – jensgram

答えて

4

if (preg_match('/^Stream #0.*?(\b\d+(?:\.\d+)?\s*fps\b).*/m', $subject, $regs)) { 
    $full_line = $regs[0]; 
    $result = $regs[1]; 
} else { 
    // no match... 
} 

を説明:

^  # start of line (/m modifier makes sure that this works) 
Stream #0 # match Stream #0 literally 
.*? # match any number of characters, as few as possible 
( # then capture the following 
\b # starting at a "word" boundary 
\d+ # one or more digits 
(?: # try to match the following: 
    \. # a dot 
    \d+ # followed by one or more digits 
)? # but make that optional 
\s* # optional whitespace 
fps # literal fps 
\b # end at a word boundary 
)  # end of capturing group 
.* # match the rest of the line 
+0

+1ニース!私は '\ s +'を '\ s *'に置き換えています(これは厳密には主観的ですが、「ゼロ以上」が「1つ以上」よりも多かれ少なかれわかりません)。 – jensgram

+0

@jensgram:ありがとう、私はそれがそのように良いと思う。また、NTSC(29.97 fps)やその他の奇数フレームレートを処理するためのオプションのグループを追加しました。 –

+0

これは素晴らしい、感謝しているようです!ストリーム#0で始まる行に厳密に指定することはできますか?現時点では(私はそれが最初のインスタンスが見つかった後にそれを殺すことはできますが)ログ内のすべてのFPSステートメントを返します(多くの場合)。 – waxical

関連する問題