通过Python获取avconv的视频持续时间

时间:2015-08-30 09:14:22

标签: python django shell video duration

我需要获取Django应用程序的视频持续时间。所以我必须在python中这样做。但我真的是初学者。如果你能提供帮助,那就太好了。

这是我到目前为止所得到的:

import subprocess
task = subprocess.Popen("avconv -i video.mp4 2>&1 | grep Duration | cut -d ' ' -f 4 | sed -r 's/([^\.]*)\..*/\1/'", shell=True, stdout=subprocess.PIPE)
time = task.communicate()[0]
print time

我想用avconv解决它,因为我已经在另一点上使用了它。 shell命令到目前为止运行良好,并给我一个输出,如: HH:MM:SS

但是当我执行python代码时,我只在shell上获得了一个不可解释的符号。

非常感谢你的帮助!

找到解决方案。问题是sed-part:

import os
import subprocess

task = subprocess.Popen("avconv -i video.mp4 2>&1 | grep Duration | cut -d ' ' -f 4 | sed -e 's/.\{4\}$//'", shell=True, stdout=subprocess.PIPE)
time = task.communicate()[0]
print time

因为它总是相同的部分,所以应该只删除最后4个字符。

1 个答案:

答案 0 :(得分:1)

来自python文档:

  

警告

     

使用communicate()而不是.stdin.write.stdout.read.stderr.read来避免由于任何其他操作系统管道缓冲区填满并阻止子进程而导致的死锁。

因此,您应该真正使用communicate

import subprocess
task = subprocess.Popen("avconv -i video.mp4 2>&1 | grep Duration | cut -d ' ' -f 4 | sed -r 's/([^\.]*)\..*/\1/'", shell=True, stdout=subprocess.PIPE)
time = task.communicate()[0]
print time

这样你也可以捕获stderr消息,如果有的话。