LINUX.ORG.RU

Запись всего и вся звукового на Debian

 ,


0

2

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

Поэтому решил на будущее обзавестись какой-то аудиописалкой, которая умеет записывать все, что пролетает по звуковой карте.
Индивидуальные (скажем, только для Телеги или Скайпа) неинтересны - надо универсальную прогу, под все возможные случаи.

Долго гуглил по данному вопросу, но все аудиписалки, в том числе Audacity, пишут в основном с микрофона, но это не то.

Единственная найденная прога, в которой обещают писать звуки с любых аудио-источников - это «Audio Recorder»:
https://linuxinsider.ru/kak-zapisyvat-zvuk-na-ubuntu/

Но вот досада - разрабы ее портировали только на Ubuntu и Mint, а надо для Debian.

Хотя в гугле и встречаются некие советы как примандячить ее на Debian, но какие-то они стремные, не внушают доверия, а засирать новую чистенькую систему всякой непонятной хренью желания нет.

Может быть, уважаемые знают подобную прогу для Debian?

★★★★★

parec + ffmpeg

пример:

pactl list sources
parec --format=s16le --rate=44100 -d alsa_output.pci-0000_05_00.0.analog-stereo.monitor | ffmpeg -ac 2 -f s16le -ar 44100  -i - -y /tmp/pulse.wav
Ford_Focus ★★★★★
()
Последнее исправление: Ford_Focus (всего исправлений: 1)
Ответ на: комментарий от Ford_Focus

Ух как здорово! Чувствуется настоящий линуксоид :-)

Можно немного подробнее? Например, что для чего нужно выполнять 1-ю команду, которая показывает список источников, и с какого источника будет производить запись 2-я команда?

Потому что она сходу выдала обшибку:

Ошибка потока: Нет такого объекта

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

Я с помощью vlc записываю

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

Ford_Focus

Подобрал параметр «alsa_output.pci-0000_05_00.0.analog-stereo.monitor» на свой, и запись действительно пошла! :-)

Записало Телегу классно, но есть и проблема:

- в записи слышен только голос собеседника.

В некоторых случаях это даже хорошо, но не во всех.

Как сделать, чтобы в записи присутствовал также и мой голос?

chukcha ★★★★★
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

Ну, OBS это как из пушки по воробьям :-)

VLC, кстати тоже стал монстром, поэтому в последнее время не использую его.
И кстати, он умеет писать только с микрофона, если верить этой статье -
https://ru.aiseesoft.com/how-to/record-audio-with-vlc.html

А вот консольный вариант мне понравился больше всего!
Вот бы только научить его записывать и мой голос - была бы вообще пестня :-)

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

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

"""
https://trac.ffmpeg.org/wiki/Capture/PulseAudio
https://trac.ffmpeg.org/wiki/Capture/ALSA
https://ffmpeg.org/ffmpeg-filters.html#amix
"""

from subprocess import Popen, PIPE

microphone_input="alsa_input.pci-0000_00_1b.0.analog-stereo"
soundcard_monitor="alsa_output.pci-0000_00_1b.0.analog-stereo.monitor"
output_file="/tmp/output.m4a"

ff1 = Popen(["ffmpeg", f"-f pulse -i {microphone_input} -ac 1 -y /tmp/micro.m4a"], stdin=PIPE, shell=True)
ff2 = Popen(["ffmpeg", f"-f pulse -i {soundcard_monitor} -ac 2 -y /tmp/apps.m4a"], stdin=PIPE, shell=True)

input("Press Enter to continue...")

ff1.communicate(input=b'q')
ff2.communicate(input=b'q')

ff3 = Popen(["ffmpeg", f"-i /tmp/micro.m4a -i /tmp/apps.m4a -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -y {output_file}"], stdin=PIPE, shell=True)
ff3.wait()
Ford_Focus ★★★★★
()
Ответ на: комментарий от chukcha

но вообще, если obs действительно умеет писать звук и только звук - я бы тоже за него проголосовал. Не такой уж он и тяжёлый.

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

Спасибо, Ford! Вы настоящий фокусник :-)

Ничего, я ужо потестирую всласть!
Уж очень понадобилась такая универсальная фича для месенжеров.
И если вам удастся сделать, чтобы писалось в стерео режиме, причем чтобы на одну дорожку мой голос, а на другую собеседника - вашей разработке цены бы не было!


но вообще, если obs действительно умеет писать звук и только звук - я бы тоже за него проголосовал.

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

