VLC使用终端进行屏幕录制

16

我试图将我的屏幕捕获为视频,并发现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,但我不知道如何使用该命令。

此外,是否有人知道是否可以使用VLC捕捉特定应用程序,或者只能捕捉整个屏幕?

6个回答

17

如何在录制时退出

Ctrl+C可以用来发送信号SIGINT来终止进程(例如VLC)。

由于流是无限源,因此选项vlc://quit在捕获屏幕时无法使用。


正确的方法 - RC (远程控制)

您可以使用TCP socketUNIX socket连接到您的VLC。

  • TCP socket

    要使用TCP套接字(类似于telnet连接)远程连接到您的VLC,请使用--rc-host your_host:port。然后,通过telnet或netcat连接到给定端口上的主机,即可获得命令行。

  • UNIX socket

    要使用UNIX套接字(本地套接字,这对于Windows不起作用),请使用--rc-unix /path/to/socket。然后可以使用此UNIX套接字传递命令。

要为VLC启用远程控制界面,您需要添加选项。

--extraintf rc --rc-quiet


如何退出

  • TCP套接字

    echo quit | nc 你的主机 端口号

  • 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

      如果您的计算机没有 nc(netcat),您也可以使用以下 Python 代码。

      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 子屏幕的高度。默认值:<完整屏幕高度>

1
如果您没有nc(Windows),"vlc --one-instance vlc://quit"也会向远程控制发送退出命令。 - user2543253
1
这个回答似乎已经过时了。我不知道2014年通过远程控制接口传递的“quit”命令是如何工作的,但现在(我的Ubuntu 16.04上的VLC媒体播放器2.2.2),您必须发送“stop”和“shutdown”命令(“quit”只是断开与RC接口的连接)。此外,似乎使用CTRL-C中断屏幕捕获VLC进程是由VLC优雅地处理的(对CTRL-C使用动词kill是过度杀伤)。另外,应该注意到,“--dummy-quiet”和“--rc-quiet”选项仅适用于Windows。 - Leon
1
VLC 可以 处理 SIGINT,如果编写正确,它会在 SIGINT 上正确关闭视频流,不会 导致损坏的视频文件。 - peterh
1
这个例子在Ubuntu 18.04 LTS上的VLC 3.0.8中不起作用。--extraintf rc已被--extraintf oldrc替换。而且一些其他参数(如--dummy-quiet)也不受支持。这个videolan wiki显示--screen-mouse-image仅用于Windows。我找不到鼠标指针图像的解决方案。 - Tranfer Will

1

2019年在Mac OS上终端或iterm中进行屏幕截图:

为VLC在.bashrc.zshrc中添加别名:

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,但您可以根据需要自定义此功能。


同样适用于Ubuntu,但我删除了两行鼠标代码,因为我不确定它们的作用。 - WinEunuuchs2Unix
使用--screen-follow-mouse标志将使“相机”跟随鼠标进行录制。而--screen-mouse-image="...image path..."则使用图像作为鼠标指针。 - Khalil Gharbaoui
1
整个屏幕都在录制,所以鼠标不需要特别处理。但是声音没有被记录下来(默认输出音频设备),因此我认为需要添加类似这样的内容:acodec=mp4a,ab=96,channels=2,samplerate=44100,但是找不到包含声音的示例。 - WinEunuuchs2Unix
确切地说,如果 --screen-width--screen-height 被设置为小于全屏幕,则 --screen-follow-mouse 标志才有用,否则没有东西可供跟随。顺便说一句:如果你找到了音频的解决方案,请分享给我,我很好奇。 - Khalil Gharbaoui
声音问题比较复杂。到目前为止,我已经成功地使用 pavucontrol 将系统输出的声音路由到麦克风中,我认为这是一个不错的第一步。 - WinEunuuchs2Unix
几个小时后,我放弃了并使用了 Simple Screen Recorder。它实际上相当简单。 - WinEunuuchs2Unix

0

我不得不更改我的机器(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)

0

如果你在使用Windows操作系统,这很重要:

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

不起作用,你必须使用本地主机IP,否则它不会工作。请使用127.0.0.1代替:

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

0

在Windows电脑上获取音频

  • 录制声音:

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

  • 停止录制:

按PAUSE键,然后按CONTROL-F4键

  • 如果视频倒置,请使用“transform-type”滤镜播放:

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


0

有一个简单的方法,您不需要处理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"}

步骤3: 要保存并停止现有记录,请使用

vlc://quit

注意:使用这些命令之前,请确保检查路径


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接