Как я могу извлекать клипы из потокового видео в режиме, близком к реальному времени?

Клиент хочет, чтобы я написал какое-нибудь программное обеспечение, возможно, ffmpeg , завернутое в скрипты, которое будет отслеживать потоковое видео и копировать клипы из него почти в реальном времени, доставляя их в виде автономных видеофайлов. Для меня неприемлемо ждать окончания подачи и полного сохранения видео в виде локального файла, прежде чем копировать клипы. С другой стороны, я могу подождать, скажем, десятки секунд после окончания клипа, прежде чем доставить его. Могу ли я сделать это, не создавая набор для обработки видео с нуля? Нужно ли требовать, чтобы поток потокового видео был определенного формата?

Итак, скажем, видеопоток представляет собой 1-часовую прямую трансляцию. В какой-то момент, может быть через 5 минут, мое программное обеспечение может получить команду «вырезать от 4 минут 30 секунд до 6 минут 0 секунд, сохранить как файл X.mpg». Мне нужно подключиться к видеопотоку, скопировать 90 секунд видео и сохранить его как файл X.mpg примерно через 7 минут. Фактическое время более гибкое, я просто хочу подчеркнуть, что я должен иметь возможность подключиться к идет потоковая передача, я не могу дождаться статического видеофайла.

Я даже не знаю, допускают ли такие операции форматы потокового видео. Если получатель записывает поток на диск, будет ли начало файла иметь допустимый синтаксис, который может проанализировать обычный инструмент, такой как ffmpeg ?

Я не знаю подробностей о форматах кодирования, но я понимаю, что они время от времени сохраняют ключевые кадры, а промежуточные видеокадры сохраняются как отличия от ключевого кадра и/или предшествующих кадров. Важно ли знать, когда добавляются ключевые кадры? Могут ли обычные инструменты анализировать видео после самого последнего ключевого кадра до только что записанного кадра, или данные в сохраненном файле все еще будут находиться в каком-то временном состоянии и, следовательно, еще не поддаются анализу?

Или копирование видеоклипов из потокового видео является сложной задачей, для которой требуется более сложное программное обеспечение, чем ffmpeg или подобное, обернутое скриптами?

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

Ответы (1)

Это довольно просто, если вы сохраняете в потоковом формате, таком как Flash Video (FLV) или MPEG-Transport Stream (MPEG-TS) .

Допустим, это ваша команда захвата полной ленты.

ffmpeg -i source {-transcoding options} localfile.flv

Затем вы можете запустить

ffmpeg -ss 6:12 -i localfile.flv -t 1:05 -c copy extract.mp4

В идеале поток должен быть за 7:17 или близко к этому, когда вы запускаете последнюю команду. Обратите внимание, что, поскольку вторая команда не перекодирует, поиск точки не является точным. Извлечение начнется с ближайшего ключевого кадра ранее указанной точки.