【问题标题】:VLC screen capture using terminal使用终端的 VLC 屏幕截图
【发布时间】:2014-03-31 19:15:08
【问题描述】:

我正在尝试将我的屏幕捕获为视频,并发现 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 捕获特定的应用程序,或者整个屏幕是否是唯一的选择?

【问题讨论】:

    标签: bash terminal vlc screen-capture


    【解决方案1】:

    录制时如何退出

    Ctrl+C 用信号SIGINT 杀死进程(在本例中为VLC)。

    vlc://quit 选项在您捕获屏幕时将不起作用,因为流是永无止境的源。


    正确的方式 - RC (Remote Control)

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

    • TCP 套接字

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

    • UNIX 套接字

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

    要为 VLC 启用remote control 接口,您需要添加选项

    --extraintf rc --rc-quiet
    


    如何戒烟

    • TCP 套接字

      回声退出 | nc your_host 端口

    • UNIX 套接字

      回声退出 | nc -U /path/to/socket


      示例

      1. 执行 VLC

        vlc \ screen:// --one-instance \ -I dummy --dummy-quiet \ --extraintf rc\ --rc-host 本地主机:8082 \ --rc-安静\ --屏幕跟随鼠标\ --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

        回声退出 | nc 本地主机 8082

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

        导入套接字
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect(('localhost', 8082))
        s.sendall('退出\n')
        s.shutdown(socket.SHUT_WR)


    如何捕获特定的应用程序

    您无法选择录制哪个应用程序,但您可以指定子屏幕的坐标、宽度和高度。

    Options

    • --screen-top integer 子屏幕的上边缘坐标。 默认值:0
    • --screen-left integer 子屏幕的左边缘坐标。 默认值:0
    • --screen-width integer 子屏幕的宽度。 默认值:
    • --screen-height integer 子屏幕的高度。 默认值:

    【讨论】:

    • 如果你没有nc (Windows) "vlc --one-instance vlc://quit" 也会向遥控器发送退出命令
    • 这个答案似乎已经过时了。我不知道 quit 命令(通过远程控制界面传递)在 2014 年是如何工作的,但现在(我的 Ubuntu 16.04 上的 VLC 媒体播放器 2.2.2)你必须发送 stopshutdown 命令( quit 只是从 RC 接口断开)。此外,似乎用 CTRL-C 中断屏幕捕获 VLC 进程是由 VLC 优雅地处理的(使用动词 kill 表示 CTRL-C 是一种过度杀伤)。另外,应该注意--dummy-quiet--rc-quiet 选项是特定于Windows 的。
    • Vlc 可以处理 SIGINT,如果写入正确,它会正确关闭 SIGINT 上的视频流,不会导致视频文件损坏。
    • 此示例不适用于 Ubuntu 18.04 LTS 上的 vlc 3.0.8。 --extraintf rc 已替换为 --extraintf oldrc。也不支持其他一些参数(例如--dummy-quiet)。 this videolan wiki 表明--screen-mouse-image 用于窗口。我找不到鼠标指针图像的解决方案。
    【解决方案2】:

    屏幕截图在终端或 Mac OS 上的 iterm 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,但您可以随意自定义此功能。

    【讨论】:

    • 也适用于 Ubuntu,但我剪掉了两条鼠标线,因为我不确定它们做了什么。
    • 好吧 --screen-follow-mouse 标志将使“相机”在录制过程中跟随鼠标。并且 --screen-mouse-image="...image path..." 使用图像作为鼠标光标。
    • 整个屏幕都被记录下来,所以鼠标不需要什么特别的东西。声音不会录制(默认输出音频设备),所以我认为需要添加类似这样的内容:acodec=mp4a,ab=96,channels=2,samplerate=44100 但找不到包含声音的示例。
    • 确切地说,--screen-follow-mouse 标志仅在 --screen-width--screen-height 设置为小于全屏时才有用,否则没有什么可遵循的。顺便说一句:如果您确实找到了音频的解决方案,请分享我现在很好奇。
    • 声音问题很复杂。到目前为止,我已经设法使用pavucontrol 将系统输出声音路由到麦克风中,我认为这是很好的第一步。
    【解决方案3】:

    如果您在 Windows 上,这很重要:

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

    使用本地主机 ip 不起作用,否则将无法正常工作。改用 127.0.0.1:

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

    【讨论】:

      【解决方案4】:

      我必须在我的机器上更改退出命令(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)
      

      【讨论】:

        【解决方案5】:

        有一个简单的方法,您不需要处理 TCP 套接字/Unix 套接字。

        第一步: 首先打开 Vlc -> 工具 -> 首选项 在 Interface Tab 下,确保选中“Allow only one Instance”。

        如果使用上述方法没有找到,请在 Advance Preference Tab 中搜索 instance 然后勾选只允许一个实例。

        这可以帮助您防止开始新的录制,并允许您跟踪现有的录制。

        第二步: 要开始录制,请使用此命令

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

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

        vlc://quit
        

        注意:请务必在使用此命令之前检查路径

        【讨论】:

          【解决方案6】:

          在 Windows 机器上获取音频

          • 用声音录制:

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

          • 停止录制:

          按 PAUSE,然后按 CONTROL-F4

          • 使用“transform-type”过滤器播放,如果是倒置的:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-15
            • 2013-08-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多