Получение скриншотов и информации с видео

    В этой заметке я рассказываю, как сделать скриншот с видео, а так же о том, как получить информацию о видео файле.

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



    Итак, приступаю:

    Многие, наверно, слышали про ffmpeg — набор библиотек для работы с видео. Но, оказывается, такую банальную вещь, как вытаскивание скриншота из видеофайла эта штука делает очень медленно! Чем дальше от начала фильма нужно сделать скриншот, тем больше времени придется ждать, так как ffmpeg сначала «прокручивает» видео до нужной отметки. Получить скриншот ffmpeg’ом можно так:

    ffmpeg -i /home/username/movie.avi -an -ss 00:20:14 -r 1 -vframes 24 -s 320×240 -y -f mjpeg /home/username/screenshot-pct.jpg


    Но это медленно, поэтому я не рекомендую этого делать. Естественно, такая медленная работа никого не устраивает (зачем вообще разработчики сделали эту возможность в ffmpeg?).
    К счастью, есть альтернатива — это Mplayer. Он бывает как с графической оболочкой, так и без (смотря как его собрать) и делают его те же товарищи, которые делают ffmpeg. Нам графическая оболочка не нужна нафиг, мы же не собираемся смотреть фильмы! Так что смело собирай Mplayer без GUI.
    Используем:

    mplayer /home/username/movie.avi -ss 00:20:14 -frames 24 -vo jpeg:outdir=/home/username


    Эта комманда означает: «Сделай мне 24 скриншота с 20-й минуты и 14-й секунды фильма /home/username/movie.avi и положи их в директорию /home/username».

    Почему именно 24 скриншота. Дело в том, что обычно фильм содержит в себе от ~24 до ~31 кадра, поэтому я беру 24 кадра. Больше, я думаю, вряд ли нужно. Понятно, что в течении секунды сцена может сильно меняться (особенно, когда взрывается вертолёт =) ), именно поэтому мы делаем 24 кадра и даем возможность потом выбрать из этих кадров наиболее красивый кадр.
    Теперь о том, как получить информацию из видео.
    Лично я использую для получения мета-информации о видео-файле тот же Mplayer:

    mplayer -identify /home/username/movie.avi -ao null -vo null -frames 0 2>/dev/null | grep ^ID_


    Или, можно так (php, без grep):

    <?
    /**
    * Получение мета-информации о видео-файле.
    * Использует mplayer.
    */
    class VideoInfoComponent {
    public $mplayer = '/usr/local/bin/mplayer';
    /**
    * Получить мета-информацию о видео-файле
    *
    * @param string $filename Путь к файлу
    * @return array мета-информация
    */
    public function info($filename) {
    $result = array();
    $params = array();
    exec("{$this->mplayer} -vo null -ao null -frames 0 -identify '{$filename}'", $result);
    foreach ($result as $i=>$value) {
    if (!preg_match('/^ID_/', $value)) unset($result[$i]);
    else {
    list ($param, $data) = explode('=', $value);
    $params[ $param ] = strtolower($data);
    }
    }
    $params['ID_SIZE'] = filesize($filename);
    return $params;
    }
    }
    ?>
    Поделиться публикацией

    Комментарии 7

      0
      Спасибо. Хорошая заметка, как раз во время. Не подскажешь, как конвертировать в avi -> flv средством php?
        0
        vermax, попробуй mencoder


        mencoder input.avi -o output.flv -of lavf \
        -oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc \
        -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3


        Подробнее здесь: http://www.mplayerhq.hu/DOCS/HTML/ru/men…
          +1
          поправьте ссылку на Mplayer
          p.s. поКармил вас
            0
            Спасибо) Очень благодарен за это)
            Щас все поправим!
            +1
            вау!спасибо:)
            *пошла развлекаться*
              0
              Есть такой вопрос. А можно ли как-нибудь обойтись без сторонних библиотек при сборе информации о видео? Скажем считывать заголовки файла и анализировать их? Ведь далеко не всегда есть возможность установить скажем тот же ffmpeg на сторонний хостинг
              • НЛО прилетело и опубликовало эту надпись здесь

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.