2

我在命令行中使用 FFMPEG 来获取我在 ASP.NET C# 应用程序中的文件的媒体信息。我需要从包含 FFMPEG 输出的字符串值中获取比特率值,如下所示:

  Duration: 00:00:02.60, start: 0.000000, bitrate: 517 kb/s
    Stream #0.0(eng): Video: h264, yuv420p, 1024x768, 15.00 tb(r)
    Stream #0.1(eng): Audio: aac, 22050 Hz, mono, s16

所以我想从bitrate: 517 kb/s使用正则表达式中得到整数值......我的文件在上下文中的比特率只达到了 1500 左右,所以它需要能够获得 2、3 和 4 位数的值。

如何做到这一点?

干杯

4

5 回答 5

2

这应该这样做。

Match match = Regex.Match(ffmpegStr, @"bitrate: (\d+)");

if (match.Success)
{
    Console.WriteLine(match.Groups[1].Value);
}

ffmpegStr你的数据在哪里。

您可以将+with替换{2,4}为仅匹配 2 到 4 位数字。


或者,您可以使用ffprobe输出机器可读的数据。

于 2013-07-05T11:02:15.830 回答
1

You can get as many digits as the string has using + qualifier:

bitrate: (?<bitrate>\d+) kb/s

Read the value from the "bitrate" capture group.

于 2013-07-05T11:02:40.240 回答
0
(bitrate:\s)(\d+)

Above will match and create 2 groups. The integer value will be in the second group.

于 2013-07-05T11:03:21.717 回答
0

没有正则表达式....

string line = "Duration: 00:00:02.60, start: 0.000000, bitrate: 517 kb/s";
string pattern = "bitrate: ";
int bitrate = -1;
int index = line.IndexOf(pattern, StringComparison.OrdinalIgnoreCase);
if(index >= 0)
{
    index += pattern.Length;
    int endIndex = line.IndexOf(" kb/s", index + 1, StringComparison.OrdinalIgnoreCase);
    if(endIndex >= 0)
    {
        int.TryParse(line.Substring(index, endIndex - index), out bitrate);
    }
}

http://ideone.com/FE1cQP

于 2013-07-05T11:07:25.023 回答
0

看起来您正在解析 FFmpeg 输出。FFmpeg 允许输出到 JSON(和一些其他格式),从而更容易获取您需要的任何数据。您可能想要调查该选项而不是依赖正则表达式。

于 2013-07-05T11:09:41.300 回答