Cywin shell 下使用 PotPlayer 打开音视频

经常要看一些本地的视频,也常用终端管理文件,使用 vim 的插件 Fern 做为文件管理器,可以有批量重命名之类的复杂操作,很方便,但是不能调用本地的软件打开音视频。而我之前的解决方法是使用 explorer . 打开资源管理器,再用鼠标点视频来看。

但是总是遇到以下问题:

  1. 对于全是视频的文件夹,explorer . 打开后的资源管理器中的样式是大图标,排序乱。
  2. 看起来不如终端下的列表直观,文件不好找。
  3. 窗口占用位置。

经过一番尝试,写了个脚本实现了该功能,还学到一些 Linux 的知识,发贴分享下。

alias 的尝试

使用 alias 指定 play 为 PotPlayer 播放器位置,后跟参数 /filedlg 表示当不传入要播放的文件时打开 “文件对话框”。

alias play="/cygdrive/c/Program\ Files/PotPlayer/PotPlayerMini64.exe /filedlg"

使用举例:

  • play .,打开播放器,并将当前目录下的内容加入播放列表。
  • play a.mp4
  • play a.mp3
  • play {folder_name1},可以跟一个文件夹,打开 Potplayer 并将文件夹中的所有内容加入到播放列表。

以上用法,在终端会有持续不断的输出,可以将输出指向 null

  • play {a.mp4} > /dev/null 2>&1 &

在后台执行

上面的方法在使用时,终端将会失去交互,显示播放器的日志内容,使用 ctrl+c 退出时,播放器也会被关闭。

所以,准备修改下 alias 后的内容,不让播放器输出日志。

alias play="/cygdrive/c/Program\ Files/PotPlayer/PotPlayerMini64.exe /filedlg > /dev/null 2>&1  &"

可以单独执行 play,但无法传递文件路径了。

% play .
[1] 12767
.: not enough arguments

经过一番搜索,发现 alias 好像不能传参,不过可以写脚本,给脚本传参。bashrc里alias加参数如何做? - Ubuntu中文论坛

shell 脚本

文件名:play

#!/bin/bash
# $1 脚本接收的参数,是传给 Potplayer 的文件路径,要加上双引号才能接收带有空格的文件路径。
/cygdrive/c/Program\ Files/PotPlayer/PotPlayerMini64.exe "$1" /filedlg  > /dev/null 2>&1  &

然后,就可以使用:

  • ./play .
  • ./play a.mp4
  • ./play a.mp3
  • ./play folder_name1

在家目录下创建自己的 bin 目录,管理方便,并将 play 脚本放进去。(linux - Move script.sh to bin - Stack Overflow )

mkdir $HOME/bin

将该文件夹的路径加入到 PATH 中。

~/.bashrc~/.zshrc 最后加上一行 export PATH=$PATH:$HOME/bin

执行 source ~/.zshrcsource ~/.bashrc 重新加载配置文件。

之后就可以在任意路径下使用 play 命令了。

% play .
% ps
      PID    PPID    PGID     WINPID   TTY         UID    STIME COMMAND
     8922    7919    8922       8996  pty2      197609 16:52:05 /usr/bin/ssh
    13294    7892   13294       1712  pty1      197609 22:26:24 /usr/bin/ps
     7891       1    7891      16600  ?         197609 06:31:48 /usr/bin/tmux
     7859    7858    7859       6932  pty0      197609 06:31:41 /usr/bin/zsh
     7889    7859    7889       1364  pty0      197609 06:31:46 /usr/bin/tmux
    13283       1   13282       6944  pty1      197609 22:26:16 /cygdrive/c/Program Files/PotPlayer/PotPlayerMini64
     7892    7891    7892      17280  pty1      197609 06:31:49 /usr/bin/zsh
     7858       1    7858       8104  ?         197609 06:31:41 /usr/bin/mintty
     7919    7891    7919       3468  pty2      197609 06:31:59 /usr/bin/zsh
% kill 13283
%

还能通过 ps 列出 play 命令打开的 PotPlayer 的进程,所以就可以用 kill 命令关闭它。

你可以改成列表样式啊……

我刚刚在多个文件夹下测试了 explorer .,发现只有在第二次使用这个命令时,(使用的是右下角的列表,和大图标的按钮切为列表),才会保存上次的列表样式,且只影响这个文件夹,对其他视频文件夹无效。

image

另外,我对使用类似 play a.mp4 的方式感觉很方便,因为可以不用鼠标,还有文件名补全。

喜欢用命令行的话,可以试试用mpv播放器,可以完全靠快捷键完成所有操作

这个方法是通用的,所以也可以为打开图片文件写个脚本。

我使用的图片查看器是 Honeyview.

文件:$HOME/bin/img

/cygdrive/c/Program\ Files/Honeyview/Honeyview.exe "$1" &

使用:

  • img .
  • img test.png

在打开图片后,用 ESC 键就能关闭图片,鼠标退回终端,很方便。

找到一个更简单的方式,explorer {文件名},使用默认的关联程序打开文件。