А гуишные приложение требуют инсталляции, и не везде они есть (например, как уже говорилось, «Audio Recorder» для Дебиана не завезли), после запуска надо возиться с настройками, вспоминая, какими они должны быть, и пр.

Не, для таких задач - только консоль, только хардкор! :-)

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

Ford_Focus

Ну что же, потестировал ваше чудное творение, и получил всего 2 ошибки :-) :

user@desktop:~$ ./audio_record.sh 
from: can't read /var/mail/subprocess
./audio_record.sh: строка 13: синтаксическая ошибка рядом с неожиданным маркером «(»
./audio_record.sh: строка 13: `ff1 = Popen(["ffmpeg", f"-f pulse -i {microphone_input} -ac 1 -y /home/user/tmp/micro.m4a"], stdin=PIPE, shell=True)'
:~$ 
Поправьте, пожалуйста :-)

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

Опаньки :-o А ведь как похожи-то! :-)
Кроме тройных кавычек, которые поэтому не понял к чему они, а это комменты, видать.

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

PS. Ваш питоновский вариант вывалил на экран кучу интересной инфрмации, в которой ошибок вроде нет, но похоже, ничего не пишет.

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

Вот эта информация:

:~$ python3 audio_recorder.py
Press Enter to continue...ffmpeg version 4.1.6-1~deb10u1ffmpeg version 4.1.6-1~deb10u1 Copyright (c) 2000-2020 the FFmpeg developers Copyright (c) 2000-2020 the FFmpeg developers

built with gcc 8 (Debian 8.3.0-6)
built with gcc 8 (Debian 8.3.0-6)
configuration: --prefix=/usr --extra-version='1~deb10u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
configuration: --prefix=/usr --extra-version='1~deb10u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavutil 56. 22.100 / 56. 22.100
libavdevice 58. 5.100 / 58. 5.100
libavcodec 58. 35.100 / 58. 35.100
libavfilter 7. 40.101 / 7. 40.101
libavformat 58. 20.100 / 58. 20.100
libavresample 4. 0. 0 / 4. 0. 0
libavdevice 58. 5.100 / 58. 5.100
libswscale 5. 3.100 / 5. 3.100
libavfilter 7. 40.101 / 7. 40.101
libswresample 3. 3.100 / 3. 3.100
libavresample 4. 0. 0 / 4. 0. 0
libpostproc 55. 3.100 / 55. 3.100
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'

Use -h to get full help or, even better, run 'man ffmpeg'

ffmpeg version 4.1.6-1~deb10u1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --prefix=/usr --extra-version='1~deb10u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'
:~$

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

Странно.. использовал для этого большого текста лоровский спойлер (cut), но он ни фига не работает :-O

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

Дружище Ford_Focus, удалось перенести ваше «бидоновское» творение во вездесущий бешик, и вот что получилось:

parec --format=s16le --rate=44100 -d alsa_input.pci-0000_00_1b.0.analog-stereo          | ffmpeg -ac 2 -f s16le -ar 44100  -i - -y /home/user/tmp/microfon.wav &
parec --format=s16le --rate=44100 -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | ffmpeg -ac 2 -f s16le -ar 44100  -i - -y /home/user/tmp/dynamic.wav  &

echo 'Ждем окончания разговора'
wait
Для завершения записи дважды жмем Ctrl-C, и получаем 2 раздельных файла:
- microfon.wav
- dynamic.wav

Для их объединения используем команду:
ffmpeg -i /home/user/tmp/microfon.wav -i /home/user/tmp/dynamic.wav -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -y /home/user/tmp/merger.wav

Не шедевр, конечно, можно еще усовершенствовать, но по крайне мере работает стабильно и уже можно вполне пользоваться.

Вам персональное спасибо за креативную помощь! :-)

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

Хотя, конечно, выходные файлы лучше не смешивать, а записать их раздельно в Левый и Правый канал.

И тогда с таким файлом будет очень удобно работать в плеерах, включая нужный канал и выключая ненужный.

Вот только как это сделать?

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

arecord - и что arecord? Можно подробнее, что вы хотели этим словом подсказать?

chukcha ★★★★★
() автор топика
Ответ на: комментарий от Harald
arecord

Эта алсачая утилита - дерьмо! В смысле вменяемого описания к ней.
Потратил 2 часа, изучая ее могучий ман и гугля по всему инету, пытаясь найти толкование, как задавать в ней синтаксис источников - ни хрена нету, все только друг у друга это и спрашивают!
Один даже несколько лет искал (наверное, все-таки пошутил) -

Спустя годы борьба продолжается ... как указать записывающее устройство, о чудо

https://qastack.ru/superuser/597227/linux-arecord-capture-sound-card-output-r...

И хотя PCM источники для нее легко определяются командой

arecord -L
но это гребаная утилита их либо не понимает, либо говорит, что их нет или они заняты.

Удалось запустить запись только с микрофона, да и то через одно место - через пульсу:
$ arecord -f S16_LE -D pulse  out.wav

А если надо, например, с динамика записывать - ну и как? Ахз...

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

-------------
PS. Вот эти алсачие источники - ну и нахрена их столько??
$ arecord -L
default
    Playback/recording through the PulseAudio sound server
null
    Discard all samples (playback) or generate zero samples (capture)
jack
    JACK Audio Connection Kit
pulse
    PulseAudio Sound Server
usbstream:CARD=HDMI
    HDA Intel HDMI
    USB Stream Output
sysdefault:CARD=PCH
    HDA Intel PCH, ALC887-VD Analog
    Default Audio Device
front:CARD=PCH,DEV=0
    HDA Intel PCH, ALC887-VD Analog
    Front speakers
dmix:CARD=PCH,DEV=0
    HDA Intel PCH, ALC887-VD Analog
    Direct sample mixing device
dmix:CARD=PCH,DEV=2
    HDA Intel PCH, ALC887-VD Alt Analog
    Direct sample mixing device
dsnoop:CARD=PCH,DEV=0
    HDA Intel PCH, ALC887-VD Analog
    Direct sample snooping device
dsnoop:CARD=PCH,DEV=2
    HDA Intel PCH, ALC887-VD Alt Analog
    Direct sample snooping device
hw:CARD=PCH,DEV=0
    HDA Intel PCH, ALC887-VD Analog
    Direct hardware device without any conversions
hw:CARD=PCH,DEV=2
    HDA Intel PCH, ALC887-VD Alt Analog
    Direct hardware device without any conversions
plughw:CARD=PCH,DEV=0
    HDA Intel PCH, ALC887-VD Analog
    Hardware device with all software conversions
plughw:CARD=PCH,DEV=2
    HDA Intel PCH, ALC887-VD Alt Analog
    Hardware device with all software conversions
usbstream:CARD=PCH
    HDA Intel PCH
    USB Stream Output

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

В этом трейде действительно записывают звук в wav? Он же весить будет гигабайты не?

Но вот досада - разрабы ее портировали только на Ubuntu и Mint, а надо для Debian.

Он ничего не портировал. Он собрал deb пакеты под убунту. Там исходники программы на си.

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

Да, в wav, но деловые разговоры по Инету обычно не настолько длинные.
К тому же в этих командах можно легко добавить прямо на лету преобразование wav в mp3.

chukcha ★★★★★
() автор топика

Сегодня добрейший Anonymous опубликовал просто шикарнейшее решение данной задачи! :-)

Вот оно:

pacmd list-sources
Выбираешь из списка индексы двух источников, например микрофон и какой-то *.monitor своего устройства.
Можно и по именам, а не по индексам, просто печатать дольше.
(В пульсе потокам можно давать человеческие имена, для этого надо поправить файл default.pa).

Допустим, ты выбрал индексы 0 и 1, тогда команда для одновременной записи двух стерео-потоков в один квадро (4 канала) будет такой:
ffmpeg -f pulse -i 0 -f pulse -i 1 -filter_complex join=2:quad  record.flac
Никаких скриптов и пайпов для этого не нужно.

Для записи двух моно-потоков в один стерео используй команду
ffmpeg -f pulse -ac 1 -i 0 -f pulse -ac 1 -i 1 -filter_complex join=2  record.flac

Не все форматы поддерживают больше двух каналов, а так, в принципе, ты можешь записывать в любой другой, не только во FLAC.

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

Причем, как оказалось, что это решение в отношении расширения интеллектуальное - оно автоматически создает тот формат выходного файла, который задан в расширении.

Т.е., если задать record.flac, то и файл получится в формате FLAC, если в record.mp3, то получится MP3.

Таких чудес еще не видел! :-)

Но, к сожалению, есть одно непонятное «но»:

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

«Но» такое: при работе этого чудесного рекордера практически всегда по экрану бегут такие строки -

[pulse @ 0x556206470a80] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[libmp3lame @ 0x556206498980] Queue input is backward in time
[mp3 @ 0x556206496740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134218 >= 121939
[mp3 @ 0x556206496740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134218 >= 123091
[mp3 @ 0x556206496740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134218 >= 124243
[libmp3lame @ 0x556206498980] Queue input is backward in time
[mp3 @ 0x556206496740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134218 >= 125395
[mp3 @ 0x556206496740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134218 >= 126547
[mp3 @ 0x556206496740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134218 >= 127699
[mp3 @ 0x556206496740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134218 >= 128851
или:
[pulse @ 0x556f975a8a80] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[flac @ 0x556f975ce740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134555 >= 125596
[flac @ 0x556f975ce740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134555 >= 108960
[flac @ 0x556f975ce740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134555 >= 113568
[flac @ 0x556f975ce740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134555 >= 118176
[flac @ 0x556f975ce740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134555 >= 122784
[flac @ 0x556f975ce740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134555 >= 109268
[flac @ 0x556f975ce740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134555 >= 113876
[flac @ 0x556f975ce740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 134555 >= 118484
[pulse @ 0x556f975bbf00] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[flac @ 0x556f975ce740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 279133 >= 271657
[flac @ 0x556f975ce740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 279133 >= 274771
[flac @ 0x556f975ce740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 287090 >= 270163
[flac @ 0x556f975ce740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 287090 >= 255805
[flac @ 0x556f975ce740] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 287090 >= 260413
и т.п.

Почему «инвалид» и что означает эта «немонотонность», не в курсе, но раз строки красные, значит, что-то нехорошее.

Что это за «фича» такая, и как от нее избавится?

chukcha ★★★★★
() автор топика

Пользуюсь таким скриптом:

#!/bin/bash

scriptname=$(basename $0)
LOCKFILE="/tmp/${USER}-${scriptname}"
PID_FILE1="${LOCKFILE}-osdcat.pid"
PID_FILE2="${LOCKFILE}-gst-launch.pid"

STOP () {
if [ -f "${PID_FILE2}" ]
then
  echo "KILL ${scriptname}"
  kill `cat $PID_FILE1`
  kill -2 `cat $PID_FILE2`
  rm -f ${PID_FILE1}
  rm -f ${PID_FILE2}
fi
exit 0
}

# lock it
exec 200>$LOCKFILE
flock -n 200 || STOP
pid=$$
echo $pid 1>&200

## Your code:
echo AUDIO | osd_cat -o6 -i850 -d-1 &
echo $! > $PID_FILE1

# заменить на свои !!!
SOURCE1=alsa_output.pci-0000_00_1f.3.analog-stereo.monitor
SOURCE2=alsa_input.pci-0000_00_1f.3.analog-stereo #mic

foname="/tmp/"`date +%F_%H%M%S`

gst-launch-1.0 audiomixer name=mix ! audioconvert ! audio/x-raw,channels=2 ! lamemp3enc bitrate=128 cbr=true ! filesink location=$foname.mp3 \
pulsesrc device=$SOURCE1 ! mix. \
pulsesrc device=$SOURCE2 ! mix. &>/dev/null &

echo $! > $PID_FILE2

echo "START ${scriptname}"
exit 0
Привяжи запуск на комбинацию клавиш.
1-ый запуск - старт записи, 2-ой запуск - стоп записи.
Патчи приветствуются.
Нужны gst-launch-1.0 и osd_cat. В Ubuntu надо установить пакеты gstreamer1.0-tools и xosd-bin

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

Прямо готовый продукт на продакшн

только багованный
thisscript && thisscript и привет - нифига не прибит как планировал

И чем он лучше однострочного варианта?

ну ты даёшь... То ffmpeg, а это gstreamer! понимать надо

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

ну ты даёшь... То ffmpeg, а это gstreamer! понимать надо

И как понимать надо? :-)

По крайней мере ffmpeg всего этого не требовал -

Нужны gst-launch-1.0 и osd_cat. В Ubuntu надо установить пакеты gstreamer1.0-tools и xosd-bin

и уложился в одну строку.

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

Версия 0.2:

#!/bin/bash

#trap "kill -2 \$(jobs -p) $$" 0 2 9 15

scriptname=`basename $0`
LOCKFILE="/tmp/${USER}-${scriptname}.pid"
pid=

STOP () {
	# kill -0 не доставляет никакого сигнала, а просто проверяет, существует ли процесс с данным PID	
	if kill -0 $pid && ps -p $pid -o cmd | grep ${scriptname}
	then  
		echo "${scriptname}: KILL"
		/bin/kill -s2 -$pid # завершаем gst-launch-1.0 по Ctrl-C
		/bin/kill -$pid # добиваем osd_cat
	else
		# pid не соответствует процессу с нашим именем
		echo "${scriptname}: WTF?"
	fi
exit 0
}

# lock it
read pid < ${LOCKFILE}

exec 200>$LOCKFILE
flock -n 200 || STOP 
pid=$$
echo $pid 1>&200
chmod 644 $LOCKFILE

## Your code:
echo "${scriptname}: START"
echo "AUDIO" | osd_cat -o6 -i850 -d-1 &

# заменить на свои !!!
SOURCE1=alsa_output.pci-0000_00_1f.3.analog-stereo.monitor
SOURCE2=alsa_input.pci-0000_00_1f.3.analog-stereo #mic

foname="/tmp/"`date +%F_%H%M%S`

# https://www.linux.org.ru/forum/multimedia/16511648?cid=16517479
# ffmpeg -f pulse -i 0 -f pulse -i 1 -filter_complex join=2:quad $foname.mp3

gst-launch-1.0 audiomixer name=mix ! audioconvert ! audio/x-raw,channels=2 ! lamemp3enc bitrate=128 cbr=true ! filesink location=$foname.mp3 \
pulsesrc device=$SOURCE1 ! mix. \
pulsesrc device=$SOURCE2 ! mix. &>/dev/null

exit 0

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

Замечательно! Только вы так и не объяснили, чем ваш скрипт на основе gst-launch лучше, чем одной строки с ffmpeg.

А хотелось бы просветиться :-)

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

Версия 0.3:

#!/bin/bash

# trap "kill -2 \$(jobs -p) $$" 0 2 9 15

scriptname=$(basename $0)
LOCKFILE="/tmp/${USER}-${scriptname}.lock"
PIDFILE="/tmp/${USER}-${scriptname}.pid"

STOP() {
echo "${scriptname}: KILL"
read -r pidosd pidgst < ${PIDFILE}

kill -s2 ${pidgst} # gst-launch-1.0 по Ctrl-C
kill ${pidosd} # osd_cat
exit 0
}

# lock it
exec 200>${LOCKFILE}
flock -n 200 || STOP

## Your code:
echo "${scriptname}: START"
echo "AUDIO" | osd_cat -o6 -i850 -d-1 &
pidosd=$!

# заменить на свои !!!
SOURCE1=alsa_output.pci-0000_00_1f.3.analog-stereo.monitor
SOURCE2=alsa_input.pci-0000_00_1f.3.analog-stereo #mic

foname="/tmp/"`date +%F_%H%M%S`

# https://www.linux.org.ru/forum/multimedia/16511648?cid=16517479
# ffmpeg -f pulse -i 0 -f pulse -i 1 -filter_complex join=2:quad $foname.mp3

gst-launch-1.0 audiomixer name=mix ! audioconvert ! audio/x-raw,channels=2 ! lamemp3enc bitrate=128 cbr=true ! filesink location=$foname.mp3 \
pulsesrc device=$SOURCE1 ! mix. \
pulsesrc device=$SOURCE2 ! mix. &>/dev/null &
pidgst=$!

echo "${pidosd} ${pidgst}" > ${PIDFILE}

exit 0

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

Ах так, значит! Но тогда и от нашего шалаша вашему :-)

parec --format=s16le --rate=44100 -d alsa_input.pci-0000_00_1b.0.analog-stereo          | ffmpeg -ac 2 -f s16le -ar 44100  -i - -y /home/user/tmp/microfon.wav -v quiet &
parec --format=s16le --rate=44100 -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | ffmpeg -ac 2 -f s16le -ar 44100  -i - -y /home/user/tmp/dynamic.wav  -v quiet &

read -p "Идет запись! Для окончания записи нажмите <Enter>"  ENDTALK

kill %1
kill %2

ffmpeg -i /home/user/tmp/microfon.wav -i /home/user/tmp/dynamic.wav  -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -y /home/user/tmp/out_audio.mp3

chukcha ★★★★★
() автор топика

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

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

Легкий тюнинг доброго анонимуса:

ffmpeg -f pulse -ac 1 -i 0 -f pulse -ac 1 -i 1 -filter_complex join=2  /home/user/tmp/audio-record-dual-$( date +%Y.%m.%d-%H:%M ).mp3

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