LINUX.ORG.RU

Запись потока из консоли (онлайн трансляции)

 , ,


2

2

Доброго времени суток.

Есть сайт, на нём - прямой эфир.

Нужна программа, которую можно запустить из консоли и она начала записывать это всё в файл. Проблема здесь именно в графическом интерфейсе - его не должно быть.

Проблема здесь именно в графическом интерфейсе - его не должно быть.

Именно графического интерфейсе этой записывающей программы или вообще? В первом случае - ffmpeg может захватывать иксы, интерфейса там нет, во втором - ну в каком-нибудь xpra разве что запускать, но совсем без графики не получится же. Если вам надо именно эту трансляцию как-то выдрать, а не захватывать окно - надо смотреть что и как там работает, сходу сложно сказать.

Если вам надо чтоб тот, у кого десктоп будет захватываться, не догадался об этом, то такое не прокатит - без сжатия это дело быстро выжрет все доступное место, со сжатием - по тормозам и взлете девайса от вращения кулеров "жертва" догадается о том что что-то не так и пойдет смотреть процессы .

micronekodesu ★★★
()
Последнее исправление: micronekodesu (всего исправлений: 2)

запусти терминал на весь экран в голых иксах

anonymous
()
Ответ на: комментарий от micronekodesu

Architector, больше конкретики. Что за сайт, нужно записать видео с экрана или скачать поток? Почему такая нелюбовь к GUI?

со сжатием - по тормозам и взлете девайса от вращения кулеров

MPEG2 (да и MPEG4 aka XviD) не занимают много процессорного времени. Битрейт 5 мбит/с (2-3 для MPEG4) не сильно съедят места, но это только для SD разрешения (не выше 720x576). Хотя, MPEG2 и 720p не сильно нагрузит. Главное, выставить минимальный приоритет 19. Но даже такой приоритет сильнее нагрузит, чем на винде.

anonymous
()
Ответ на: комментарий от anonymous

Не то, чтобы нелюбовь к GUI, просто я это всё хочу поставить на удалённый сервер, и чтобы запись включалась и выключалась скриптом (неким триггером)

Нужно скачивать поток - на сервере вообще иксов нет - голая консоль.

Architector
() автор топика
Ответ на: комментарий от Architector

Нужно скачивать поток

Тогда надо смотреть, что за сайт. Некоторые отдают ts кусками по несколько кбайт, это засада. Но, может, youtube-dl поддерживает скачку с твоего сайта.

Если не поддерживает, открываешь в браузере «инспектор-сеть», там можно узнать URL. Тут еще надо проработать такой момент. Если связь прервется, должны быть повторы соединения, но писаться они должны в новый файл, а не заменять существующий.

anonymous
()

Посмотри streamlink, вдруг твой сайт поддерживается. А если нет, то напиши плагин сам :)

deadNightTiger ★★★★★
()

В общем нашел такое решение: ставим иксы, запускаем lightdm (у меня kali), экран можно не подключать.

Запускаем браузер с нужным нам сайтом aka

xargs firefox -new-tab https://www.google.ru/

Запускаем ffmpeg

ffmpeg -f x11grab  -y -rtbufsize 100M -s 1366x768 -framerate 30 -probesize 10M -draw_mouse 1 -i :0.0 -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p  screen.mp4

Profit!

-y — если в текущей директории есть файл screen.mp4, то ffmpeg перезапишет его не задавая вопросов;

-rtbufsize 100M — буфер под видео. Запись с экрана должна идти бысто и гладко, чтобы не было дропов (пропусков) кадров. Поэтому лучше сначала записывать видео в память (так  быстрее чем на диск), а затем ffmpeg сам перенесет из памяти на диск.

-f x11grab — захват экрана X11 сервера;

-framerate 30 — частота кадров результирующего видео;

-probesize 10M — количество кадров необходимое ffmpeg для идентификации потока. Вроде со значением 10M работает нормально;

-draw_mouse 1 — рисовать мышку;

-i 0 — говорим ffmpeg, какой экран писать;

