LINUX.ORG.RU

Запись звука из нужной вкладки firefox

 


1

1

Добрый день.

Хочу записать серию вебинаров. Смотреть буду через firefox. Запись экрана выполняю такой командой:

ffmpeg -f alsa -ac 2 -i hw:0 -f x11grab -rtbufsize 100M -s 1920x1080 -framerate 30 -probesize 10M -draw_mouse 1 -i :0.0 -acodec aac -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p output.mp4

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

Раз поток идет через firefox, то по идеи отключение звука не должно повлиять на запись самого звука?

Вывод звука если все правильно понимаю идет через pipewire.

$ wpctl status
PipeWire 'pipewire-0' [0.3.65, muxas@mus-lx, cookie:1665517540]
 └─ Clients:
        31. pipewire                            [0.3.65, muxas@mus-lx, pid:1539]
        32. WirePlumber                         [0.3.65, muxas@mus-lx, pid:1537]
        33. WirePlumber [export]                [0.3.65, muxas@mus-lx, pid:1537]
        53. xdg-desktop-portal                  [0.3.65, muxas@mus-lx, pid:1700]
        54. xfce4-pulseaudio-plugin             [0.3.65, muxas@mus-lx, pid:1793]
        55. pipewire                            [0.3.65, muxas@mus-lx, pid:1539]
        56. Firefox                             [0.3.65, muxas@mus-lx, pid:1801]
        57. speech-dispatcher-dummy             [0.3.65, muxas@mus-lx, pid:10627]
        60. wpctl                               [0.3.65, muxas@mus-lx, pid:11540]

Audio
 ├─ Devices:
 │      42. Raven/Raven2/Fenghuang HDMI/DP Audio Controller [alsa]
 │      43. Family 17h/19h HD Audio Controller  [alsa]
 │  
 ├─ Sinks:
 │  *   46. Family 17h/19h HD Audio Controller Аналоговый стерео [vol: 1.00 MUTED]
 │  
 ├─ Sink endpoints:
 │  
 ├─ Sources:
 │  *   47. Family 17h/19h HD Audio Controller Аналоговый стерео [vol: 1.00]
 │  
 ├─ Source endpoints:
 │  
 └─ Streams:
        64. speech-dispatcher-dummy                                     
             59. output_FL       > ALC236 Analog:playback_FL	[init]
             61. output_FR       > ALC236 Analog:playback_FR	[init]

Video
 ├─ Devices:
 │      40. Integrated Camera                   [v4l2]
 │      41. Integrated Camera                   [v4l2]
 │  
 ├─ Sinks:
 │  
 ├─ Sink endpoints:
 │  
 ├─ Sources:
 │  *   44. Integrated Camera (V4L2)           
 │  
 ├─ Source endpoints:
 │  
 └─ Streams:

Settings
 └─ Default Configured Node Names:
         0. Audio/Sink    alsa_output.pci-0000_03_00.6.analog-stereo
         1. Audio/Source  alsa_input.pci-0000_03_00.6.analog-stereo

Согласно выводу, клиент pipewire под номером 56 и есть firefox.

Каким образом заставить ffmpeg брать звук из firefox и игнорировать другие источники звука?

Если открыть несколько вкладок в FF где есть источники звука (например несколько роликов), то как выбрать нужный для записи?

И последний вопрос, как можно посчитать какой размер файла получиться? Хотя бы примерно, дело в том, что учеба будет 5 дней подряд, по 7 часов. Соответственно нужно место где хранить все эти записи.

Направьте в нужном направлении, куда копать.

Спасибо.


Ты уверен что эта команда записывает звук проги а не микрофон?

Можно командой arecord потестировать разные способы записи и найти нужный источник.

Каким образом заставить ffmpeg брать звук из firefox и игнорировать другие источники звука?

Не уверен что это возможно.

Если открыть несколько вкладок в FF где есть источники звука (например несколько роликов), то как выбрать нужный для записи?

А это почти уверен что невозможно.

Почему бы просто не сделать только одну нужную вкладку, не открывая ничего левого?

И последний вопрос, как можно посчитать какой размер файла получиться? Хотя бы примерно, дело в том, что учеба будет 5 дней подряд, по 7 часов. Соответственно нужно место где хранить все эти записи.

