Кто знает реально ли обрабатывать поток в реальном времени средствами bash?
У меня сложилось стойкое мнение что Bash этого не умеет, например если надо обработать вывод программы поток текстовой информации которой очень продолжительное время идет, получается только сбрасывать эту информацию в файл, а затем только обрабатывать.
Примером такого потока может быть вывод ffmpeg в консоль.
например конструкция:
ffmpeg [параметры]|while read file и т.д.
Сначала дождется пока поток не закончится и только потом станет его обрабатывать.
ffmpeg и конвеер Bash
У меня сложилось стойкое мнение что Bash этого не умеет, например если надо обработать вывод программы поток текстовой информации которой очень продолжительное время идет, получается только сбрасывать эту информацию в файл, а затем только обрабатывать.
это только впечатление...
например конструкция:ffmpeg [параметры]|while read file и т.д.
можно полный рабочий пример?
пока могу предположить, что проблема с буферизацией: http://mywiki.wooledge.org/BashFAQ/009
можно полный рабочий пример?
пока могу предположить, что проблема с буферизацией: http://mywiki.wooledge.org/BashFAQ/009
На ссылке используются сторонние программы для перенарправления потоков и обработки потоков, а если нужно использовать определенные числа этого потока и производить вычисление, то средствами bash это проблемно.
И то вроде описываются что параметры действуют норм, на самом деле неа
Вот самый простой пример:
захват экрана и звука
ffmpeg -f alsa -ac 2 -i pulse -acodec pcm_s16le -f x11grab -s 1366x768 -r 10 -i :0.0 -vcodec mpeg4 -sameq test.mp4 2>&1|cat|sed -u 's/time/BONUS/'Главное чтобы у вас ffmpeg был собран с поддержкой всех этих кодеков, можете любые другие параметры конвертации попробовать.
Зы: тут объединение потоков идет потому что вывод значения time идет по stderr
Главное чтобы у вас ffmpeg был собран с поддержкой всех этих кодеков, можете любые другие параметры конвертации попробовать.
Зы: тут объединение потоков идет потому что вывод значения time идет по stderr
не очень пойму, чего ты пытаешься добиться/чего не так... если вывод идёт не на терминал, то ffmpeg пишет статистику только в самом конце....
[added]
был неправ... но тут сам ffmpeg виноват... он CR'ами свою статистику разделяет, а sed обрабатывает всё только построчно...
в качестве костыля предложу такую конструкцию:
ffmpeg -y -f alsa -ac 2 -i hw:1 -acodec pcm_s16le -f x11grab -s 1680x1050 -r 10 -i :0.0 -vcodec mpeg4 -sameq test.mp4 2>&1 | stdbuf -o0 tr '\r' '\n' | sed -u 's/time/BONUS/'
в качестве костыля предложу такую конструкцию:
ffmpeg -y -f alsa -ac 2 -i hw:1 -acodec pcm_s16le -f x11grab -s 1680x1050 -r 10 -i :0.0 -vcodec mpeg4 -sameq test.mp4 2>&1 | stdbuf -o0 tr '\r' '\n' | sed -u 's/time/BONUS/'
Ага это оно самое, проблему решить удалось, только обработать нормально получается только используя конвейер+while цикл, но удалось.
не очень пойму, чего ты пытаешься добиться/чего не так... если вывод идёт не на терминал, то ffmpeg пишет статистику только в самом конце....
Просто хотел прицепить после команды захвата команду сжатия файла, с помощью ffmpeg.
Как раз надо было обработать текстовую информацию чтобы вывести на сколько процентов выполнен процесс сжатия(конвертирования) файла и вывести в диалог zenity.

Все получилось :)