依赖项:

依赖项:

我想为已看完的视频添加默认徽标。有没有直接、非手动的方式来运行脚本,以判断视频是否已播放完毕?可以用于任何 Linux(mint/ubuntu)视频播放器。

答案1

vlc --play-and-exit video.mp4 && echo "Terminated"

替换echo "Terminated"为您想要运行的实际命令。这&&意味着如果 vlc 以错误代码退出,则不会执行该命令。如果您希望即使发生错误也能执行该命令,

vlc --play-and-exit video.mp4; echo "Terminated"

如果你向 vlc 提供更多文件,则该命令将仅执行所有媒体播放完毕后。 例如,

vlc --play-and-exit s0.mp3 s1.mp4 && shutdown now

表示播放完这两个文件后系统将立即关机。

如果你想执行...操作每个播放文件,您可以使用这个 shell 脚本(我们称之为play.sh):

#!/bin/sh
for file in "$@"; do
    vlc --play-and-exit "$file"
    echo "File $file has been played."
done

然后在各个文件上执行它:

sh play.sh file1.mp3 'Me & You.mp4' 'file 3.wav'

不要忘记在适当的时候引用文件(特别是在空格和特殊字符,如&*等)。


--play-and-exit标志也适用于cvlc

答案2

既然我问了,我想分享一下我想到的基于包装器的快速破解方法。我创建了以下 vlc 包装器,并设置了在其中打开的视频文件,而不是直接在 vlc 中打开。它一次只支持一个文件。如果在播放文件时在 vlc 中移动的东西一直移动到最后,tag watched如果大约 60% 的视频已被观看,它将在最后运行命令。

#!/bin/bash
#This depends on the cli interface having been activated in the preferences
# This while loop feeds the `get_length` vlc cli command to cli every 0.1 s
(while :; do echo get_length; sleep 0.1 ; done) | 
#Pass all arguments to vlc and set it up to be fed from the `get_length` while loop
/usr/bin/vlc "$@" |
ruby  -n -e '
    BEGIN { 
    cons_empty=0
    nlines_read=0
  }
    #Strip vlc cli noise
    $_=$_.sub(/^[> ]*/,"")
    #Watch consecutive (cons) empty lines
    if $_.match(/^\s*$/) 
      cons_empty += 1
    else
      #Assume each nonempty stdin line is the duration
      duration = $_.chomp.to_i
      cons_empty = 0
      nlines_read += 1
    end
    #On 10 consecutive empty lines, assume the file has finished playing
    if cons_empty == 10
      time_watched = nlines_read * 0.1
      p time_watched: time_watched, duration: duration
      ret = (time_watched > 0.6 * duration) ? 1 : 0
      exit ret
    end
    ' ||
tag watched "$@" #1 exit means finished watching

它是有效的,而不是漂亮的代码,但它只是一个烦恼的快速解决方案。

依赖项:

bash、ruby、+ 替换tag watched为您的实际标记命令。

相关内容