import json
import subprocess
import time
import cv2
import ffmpy3
from moviepy.editor import VideoFileClip
ls = [
"https://test/1.mp4",
"http://test/2.mp4",
"https://test/3.mp4"
]
def get_duration_from_cv2(filename):
cap = cv2.VideoCapture(filename)
if cap.isOpened():
rate = cap.get(5)
frame_num =cap.get(7)
duration = frame_num/rate
return duration
return -1
def get_duration_from_moviepy(url):
clip = VideoFileClip(url)
return clip.duration
def get_duration_from_ffmpeg(url):
tup_resp = ffmpy3.FFprobe(
inputs={url: None},
global_options=[
'-v', 'quiet',
'-print_format', 'json',
'-show_format', '-show_streams'
]
).run(stdout=subprocess.PIPE)
meta = json.loads(tup_resp[0].decode('utf-8'))
return meta['format']['duration']
for u in ls:
t1 = time.time()
p = get_duration_from_cv2(u)
t2 = time.time()
print('CV2 Duration: ', p, ' Time: ', t2 - t1)
t1 = time.time()
p = get_duration_from_moviepy(u)
t2 = time.time()
print('Moviepy Duration: ', p, ' Time: ', t2 - t1)
t1 = time.time()
p = get_duration_from_ffmpeg(u)
t2 = time.time()
print('FFMPEG Duration: ', p, ' Time: ', t2 - t1)
print()
|