通过 Python 使用 avconv 获取视频时长

Get Video-Duration with avconv via Python

我需要获取 Django 应用程序的视频持续时间。所以我必须在 python 中执行此操作。但我真的是这方面的初学者。如果你能帮上忙,那就太好了。

这是我目前得到的:

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

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

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

非常感谢您的帮助!

找到解决办法。问题是 sed 部分:

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个字符就够了。

来自 python 文档:

Warning

Use communicate() rather than .stdin.write, .stdout.read or .stderr.read to avoid deadlocks due to any of the other OS pipe buffers filling up and blocking the child process.

所以你真的应该为此用户 communicate:

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

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