Захват экрана VLC с использованием терминала

Я пытаюсь захватить мой экран как видео и нашел, что VLC, вероятно, будет лучшим решением. То, что мне нужно сделать, это захватить определенное приложение, используя терминал, а затем остановить захват. Прямо сейчас я могу захватить терминал с помощью следующей команды:

/Applications/VLC.app/Contents/MacOS/VLC -I dummy screen:// --screen-fps=25 --quiet --sout "#transcode{vcodec=h264,vb072}:standard{access=file,mux=mp4,dst="Desktop/vlc-output-terminal.mp4"}"

Это здорово, это работает. Вопрос в том, как выйти из записи с помощью терминала? Прямо сейчас, я должен сделать Control + C на терминале, чтобы выйти из него. Я видел vlc://quit online, но я не уверен, как использовать эту команду.

Кроме того, кто-нибудь знает, можно ли захватить конкретное приложение с помощью VLC или это единственный экран?

Ответ 1

Как НЕ выйти при записи

Ctrl + C (в данном случае VLC) с сигналом SIGINT.

vlc://quit опция vlc://quit не будет работать, когда вы снимаете экран, потому что поток - бесконечный источник.


Правильный путь - RC (R emote C ontrol)

Вы можете подключиться к VLC с помощью TCP socket или UNIX socket.

  • Сокет TCP

    Чтобы иметь возможность удаленного подключения к VLC с использованием сокета TCP (telnet-like connetion), используйте -rc-host your_host: порт. Затем, подключив (используя telnet или netcat) к хосту на данном порту, вы получите командную оболочку.

  • Разъем UNIX

    Чтобы использовать сокет UNIX (локальный сокет, это не работает для Windows), используйте --rc -U nix/path/to/socket. Затем команды могут быть переданы с использованием этого UNIX-сокета.

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

--extraintf rc --rc-quiet


Как уйти

  • Сокет TCP

    echo quit | Порт nc your_host

  • Разъем UNIX

    echo quit | nc -U/путь/в/сокет


    пример

    1. Выполнить VLC

      vlc \
      screen:// --one-instance \
      -I dummy --dummy-quiet \
      --extraintf rc \
      --rc-host localhost:8082 \
      --rc-quiet \
      --screen-follow-mouse \
      --screen-mouse-image="mouse_pointer.png" \
      --screen-left=0 --screen-top=0 --screen-width=800 --screen-height=600 \
      --no-video :screen-fps=15 :screen-caching=300 \
      --sout "#transcode{vcodec=h264,vb=800,fps=5,scale=1,acodec=none}:duplicate{dst=std{access=file,mux=mp4,dst='/Videos/screen.mp4'}}"
    2. Изящное завершение работы VLC

      echo quit | nc localhost 8082

      Вы также можете использовать код Python ниже, если у вас нет nc (netcat) на вашем компьютере.

      import socket
      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      s.connect(('localhost', 8082))
      s.sendall('quit\n')
      s.shutdown(socket.SHUT_WR)


Как захватить конкретное приложение

Вы не можете выбрать, какое приложение записывать, но вы можете указать координату, ширину и высоту подэкрана.

Опции

  • --screen-top integer Координата верхнего края подэкрана. Значение по умолчанию: 0
  • --screen-left integer Координата левого края подэкрана. Значение по умолчанию: 0
  • --screen-width integer Ширина подэкрана. Значение по умолчанию: <ширина полного экрана>
  • --screen-height integer Высота подэкрана. Значение по умолчанию: <высота экрана в полноэкранном режиме>

Ответ 2

Важно, если вы находитесь в окнах:

,... --rc-host localhost:8082

Не работает вы. Чтобы использовать локальный IP-адрес хоста, иначе он не будет работать. Вместо этого используйте 127.0.0.1:

,... --rc-host 127.0.0.1:8082

Ответ 3

Мне пришлось изменить команду quit на моей машине (WIN 10):

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8082))
s.sendall('quit\n'.encode())
s.shutdown(socket.SHUT_WR)

Ответ 4

Снимок экрана на терминале или iterm в Mac OS 2019:

Добавьте псевдоним .bashrc или .zshrc для VLC:

alias vlc='/Applications/VLC.app/Contents/MacOS/VLC'

Затем добавьте эту функцию в ваш .bashrc или .zshrc:

screencapture(){
vlc \
-I dummy screen://\
--dummy-quiet \
--screen-follow-mouse \
--screen-mouse-image="/Users/YOUR_HOME_DIR/Desktop/awesome.jpg" \
--screen-left=0 --screen-top=0 --screen-width=1280 --screen-height=720 \
--no-video :screen-fps=15 :screen-caching=300 \
--sout "#transcode{vcodec=h264,vb=800,fps=5,scale=1,acodec=none}:duplicate{dst=std{access=file,mux=mp4,dst='/Users/YOUR_HOME_DIR/Desktop/Screencapture $(date +%Y-%m-%d) at $(date +%H.%M.%S).mp4'}}"
}

Откройте новый сеанс терминала и выполните: screencapture

Когда закончите, сделайте CTRl + C чтобы остановить функцию.

Чтобы он нашел файлы в вашем рабочем столе, например:

Screencapture 2019-01-04 at 09.57.42.mp4

Видео будет 1280x720, но вы можете настроить эту функцию так, как вам нравится.

Ответ 5

Ну, есть простой подход, вам не нужно иметь дело с сокетами TCP/Unix.

Шаг1: Сначала откройте Vlc → Инструменты → Настройки На вкладке Интерфейс установите флажок "Разрешить только один экземпляр".

Если вы не нашли его с помощью вышеуказанного метода, найдите экземпляр на вкладке "Дополнительные настройки" Затем установите флажок Разрешить только один экземпляр.

Это помогает вам предотвратить начало новой записи и позволяет отслеживать существующую запись.

Шаг2: Чтобы начать запись, используйте эту команду

vlc screen:// --qt-start-minimized :screen-fps=5 :run-time=30 :quiet :sout=#transcode{vcodec=h264,vb072}:standard{access=file,mux=mp4,dst="C:\Users\**admin**\Desktop\screencast.mp4"}

Step3: Чтобы сохранить и остановить существующую запись, используйте

vlc://quit

Примечание. Обязательно проверьте путь перед использованием этих команд.