我正在编写一个播放不同播放器的视频和音频文件的脚本。在这方面,vlc不是唯一的,我想避免使用任何特定的选项,如“--play-and-exit”。 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()