-c:v libx264 — сжимать будем в формат MP4 кодеком x264;

-r 30 — кодек запишет видео с частотой 30 кадров в секунду;

-preset ultrafast — говорим кодеку, чтобы долго не раздумывал и кодировал видеопоток, как можно быстрее (при записи экрана это актуально);

-tune zerolatency — опция кодека x264 для ускорения кодирования;

-crf 25 — качество записываемого видео (большее значение — хуже видео, меньшее — лучше);

-pix_fmt yuv420p — цветорвой формат результирующего видео.

P.S. под ключом -i должно стоять значение переменной окружения $DISPLAY

Architector
() автор топика
Последнее исправление: Architector (всего исправлений: 1)
Ответ на: комментарий от Architector

боже, какая жесть. у тебя поток шифрованный что ли? если нет, то какая проблема его напрямую скопировать тем же ffmpeg’om без захвата экрана? попробуй ещё youtube-dl, он много с каких сайтов может поток выдирать.

если бы ты сюда скинул ссылку, то получил бы нормальное «консольное» решение, а не вот это вот, что у тебя. да можешь даже сам попробовать. открой страницу с потоком в браузере, нажми f12, выбери в открывшейся панели network или «сеть», отфильтруй, чтобы показывались только медиафайлы (кнопка media или «медиа»), нажми ctrl+f5 и перезапусти поток. по идее, в списке должны появиться файлы .m3u8 или типа того. выбери подходящий и скопируй его полный урл. потом ffmpeg -i "урл" -c copy stream.mp4. готово. такой способ работает почти всегда.

anonymous
()
Ответ на: комментарий от Architector

-framerate 30
-r 30

По идее, надо выставлять сколько в исходном видео.

-draw_mouse 1

Зачем рисовать мышь?

screen.mp4

При нештатном завершении, файл будет нечитаем. Сохранять надо в ts, в крайнем случае в mkv.

у меня kali

Kali на сервере?

-preset ultrafast
-crf 25

На ultrafast crf 25 качество будет отвратным. Ставь 18 или 16. Если комп слабоват, можешь писать в mpeg2, все равно сжимать потом с нормальными настройками придется:

-c:v mpeg2video -q:v 1 -bf 0 -g 12 -maxrate 35000k -bufsize 4176k output.ts
-q:v Качество видео, чем ниже цифра, тем выше качество
-bf 0 Не использовать B фреймы. Можно указать 1 или 2, но будет медленнее, зато меньше битрейт
-g 12 Ключевые кадры (I) будут вставляться каждые 12 кадров (~0.5 сек), дефолтное значение для mpeg2 и mpeg4. Детектора сцен нет, так что сильно лучше не увеличивать
-maxrate Чтобы битрейт сильно не задирался и не превышал профиль High
-bufsize Если не указать, ffmpeg выберет сам в зависимости от -maxrate
output.ts Сохранять надо в ts, боже упаси не в mp4. Тогда при нештатном завершении, файл будет полностью корректным.

А звук у тебя захватываться не будет. Кури
https://trac.ffmpeg.org/wiki/Capture/Desktop
https://trac.ffmpeg.org/wiki/Capture/ALSA

Но таки да, лучше поток скачать, чем писать с экрана. Ссылку на сайт приведи.

anonymous
()
Ответ на: комментарий от Architector

поток передаётся разными файлами (по 1,12мб)

Так склей их ffmpeg-ом.

anonymous
()

wget -O куда сохранить https://ссылка на поток
Должно сработать.

anonymous
()
Ответ на: комментарий от Architector

Я как вам скрипт заставлю каждый раз ссыль выдирать оттуда?

youtube-dl пробовал?

anonymous
()
Ответ на: комментарий от anonymous

Порно сайт

На святое замахнулся?!

anonymous
()
Ответ на: комментарий от anonymous

Надо выставлять как в исходнике, иначе будет дерготня. Впрочем, я не уверен, что кадры по времени лягут точно (без блендов). Если будут бленды, лучше писать с частотой экрана (60p). Производительность, естественно, должна быть хорошей, чтобы не было дропов.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.