Я хочу передать вывод ffmpeg другому процессу, например так: ffmpeg -video_size 1920x1080 -framerate 25 -f x11grab -i :0.0 - | process
. Я получаю Unable to find a suitable output format for 'pipe:'
pipe:: Invalid argument
. Как мне достичь трубопровода?
2 ответа
Вы должны предоставить формат с -f
, например:
ffmpeg … -f matroska - | process
- Список доступных форматов смотрите в
ffmpeg -formats
. - Обратите внимание, что некоторые форматы (обычно MOV) требуют, чтобы выходной протокол был доступен для поиска, поэтому они не будут работать с протоколом вывода канала.
- Также см. Документацию FFmpeg: Pipe Protocol .
Ffmpeg не поддерживает -
напрямую как файл stdout/stdin. Вы можете использовать -f <fmt>
вместо этого, чтобы передать это. Для этого добавьте -f nut pipe:0
в конце команды ffmpeg.
Это должно выглядеть так:
ffmpeg -video_size 1920x1080 -framerate 25 -f x11grab -i :0.0 -f nut - | process
Как это лучше, чем Мартоска?
Хорошо,
martoska
представляет собой файлmkv
Если-f martoska
это означает, что ffmpeg вынужден использоватьmartoska
для кодирования данных и записи их в выходные данные.nut
может просто содержать все типы метаданных и одно / несколько (аудио, видео, изображение) кодеков + поддержка субтитров. Вот почему я считаю,nut
надmartoska
.