python3獲取視頻文件播放時(shí)長的三種方法
方法一:VideoFileClip
from moviepy.editor import VideoFileClip
def get_duration_from_moviepy(url):
clip = VideoFileClip(url)
return clip.duration
方法二:CV2
最快。
下載安裝:https://github.com/opencv/opencv/releases
pip install opencv-python
import cv2
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
方法三:FFmpeg
pip install ffmpy3
import ffmpy3
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']
速度比較
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()
參考
https://ffmpy3.readthedocs.io/en/latest/
到此這篇關(guān)于python3獲取視頻文件播放時(shí)長的三種方法的文章就介紹到這了,更多相關(guān)python3獲取視頻播放時(shí)長內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python簡單實(shí)現(xiàn)計(jì)算過期時(shí)間的方法
這篇文章主要介紹了python簡單實(shí)現(xiàn)計(jì)算過期時(shí)間的方法,涉及Python時(shí)間操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06
python 實(shí)用工具狀態(tài)機(jī)transitions
這篇文章主要介紹了python 實(shí)用工具狀態(tài)機(jī)transitions的使用,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-11-11
通過Python的filestools庫給圖片添加全圖水印的示例詳解
這篇文章主要介紹了通過Python的filestools庫給圖片添加全圖水印,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
Python實(shí)現(xiàn)自動(dòng)玩連連看的腳本分享
最近女朋友在玩連連看,玩了一個(gè)星期了還沒通關(guān),真的是菜。實(shí)在是看不過去了,直接用python寫了個(gè)腳本代碼可以自動(dòng)玩連連看,感興趣的可以了解一下2022-04-04
Django發(fā)送郵件和itsdangerous模塊的配合使用解析
這篇文章主要介紹了Django發(fā)送郵件和itsdangerous模塊的配合使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08

