Как я записываю аудио от интерактивных веб-страниц с помощью VLC?

TL; DR

Откройте файл журнала в режиме добавления :

cmd >> log

Затем вы можете безопасно обрезать его с помощью:

: > log

Подробности

С помощью в оболочке, подобной Bourne, существует 3 основных способа открытия файла для записи. В только запись (> ), чтение + запись ( <> ) или добавление (и запись -только, режим >> ).

В первых двух ядро ​​запоминает текущую позицию, в которой вы находитесь (я имею в виду описание открытого файла , общее для всех файловых дескрипторов, которые его дублировали или унаследовали путем разветвления от одного вы открыли файл на) находятся в файле.

Когда вы делаете:

cmd > log

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

cmd (его начальный процесс, порожденный оболочкой и всеми возможными потомками) при записи в их стандартный вывод, запись в текущей позиции курсора, удерживаемой описанием открытого файла , которое они совместно используют в этом файле .

Например, если cmd первоначально записывает zzz , позиция будет по смещению байта 4 в файл, а в следующий раз cmd или его дочерние элементы записать в файл, туда будут записаны данные независимо от того, увеличился или уменьшился файл за интервал.

Если файл сжался, например, если он был усечен с помощью

: > log

и cmd пишет xx , те xx будут записаны в смещение 4 , и первые 3 символа будут заменены символами NUL.

$ exec 3> log # open file on fd 3.
$ printf zzz >&3
$ od -c log
0000000   z   z   z
0000003
$ printf aaaa >> log # other open file description -> different cursor
$ od -c log
0000000   z   z   z   a   a   a   a
0000007
$ printf bb >&3 # still write at the original position
$ od -c log
0000000   z   z   z   b   b   a   a
0000007
$ : > log
$ wc log
0 0 0 log
$ printf x >&3
$ od -c log
0000000  \0  \0  \0  \0  \0   x
0000006

Это означает, что вы не можете обрезать файл, который был открыт в режиме только для записи (и то же самое для чтение + запись ), как если бы вы это делали, процессы, у которых были открыты файловые дескрипторы в файле, оставит символы NUL в начале файла (они, за исключением OS / X, обычно не занимают места на диске, они становятся разреженными файлами).

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

cmd >> log

или

: > log && cmd >> log

, если вы хотите начать пустой файл.

В режиме добавления все записи производятся в конец файла, независимо от того, где была последняя запись:

$ exec 4>> log
$ printf aa >&4
$ printf x >> log
$ printf bb >&4
$ od -c log
0000000   a   a   x   b   b
0000005
$ : > log
$ printf cc >&4
$ od -c log
0000000   c   c
0000002

Это также безопаснее, как если бы два процесса открыли (таким образом) файл по ошибке (как для instance, если вы запустили два экземпляра одного и того же демона), их вывод не будет перезаписывать друг друга.

В последних версиях Linux вы можете проверить текущую позицию и был ли открыт дескриптор файла в режиме добавления , просмотрев / proc / / fdinfo / :

$ cat /proc/self/fdinfo/4
pos:        2
flags:      0102001

Или с:

$ lsof +f G -p "$$" -ad 4
COMMAND  PID USER   FD   TYPE  FILE-FLAG DEVICE SIZE/OFF     NODE NAME
zsh     4870 root    4w   REG 0x8401;0x0 252,18        2 59431479 /home/chazelas/log
~# lsof +f g -p "$$" -ad 4
COMMAND  PID USER   FD   TYPE FILE-FLAG DEVICE SIZE/OFF     NODE NAME
zsh     4870 root    4w   REG   W,AP,LG 252,18        2 59431479 /home/chazelas/log

Эти флаги соответствуют флагам O ..._, переданным системному вызову open .

$ gcc -E - <<< $'#include <fcntl.h>\nO_APPEND O_WRONLY' | tail -n1
02000 01

( O_APPEND - 0x400 или восьмеричное 02000)

Итак, >> оболочки открывает файл с O_WRONLY | O_APPEND (и 0100000 здесь O_LARGEFILE что не имеет отношения к этому вопросу), а > - это только O_WRONLY <> - только O_RDWR ).

Если вы выполните:

sudo lsof -nP +f g | grep ,AP

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

1
19.02.2014, 04:51
2 ответа

Может быть, гораздо проще смотреть на исходный код веб-сайтов (я думаю, это был Ctrl+u в Firefox, если не просто щелкнуть правой кнопкой мыши и "показать исходный код") и искать воспроизводимые носители. Затем скопируйте медиа-урл и используйте mplayer
  • для сохранения потока:

    (также может быть

  • flv расширение, если это флэш-плеер на основе видео потока, или вебм или огг или что-то еще).

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

    Источник изображения: https://superuser.com/questions/650434/firefox-dom-inspector-highlight-element-like-chrome-firebug

    0
    27.01.2020, 23:53

    вы можете прочитать решение здесь и здесь с более подробной информацией, BTW для записи хорошего звука вы НЕ ДОЛЖНЫ использовать разъем, чтобы связать аудио выход браузера с vlc

    так что вскоре здесь :

    sudo apt-get install pulseaudio-module-jack qjackctl
    

    теперь вы nee d, чтобы запустить qjackctl и установить как на этой картинке. enter image description here

    после этого вы можете протестировать здесь следующим образом: в данном случае я использовал mp3 и x264 как кодеки, вы можете просто попробовать изменить это, если вам это нужно.
    Файл будет записан в папку tmp и для остановки записи просто нажмите Ctrl+C

    cd /tmp ; cvlc --jack-input-auto-connect screen:// --screen-fps=25 --input-slave pulse://jack_in --sout "#transcode{venc=x264,quality:50,scale=1,fps=25,acodec=mp3,ab=128,channels=2, samplerate=44100}:duplicate{dst=std{access=file,mux=mp4,dst=nowardev.mp4}}}"
    
    1
    27.01.2020, 23:53

    Теги

    Похожие вопросы