0

私はこのような出力文字列を持っています

ffmpeg version 0.8.8-4:0.8.8-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers
  built on Oct 22 2013 12:31:55 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[flv @ 0x23307a0] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 25.00 (25/1)
Input #0, flv, from '307263_191.flv':
  Metadata:
    metadatacreator : Yet Another Metadata Injector for FLV - Version 1.4
    hasKeyframes    : true
    hasVideo        : true
    hasAudio        : true
    hasMetadata     : true
    canSeekToEnd    : true
    datasize        : 42773717
    videosize       : 40350092
    audiosize       : 2403669
    lasttimestamp   : 107
    lastkeyframetimestamp: 107
    lastkeyframelocation: 42758866
  Duration: 00:01:47.18, start: 0.000000, bitrate: 3186 kb/s
    Stream #0.0: Video: flv, yuv420p, 1024x576, 3009 kb/s, 25 tbr, 1k tbn, 1k tbc
    Stream #0.1: Audio: adpcm_swf, 22050 Hz, 2 channels, s16, 176 kb/s
At least one output file must be specified

文字列から期間、ビデオビットレート、オーディオビットレート、ビデオとオーディオのサイズなどの情報を取得する必要があります。1つの方法は爆発でそれを行うことですが、文字列の重要な部分の前後のテキストは私のコントロールではなく、入力ごとに変更される可能性があります

文字列内の任意のキーと値を一致させる方法はありますか:

更新:これらが必要です

videosize       : 40350092
audiosize       : 2403669
Duration: 00:01:47.18

    Stream #0.0: Video: flv, yuv420p, 1024x576, 3009 kb/s, 25 tbr, 1k tbn, 1k tbc
    Stream #0.1: Audio: adpcm_swf, 22050 Hz, 2 channels, s16, 176 kb/s
4

3 に答える 3

1

以下を試してください。

preg_match_all('/(?:\b(?:duration|videosize|audiosize)\b\s*:[0-9:. ]+|stream #.*)/i', $data, $matches);
print_r($matches);

見るworking demo

出力

Array
(
    [0] => Array
        (
            [0] => videosize       : 40350092
            [1] => audiosize       : 2403669
            [2] => Duration: 00:01:47.18
            [3] => Stream #0.0: Video: flv, yuv420p, 1024x576, 3009 kb/s, 25 tbr, 1k tbn, 1k tbc
            [4] => Stream #0.1: Audio: adpcm_swf, 22050 Hz, 2 channels, s16, 176 kb/s
        )
)
于 2013-11-07T16:39:56.483 に答える
0

試してください(未テスト):

$duration     = preg_replace("#duration\s*:\s*(\d{2}:\d{2}:\d{2}.\d+)#i", "$1", $input)
$datasize     = preg_replace("#datasize\s*:\s*(\d+)#i"                  , "$1", $input)
$audiobitrate = preg_replace("#audio\s*:.*,\s*(\d+)\s*kb/s#i"           , "$1", $input)

「datasize」で行ったのと同じことは、フォーマットが異なるもの(期間やオーディオビットレートを含むストリーム情報など)にもかかわらず、取得したいすべての情報に対して機能するはずです。

于 2013-11-07T05:23:48.610 に答える
0
preg_match_all('/ {2,4}(.+?)\s?: (.+)/',$ffmegoutputstring,$matches,PREG_SET_ORDER);
print_r($matches);

出力...

Array
(
    [0] => Array
        (
            [0] =>     metadatacreator : Yet Another Metadata Injector for FLV - Version 1.4
            [1] => metadatacreator
            [2] => Yet Another Metadata Injector for FLV - Version 1.4
        )

    [1] => Array
        (
            [0] =>     hasKeyframes    : true
            [1] => hasKeyframes
            [2] => true
        )
于 2013-11-07T05:26:36.223 に答える