Купи диск на 2тб, точно влезет. А вообще зависит от того что ты там записывать собрался. Можешь указать явно битрейт вместо crf, тогда размер будешь знать. Для slower пресета 1920х1080 нормальный битрейт около 4мбит/с (примерно 2гбайт/час), но у тебя ultrafast - качество будет плохое, или надо его выше сделать.

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

Направьте в нужном направлении, куда копать.

Я в похожем случае просто взял OBS (Open Broadcaster Software) и не мучался, по нему куча туториалов как текстовых так и видео.

V1KT0P ★★
()

Как вариант, c пульсой: использовать например mpv для воспроизведения твоего вебинара mpv https://...твой адрес видео. Потом находишь источник, который будешь использовать для записи pactl list sinks | grep $(pactl get-default-sink).monitor | cut -d : -f 2. Далее в твоем случае ffmpeg -f pulse -i здесь твой вывод из команды выше -f x11grab -rtbufsize 100M -s 1920x1080... и т.д..

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

@spawn_sp Ваш совет с командой:

pactl list sinks | grep $(pactl get-default-sink).monitor | cut -d : -f 2

помог.

Теперь после ввода этой команды:

ffmpeg -f pulse -ac 2 -i alsa_output.pci-0000_03_00.6.analog-stereo.monitor -f x11grab -rtbufsize 100M -s 1920x1080 -framerate 30 -probesize 10M -draw_mouse 1 -i :0.0 -acodec aac -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p output.mp4

запись идет как нужно. Даже если отключаю звук, запись звука продолжается. Не знаю почему, но так же помогло изменение драйвера с alsa на pulse.

@V1KT0P По поводу софта посмотрю, но был именно интерес настроить через ffmpeg, все таки консоль ближе да и привычнее как то. Но обязательно посмотрю.

@firkax

Купи диск на 2тб, точно влезет. А вообще зависит от того что ты там записывать собрался. Можешь указать явно битрейт вместо crf, тогда размер будешь знать. Для slower пресета 1920х1080 нормальный битрейт около 4мбит/с (примерно 2гбайт/час), но у тебя ultrafast - качество будет плохое, или надо его выше сделать.

Каким образом изменить битрейт, и что плохого в ultrafast? На текущий момент качество устраивает.

Спасибо за советы.

По объему получаемого файла, поставлю на ночь запись роликов с рутуба, посмотрю сколько получится объем.

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

Каким образом изменить битрейт, и что плохого в ultrafast? На текущий момент качество устраивает.

Ты команду просто в инете нашёл и даже не пытался понять что она делает что ли?

firkax ★★★★★
()
Ответ на: комментарий от ne4ch

Каким образом изменить битрейт, и что плохого в ultrafast? На текущий момент качество устраивает.

Если грубо то CRF это про качество и битрейт, а preset это выжиманием качества при том-же битрейте. При ultrafast минимум нагрузки на CPU но при этом хуже качество, при slower будет большая нагрузка на CPU но и качество будет лучше. Там еще есть куча промежуточных вариантов: superfast, veryfast, faster, fast, medium, slow. Если CPU позволяет лучше повыше выставить.

Также непонятно зачем ты «-tune zerolatency» добавляешь, это опция для онлайн стримов, для уменьшения задержки кодирования. Нужно только если надо быстро реагировать на вопросы аудитории, для записей вообще бесмысленная вещь. Она еще и некоторые фичи кодирования отключает что делает качество хуже.

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

«-tune zerolatency» убрал. При установке пресета «slow» особой разницы в качестве не заметил, зато видео стало рывками идти. Проц под 100% был загружен. Поставил «fast», более менее.

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

зато видео стало рывками идти. Проц под 100% был загружен.

Это пропуски кадров из-за того что кодирование не успевало за поступлением новых кадров. Лучше подобрать чтоб с запасом было, так как ведь надо достаточно CPU и на Firefox оставить.

Можно еще попробовать использовать аппаратное кодирование если есть, особо хорошо это реализовано у Intel, далее идет Nvidia, ну а у Amd хуже всего с этим. В OBS это легко можно выбрать в настройках тогда CPU практически не будет нагружен, а вот с тем чтоб разобраться как то-же самое сделать в ffmpeg надо постараться.

Обычно программно кодируют когда не нужен реалтайм, тогда с пресетом slower можно получить лучшее качество. Но если используется пресет ultrafast или похожий то аппаратное кодирование может наоборот дать лучшее качество.

V1KT0P ★★
()