Как извлечь размер кадра и длину из ffmpeg, в php? - PullRequest
1 голос
/ 11 ноября 2010

Я обычно использую midentify, который выплевывает красиво отформатированную строку, которую легко preg_match

Однако иногда она не срабатывает, поэтому я хочу сделать запасной метод через ffmpeg.ffmpeg -i hello.avi выплевывает это:

    Input #0, avi, from 'hello.avi':
  Metadata:
    encoder         : Nandub v1.0rc2
  Duration: 01:11:16.56, start: 0.000000, bitrate: 1202 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 640x336 [PAR 1:1 DAR 40:21], 25 tbr, 25 tbn, 25 tbc
    Stream #0.1: Audio: mp3, 48000 Hz, 2 channels, s16, 117 kb/s
At least one output file must be specified

Мне нужна ширина и высота фактического размера кадра, а также продолжительность.

Каков наилучший способ извлечь это отсюда?Я не очень знаком с регулярными выражениями.

Ответы [ 3 ]

2 голосов
/ 11 ноября 2010

Продолжительность проста:

preg_match('/Duration: (\d{2}:\d{2}:\d{2}\.\d{2})/', $source, $matches);
$matches[1] == '01:11:16.56';

Размер сложнее.Я собираюсь предположить, что любой набор чисел, разделенных ничем, кроме символа x, будет иметь размеры:

preg_match('/(\d+)x(\d+)/', $source, $matches);
$matches[1] == '640';
$matches[2] == '336';
0 голосов
/ 09 января 2014

Я просто хочу добавить слегка измененную версию ответа @ lonesomeday:

эта часть верна, но если у вас есть такая строка:

Duration: 00:05:40.11, start: 0.000000, bitrate: 60847 kb/s  
Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), 
yuv420p(tv, bt709), 1920x1080, 60846 kb/s, 29.97 fps, 29.97 tbr, 2997 tbn, 5994 
tbc (default)

это

preg_match('/(\d+)x(\d+)/', $source, $matches);

вернется

$matches[1] == '0';
$matches[2] == '31637661';

Так что я немного его изменил:

preg_match('/(\d{2,4})x(\d{2,4})/', $source, $matches);

Таким образом, он не будет совпадать с одной цифрой или более чем 4 цифрами.

0 голосов
/ 11 ноября 2010

Я бы использовал расширение ffmpeg для PHP. Загрузите и установите с http://ffmpeg -php.sourceforge.net / затем:

extension_loaded ('ffmpeg') или die ('Ошибка при загрузке ffmpeg');

$ ffmpegInstance = new ffmpeg_movie ('hello.avi');

echo "getDuration:". $ ffmpegInstance-> getDuration (). "getFrameCount:". $ ffmpegInstance-> getFrameCount (). "getFrameRate:". $ ffmpegInstance-> getFrameRate (). "getFilename:". $ ffmpegInstance-> getFilename (). "getComment:". $ ffmpegInstance-> getComment (). "getTitle:". $ ffmpegInstance-> getTitle (). "getAuthor:". $ ffmpegInstance-> getAuthor (). "getCopyright:". $ ffmpegInstance-> getCopyright (). "getArtist:". $ ffmpegInstance-> getArtist (). "getGenre:". $ ffmpegInstance-> getGenre (). "getTrackNumber:". $ ffmpegInstance-> getTrackNumber (). "getYear:". $ ffmpegInstance-> getYear (). "getFrameHeight:". $ ffmpegInstance-> getFrameHeight (). msgstr "getFrameWidth:". $ ffmpegInstance-> getFrameWidth (). "getPixelFormat:". $ ffmpegInstance-> getPixelFormat (). "getBitRate:". $ ffmpegInstance-> getBitRate (). "getVideoBitRate:". $ ffmpegInstance-> getVideoBitRate (). msgstr "getAudioBitRate:" $ ffmpegInstance-> getAudioBitRate (). msgstr "getAudioSampleRate:". $ ffmpegInstance-> getAudioSampleRate (). "getVideoCodec:". $ ffmpegInstance-> getVideoCodec (). "getAudioCodec:". $ ffmpegInstance-> getAudioCodec (). msgstr "getAudioChannels:". $ ffmpegInstance-> getAudioChannels (). "hasAudio:". $ FfmpegInstance-> hasAudio ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...