intl
intl

Reputation: 2773

VLC screen capture using terminal

I'm attempting to capture my screen as video and found VLC to probably be the best solution. What I have to do is capture a specific application using terminal and then stop the capture as well. Right now, I can capture using terminal with the following command:

/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"}"

That's great, it works. The question is, how do I quit the recording using terminal? Right now, I'm having to do Control+C on the terminal to quit it. I've seen vlc://quit online, but I'm not sure how to use that command.

Also, does anyone know if it's possible to capture a specific application using VLC or is the whole screen the only option?

Upvotes: 16

Views: 22529

Answers (6)

Malcolm Boekhoff
Malcolm Boekhoff

Reputation: 1092

To get audio on a Windows box

  • To record with sound:

vlc "dshow://" ":dshow-vdev=screen-capture-recorder" ":sout=#transcode{vcodec=mpgv,acodec=mpga}:file{dst=myscreencapture.mp4}"

  • To stop recording:

Press PAUSE followed by CONTROL-F4

  • Use "transform-type" filter to play, if it is inverted:

vlc --transform-type=vflip "myscreencapture.mp4"

Upvotes: 0

Well there is a simple approach you don't need to deal with TCP sockets/Unix Sockets.

Step1: First open Vlc ->Tools ->Preferences Under Interface Tab make sure you check "Allow only one Instance".

If you don't find it using above method then search for instance in Advance Preference Tab Then check Allow only one instance.

This helps you to prevent starting new recording and it allows you to keep track the existing recording.

Step2: To start Recording use this command

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: To save and Stop the existing record use

vlc://quit

Note: Make sure to check the path before you use this commands

Upvotes: 0

Khalil Gharbaoui
Khalil Gharbaoui

Reputation: 7042

Screen capture on terminal or iterm on Mac OS 2019:

Add an alias to you .bashrc or .zshrc for VLC:

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

Then add this function to your .bashrc or .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'}}"
}

Open a new terminal session and do: screencapture

When done do CTRl + C to stop the function.

That's it find the files in your Desktop folder example:

Screencapture 2019-01-04 at 09.57.42.mp4

Videos will be 1280x720 but you can customize this function however you like.

Upvotes: 1

user2462619
user2462619

Reputation: 37

I had to change quit command on my machine (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)

Upvotes: 0

NetworkSys Co. Ltd
NetworkSys Co. Ltd

Reputation: 156

Important if you're on windows:

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

Doesn't work you'Ve to use local host ip otherwise it won't work. Use 127.0.0.1 instead:

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

Upvotes: 0

P̲̳x͓L̳
P̲̳x͓L̳

Reputation: 3653

How to NOT quit when recording

Ctrl+C kill process (in this case VLC) with signal SIGINT.

vlc://quit option will not work when you capture screen because stream is never-ending source.


Right way - RC (Remote Control)

You can connect to your VLC using a TCP socket or a UNIX socket.

  • TCP socket

    To be able to remote connect to your VLC using a TCP socket (telnet-like connetion), use --rc-host your_host:port. Then, by connecting (using telnet or netcat) to the host on the given port, you will get the command shell.

  • UNIX socket

    To use a UNIX socket (local socket, this does not work for Windows), use --rc-unix /path/to/socket. Commands can then be passed using this UNIX socket.

To enable remote control interface for VLC you will need to add options

--extraintf rc --rc-quiet


How to quit

  • TCP socket

    echo quit | nc your_host port

  • UNIX socket

    echo quit | nc -U /path/to/socket


    Example

    1. Execute 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. Gracefully shutdown VLC

      echo quit | nc localhost 8082

      You can also use Python code below if you do not have nc (netcat) on your computer.

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


How to capture specific application

You can't select which application to record but you can specify coordinate, width and height of the subscreen.

Options

  • --screen-top integer The top edge coordinate of the subscreen. Default value: 0
  • --screen-left integer The left edge coordinate of the subscreen. Default value: 0
  • --screen-width integer The width of the subscreen. Default value: <full screen width>
  • --screen-height integer The height of the subscreen. Default value: <full screen height>

Upvotes: 17

Related Questions