首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用ffmpeg获取python中的视频时长

使用ffmpeg获取python中的视频时长
EN

Stack Overflow用户
提问于 2015-06-24 19:09:59
回答 6查看 16.1K关注 0票数 10

我已经在我的PC上使用pip ffprobe命令安装了ffprobe,并从here安装了ffmpeg。

但是,我仍然在运行列出的代码here时遇到问题。

我尝试使用下面的代码,但没有成功。

代码语言:javascript
复制
SyntaxError: Non-ASCII character '\xe2' in file GetVideoDurations.py
on line 12, but no encoding declared; see
http://python.org/dev/peps/pep-0263/ for details

有人知道哪里出问题了吗?我没有正确引用目录吗?是否需要确保.py和视频文件位于特定位置?

代码语言:javascript
复制
import subprocess

def getLength(filename):
    result = subprocess.Popen(["ffprobe", "filename"],
    stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
    return [x for x in result.stdout.readlines() if "Duration" in x]

fileToWorkWith = ‪'C:\Users\PC\Desktop\Video.mkv'

getLength(fileToWorkWith)

如果这个问题有点基础的话,很抱歉。我所需要的就是能够迭代一组视频文件,并获得它们的开始时间和结束时间。

谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-06-24 19:35:39

不需要遍历FFprobe的输出。有一个one simple command,它只返回输入文件的持续时间:

代码语言:javascript
复制
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 <input_video>

您可以使用以下方法来获取时长:

代码语言:javascript
复制
def get_length(input_video):
    result = subprocess.run(['ffprobe', '-v', 'error', '-show_entries', 'format=duration', '-of', 'default=noprint_wrappers=1:nokey=1', input_video], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    return float(result.stdout)
票数 15
EN

Stack Overflow用户

发布于 2015-06-25 14:30:35

我认为Chamath的第二个评论回答了这个问题:你的脚本中有一个奇怪的字符,要么是因为你使用的是`而不是a‘,要么是因为你有一个带有非英语口音的单词,就像这样。

值得一提的是,对于您正在做的事情,您也可以尝试使用MoviePy,它可以像您一样解析ffmpeg输出(但也许将来我会使用Chamath的ffprobe方法,它看起来更干净):

代码语言:javascript
复制
import moviepy.editor as mp
duration =  mp.VideoFileClip("my_video.mp4").duration
票数 2
EN

Stack Overflow用户

发布于 2018-06-30 08:19:54

你有没有试过添加编码?正如Chamath所说,这个错误是典型的。将utf-8编码添加到您的脚本头:

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*- 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31024968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档