我正在遍历目录,并对每个文件运行ffprobe
以获取持续时间。但是,我得到的唯一输出是
b''
b''
下面是我正在使用的代码的一部分,
for y in filename:
p1 = subprocess.Popen (['ffprobe', '-i', y, '-show_entries', 'format=duration', '-sexagesimal', '-v', 'quiet', '-of', 'csv=%s' % ("p=0")], stdout=subprocess.PIPE).communicate()[0]
print (p1)
当前,我要遍历的目录中有两个文件。
请问如何获得实际打印时间?
谢谢。
答案 0 :(得分:1)
import subprocess
import glob
for y in glob.glob("*.mkv"):
p1 = subprocess.check_output(
[
"ffprobe",
"-i",
y,
"-show_entries",
"format=duration",
"-sexagesimal",
"-v",
"quiet",
"-of",
"csv=%s" % ("p=0"),
],
encoding="utf-8",
).strip()
print(y, p1)
对我来说很好。 (也就是说,使用check_output()
并添加encoding
参数。)
结果是
2018-02-19T00:01.mkv 0:17:47.120000
符合预期。
我的Ffmpeg版本值得,
ffmpeg version 4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
built with Apple clang version 11.0.0 (clang-1100.0.33.8)
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
答案 1 :(得分:0)
如果内部命令正确,则获取子流程输出的方式如下:
p1 = subprocess.run(['ffprobe', '-i', y, '-show_entries', 'format=duration', '-sexagesimal', '-v', 'quiet', '-of', 'csv=%s' % ("p=0")], shell=True, capture_output=True).stdout