Як я можу подати вихід ffmpeg на ffplay?


22

Як я можу передавати вихід ffmpeg на ffplay?

На даний момент я використовую вирішення в баші:

mkfifo spam
(ffplay spam 2> /dev/null &) ; capture /dev/stdout | ffmpeg -i - spam

Відповіді:


18

Я не знаю, чи він не ffmpegможе вивести свої дані в stdout, чи ffplayне може взяти свої дані від stdin.

Якщо він не ffmpegможе вивести свої дані в stdout:

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

(Вам потрібно міг додати -аргумент, щоб ffplayвін взяв свій вклад від stdin.)

Якщо він не ffplayможе взяти свій внесок від stdin:

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

Для отримання додаткової інформації про <(command)та >(command)конструкцію дивіться розділ « Заміна процесів» у посібнику з bash.


4
для мене це не спрацювало без явного введення вихідного формату з "-f". як зазначено на ffmpeg.org/ffmpeg.html : "Формат зазвичай автоматично визначається для вхідних файлів і здогадується з розширення для вихідних файлів". у відповіді ffmpeg не зможе здогадатися про вихідний формат. тому я думаю, що ffmpeg повинен був додати "-f fmt" до нього.
Павло К.

1
ffmpeg 2.8.6 підтримує введення stdin, як зазначено в інших відповідях. Ви можете перевірити цю підтримку з: stackoverflow.com/questions/12999674 / ...
Чіро Сантіллі新疆改造中心法轮功六四事件

17
ffmpeg -i input.avi <options> -f matroska - | ffplay -

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

Зауважте, що якщо ви використовуєте Ubuntu 12.04, ffmpeg був замінений виделкою libav, і ви повинні використовувати avconvі avplayзамість цього; синтаксис інакше ідентичний. Там є своєрідний ffmpeg, але він покалічений дизайн.


Win10: Помилки трапляються як pipe:: Invalid data found when processing inputKу Power Shell, але добре працює в командному рядку
Джон

11

ffmpeg підтримує трубопровідні операції. Дивіться цей розділ документації тут .

Я не знаю, як працює ffplay, але щоб передати вихід ffmpeg до стандартного виводу, ви можете додати команду pipe до кінця команди ffmpeg. Приклад:

ffmpeg -i input.flv pipe:1 | ffplay -i -

1
дякую, я якось пропустив цей розділ сторінки man .. однак я не зміг змусити цю конструкцію працювати, назву вихідного файлу потрібно видалити з ffmpeg, а вхідна труба додана до аргументів ffplay. я буду редагувати свій пост відповідно ..
Вім

Спасибі. Як я вже сказав, я ніколи не використовував ffplay раніше, але знаю ffmpeg.
matzahboy

В моєму man ffplay, я не бачу ffplayпідтримки -iкомутатора - це може бути ffmpegтільки?
sdaau

1
pipe:1проти -? -працює на ffmpeg 2.8.6.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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 -

трохи швидший запуск


5
Я отримував Unable to find a suitable output format for 'pipe:'- мені потрібно було вказати кодек -f.
i336_

Працює, але дуже низька якість зображення
Джон

Якщо низька якість зображення, то переконайтеся, що те, що ви спочатку захоплюєте, - це висока якість зображення (збережіть його у файлі спочатку тощо), це "повинно" бути нормальної якості ...
rogerdpack
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.