ffmpeg труба изображения извлечены из видео

8

Я могу использовать следующую команду для извлечения изображений из видео с помощью ffmpeg, сохраняя их в файловой системе:

... | ffmpeg -i - -f image2 'img-%03d.png'

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

Следующее не работает:

... | ffmpeg -i - -f image2 pipe: | ...

Ошибка с

[image2 @ 0xe1cfc0] Could not get frame filename number 2 from pattern 'pipe:' (either set updatefirst or use a pattern like %03d within the filename pattern)
av_interleaved_write_frame(): Invalid argument

Есть ли способ передать изображения, извлеченные из видео, используя ffmpeg, без использования файловой системы?

Birjolaxew
источник
Попробуйте-f png - | ...
Gyan
@Mulvya Это приводит к ошибке с [NULL @ 0x10e2860] Requested output format 'png' is not a suitable output format pipe:: Invalid argument.
Birjolaxew
2
Попробуй -f image2pipe -vcodec png - | .... PNG может не работать, в этом случае вывод будет MJPEG после удаления vcodec.
Гьян
@Mulvya Это действительно сработало. Большое спасибо :)
Birjolaxew

Ответы:

7

Да, есть!

добавьте аргумент -f image2pipeи укажите выходное имя файла в качестве одиночного переноса ( -в данном контексте это означает stdout), укажите входное имя файла также в виде одиночного переноса ( -i -в данном контексте это означает stdin) и явно укажите выходной формат (например, для png) :) -c:v png, вот полный пример:

ffmpeg -i - -ss 00:00:3 -s 650x390 -vframes 1 -c:v png -f image2pipe -
hanshenrik
источник