通过 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 消息,如果有的话。
我需要获取 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 消息,如果有的话。