Я могу использовать следующую команду для извлечения изображений из видео с помощью 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, без использования файловой системы?
-f png - | ...
[NULL @ 0x10e2860] Requested output format 'png' is not a suitable output format pipe:: Invalid argument
.-f image2pipe -vcodec png - | ...
. PNG может не работать, в этом случае вывод будет MJPEG после удаления vcodec.Ответы:
Да, есть!
добавьте аргумент
-f image2pipe
и укажите выходное имя файла в качестве одиночного переноса (-
в данном контексте это означаетstdout
), укажите входное имя файла также в виде одиночного переноса (-i -
в данном контексте это означаетstdin
) и явно укажите выходной формат (например, для png) :)-c:v png
, вот полный пример:источник