Python 使用vlc播放视频,然后干净地终止该过程

Python 使用vlc播放视频,然后干净地终止该过程,python,subprocess,Python,Subprocess,我正在写一个脚本,用不同的播放器播放视频和音频文件。从这个角度讲,vlc并不是唯一的,我希望避免使用任何特定的选项,比如“播放和退出”。vlc/cvlc的问题在于(从终端)播放视频/音频后,它不会终止该过程。 我能做的最好的事情可以通过以下只在ipython中工作的脚本来说明: import subprocess def play_with_vlc(): proc = subprocess.Popen(['/usr/bin/vlc', PATH_TO_FILE]) try:

我正在写一个脚本,用不同的播放器播放视频和音频文件。从这个角度讲,vlc并不是唯一的,我希望避免使用任何特定的选项,比如“播放和退出”。vlc/cvlc的问题在于(从终端)播放视频/音频后,它不会终止该过程。 我能做的最好的事情可以通过以下只在ipython中工作的脚本来说明:

import subprocess


def play_with_vlc():
    proc = subprocess.Popen(['/usr/bin/vlc', PATH_TO_FILE])
    try:
        subprocess.communicate(timeout=5)
    except subprocess.TimeoutExpired:
        proc.kill()
        proc.communicate()


play_with_vlc()
然而,这不是我正在寻找的解决方案。因为我不应该知道播放一段视频需要多长时间。我只想在vlc进程停止播放文件后,干净安全地终止它。但它不应该是具体的东西。 有没有办法做到这一点

编辑:

好的,根据我目前所学到的,我不得不得出结论,最好的方法是计算文件的持续时间。 可以通过子处理
$ffprobe-v error-show_entries format=duration-of default=noprint_wrappers=1:nokey=1 PATH
linux命令来完成

但我仍然不太明白为什么下面的脚本不能按预期工作

import subprocess
import sys


def play_with_vlc(path_to_file=sys.argv[1]):
    proc = subprocess.Popen(['/usr/bin/vlc', path_to_file])
    try:
        subprocess.communicate(timeout=5)
    except subprocess.TimeoutExpired:
        proc.kill()
        proc.communicate()


if __name__ == "__main__":
    play_with_vlc()

不知道视频长度的一般解决方案?不,没有。如果你不知道视频有多长,那就去看看。这是适用于任何视频播放器的最简单的解决方案。@stybl那么你的意思是不可能知道视频是否停止播放?@Foobard可能是,但只适用于特定的视频播放器。没有这样一个解决方案对任何玩家都有效。@Rawing好吧,它可以作为最后的手段。我知道。