我试图用正则表达式来破译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