Skip to content
Advertisement

Using ffmpeg to obtain video durations in python

I’ve installed ffprobe using the pip ffprobe command on my PC, and installed ffmpeg from here.

However, I’m still having trouble running the code listed here.

I try to use the following code unsuccessfully.

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

Does anyone know what’s wrong? Am I not referencing the directories correctly? Do I need to make sure the .py and video files are in a specific location?

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:UsersPCDesktopVideo.mkv'

getLength(fileToWorkWith)

Apologies if the question is somewhat basic. All I need is to be able to iterate over a group of video files and get their start time and end time.

Thank you!

Advertisement

Answer

There is no need to iterate though the output of FFprobe. There is one simple command which returns only the duration of the input file:

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 <input_video>

You can use the following method instead to get the duration:

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)
Advertisement