Я хочу выполнить скрипт bash, который будет делать следующее:
Приложение "ffmpeg" создает файл LIVE транспортного потока (.ts). Мне нужно поработать над этим живым потоком (выполнить демультиплексирование и т. д.).
Теперь я знаю, что это нужно делать через FIFO; но вот моя задача.
Мне нужно перенаправить вывод ffmpeg для записи в fifo, а затем другое приложение будет работать с этим содержимым fifo. Это происходит непрерывно в режиме реального времени, пока я не нажму, скажем, Ctrl+C.
Это возможно? Придется ли мне делать это двумя терминалами?
Я в основном пишу сценарий bash для вышеуказанных операций (и других), так что мне нужно вызывать два терминала или, может быть, разветвление?
Добрый совет.
Заранее спасибо!
Ответ 1 · рейтинг 1 · Przemo
FFmpeg поддерживает каналы. Все, что вам нужно сделать, это подойти следующим образом:
сделать fifo
mkfifo first.ts
запустить ffmpeg с трубой
ffmpeg -i sample.ts -c copy -muxrate 5000000 pipe:1 > first.ts
запускайте любые другие инструменты, которые работают с файлами транспортного потока, например. Инструмент OpenCaster tscbrmuxer, который может добавить, например. Таблица NIT для передачи файла потока
tscbrmuxer b:3008 NIT.ts b:5000000 first.ts > second.ts
Если вы хотите остановить 2 инструмента, просто убейте последний, который использует pipe/fifo. в противном случае вам придется убить tscbrmuxer.
kill tscbrmuxer
ИЛИ
Если вы не используете последний инструмент в фоновом режиме, просто уничтожьте его с помощью [ctrl+c]
Благодаря использованию такого подхода (например, в виде сценария оболочки или Python) все инструменты, использующие pipe/fifo, будут завершены из-за сломанного канала.
Я надеюсь, что это поможет вам.