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)