Как я могу передать вывод ffmpeg в ffplay?

22

Как я могу передать вывод ffmpeg в ffplay?

На данный момент я использую обходной путь в Bash:

mkfifo spam
(ffplay spam 2> /dev/null &) ; capture /dev/stdout | ffmpeg -i - spam
Wim
источник

Ответы:

18

Я не знаю, может ли он ffmpegне выводить свои данные в stdout, или ffplayчто он не может получить свой ввод из stdin.

Если это так ffmpeg, он не может вывести свои данные на стандартный вывод:

capture /dev/stdout | ffmpeg -i - >(ffplay 2> /dev/null)

(Вам необходимо добавить -аргумент, ffplayчтобы он получал данные от stdin.)

Если это ffplayто, что не может получить свой ввод от стандартного ввода:

ffplay <(capture /dev/stdout | ffmpeg -i -) 2> /dev/null

Для получения дополнительной информации о <(command)и >(command)конструкции см процесса Замены раздел руководства Баша.

jfg956
источник
4
для меня это не сработало без явного указания формата вывода с помощью "-f". как указано в ffmpeg.org/ffmpeg.html : «обычно формат автоматически определяется для входных файлов и определяется по расширению для выходных файлов». в данном ответе ffmpeg не сможет угадать выходной формат. так что я думаю, что к ffmpeg нужно добавить "-f fmt".
Павел К.
1
ffmpeg 2.8.6 поддерживает ввод stdin, как упоминалось в других ответах. Вы можете проверить эту поддержку с помощью: stackoverflow.com/questions/12999674/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
17
ffmpeg -i input.avi <options> -f matroska - | ffplay -

буду работать; вам нужно установить формат контейнера для вывода. Обычно это устанавливается с помощью ffmpeg, смотрящего на расширение, которое вы даете на выходе, но здесь вы должны установить его вручную -f. Я рекомендую matroska (MKV), потому что он может содержать практически любое видео, поэтому независимо от того, на что вы его транскодируете, должно работать на отлично.

Обратите внимание , что если вы используете Ubuntu 12.04, FFmpeg был заменен libav вилкой, и вы должны использовать avconvи avplayвместо этого; синтаксис в остальном идентичен. Там есть что-то вроде ffmpeg, но оно покалечено дизайном.

evilsoup
источник
Win10: ошибка возникает как pipe:: Invalid data found when processing inputKв Power Shell, но хорошо работает в командной строке
Джон
11

ffmpeg поддерживает операции с трубопроводами. Смотрите этот раздел документации здесь .

Я не знаю, как работает ffplay, но чтобы передать вывод ffmpeg в стандартный вывод, вы можете добавить команду pipe в конец команды ffmpeg. Пример:

ffmpeg -i input.flv pipe:1 | ffplay -i -
matzahboy
источник
1
спасибо, я почему-то пропустил этот раздел справочных страниц ... однако я не смог заставить эту конструкцию работать, выходное имя файла нужно удалить из ffmpeg и добавить канал ввода в аргументы ffplay. я буду редактировать ваше сообщение соответственно ..
Вим
Спасибо. Как я уже говорил, я никогда раньше не использовал ffplay, но я знаю ffmpeg.
matzahboy
По моему man ffplay, я не вижу ffplayподдержки -iпереключателя - это возможно ffmpegтолько?
sdaau
1
pipe:1против -? -работает на ffmpeg 2.8.6.
Сиро Сантилли 新疆 16 中心 法轮功 六四 事件
9

выглядит как обычные трубы работают (по крайней мере в окнах):

ffmpeg -i sintel.mpg -pix_fmt yuv420p -f rawvideo - | ffplay -f rawvideo -pix_fmt yuv420p -s 720x480 -

не пробовал с более сложным вводом / выводом, хотя ...

ffmpeg -f dshow -i video=screen-capture-recorder -pix_fmt yuv420p -f mpegts - | ffplay -analyzeduration 10 -f mpegts -

немного быстрее запуска

rogerdpack
источник
5
Я получал Unable to find a suitable output format for 'pipe:'- мне нужно было указать кодек с -f.
i336_
Работает, но очень низкое качество изображения
Джон
Если это низкое качество изображения , то убедитесь, что вы изначально захватить высокое качество изображения (сохранить его в файл первой и т.д.) оно «должно» быть нормального качества ...
rogerdpack