我試圖用正則表達式來破譯FFmpeg輸出,但是我有問題,因爲有時線存在有時它們沒有,例如對於文件是音頻文件而不有一條視頻線。正則表達式匹配一條線,當它存在與否
視頻示例文本;
Seems stream 0 codec frame rate differs from container frame rate: 30000.00 (30000/1) -> 15.00 (15/1)
Input #0, avi, from 'making_of_divx5mp3.avi':
Duration: 00:27:46.60, start: 0.000000, bitrate: 154 kb/s
Stream #0.0: Video: mpeg4, yuv420p, 320x240 [PAR 1:1 DAR 4:3], 15 fps, 15 tbr, 15 tbn, 30k tbc
Stream #0.1: Audio: mp3, 24000 Hz, 2 channels, s16, 40 kb/s
At least one output file must be specified
音頻示例文本;
輸入#0,OGG,從 'C:\ examplemedia \ Americanism_(Franklin_D._Roosevelt).OGG': 時間:00:04:21.24,啓動:0.000000,比特率:49 kb/s的 流#0.0 :音頻:Vorbis格式,11025赫茲,單聲道,S16,49 kb/s的 至少一個輸出文件,必須指定
我的正則表達式
Š{2}時間[:] \ S(? \ d {2} [:] \ d {2} [:] [。] \ d {2})\ d {2} [,] \ S {1}開始[:] \ S {1} \ d { 1,} [。] \ d {6} [,] \ s {1} bitrate [:] \ s {1}(?\ d {1,} \ skb [/] s)+
\ s {4} Stream \ s [#] \ d [。] \ d [:] \ sVideo [:] \ s(?\ w +)[,] \ s(?\ w +)[,] \ s [\] \ d [。] \ d [:] \ sAudio [:] \ d [2,} [x] \ d {2,})。+
\ S [,] \ S(\ d + \ SHZ?)[,] \ S(\ W +?)((\ d \ schannels |?單聲道))[,] \ S(?\ W +)([,] \ S (?\ d {2,} \ SKB [/] S)|)
我試圖與缺乏線的要解決的問題通過改變一個包括(正則表達式|),它應當匹配NULL,但它打破我的正則表達式,然後什麼都不返回。我認爲這將工作,因爲表達式從右到左讀。
(\s{4}Stream\s[#]\d[.]\d[:]\sVideo[:]\s(?<videocodec>\w+)[,]\s(?<pixelformat>\w+)[,]\s(?<resolution>\d{2,}[x]\d{2,}).+|)
感謝您的幫助!
想過,但理想的我希望把一切都在一個正則表達式,少了幾分代碼,希望整潔!? – wonea 2011-01-20 10:38:53