ffprobe 按时长过滤视频,命令打印但不返回时长

问题描述

我正在尝试使用 ffprobe 按时长过滤视频。我正在使用:

vid_length = subprocess.call(f"ffprobe -i {local_vids_2[count]} -show_entries format=duration -v quiet -of csv='p=0'",shell = True)
print("VIDEO LENGTH IS:",vid_length,"FOR: ",count)

虽然我确实通过 shell 命令将持续时间打印到我的命令提示符中,但我注意到我没有像我需要的那样将它作为变量返回。相反,它返回 0,所以我得到类似:VIDEO URL IS: 100_scaled.mp4 FOR: 0 11.883000 VIDEO LENGTH IS: 0 FOR: 0 VIDEO URL IS: 101_scaled.mp4 FOR: 1 56.171000 VIDEO LENGTH IS: 0 FOR: 1

我也根据我在 this post 中读到的内容尝试了 vid_length = subprocess.call(f"ffprobe -i {local_vids_2[count]} -show_entries format=duration -v quiet -of csv=%s % ('p=0')",shell = True),但也没有奏效。

有没有办法让这个命令返回任何东西?或者我是否需要其他东西来返回视频长度以进行编码?谢谢。

解决方法

Subprocess 允许捕获标准输出(打印)。如果您执行以下操作,则可以以字节形式使用它:

completedProcess = subprocess.run(myCommandHere,capture_output=True)
print(completedProcess.stdout)
data_as_str = completedProcess.stdout.decode()

然后你可以解析数据的标准输出