videocapture - show video opencv python
Abra el terminal cmd e instale el paquete python: mutagen
usando este comando
python -m pip install mutagen
luego usa este código para obtener la duración del video y su tamaño:
import os
from mutagen.mp4 import MP4
audio = MP4("filePath")
print(audio.info.length)
print(os.path.getsize("filePath"))
Como se informa aquí https://www.reddit.com/r/moviepy/comments/2bsnrq/is_it_possible_to_get_the_length_of_a_video/
podrías usar el módulo moviepy
from moviepy.editor import VideoFileClip
clip = VideoFileClip("my_video.mp4")
print( clip.duration )
Encuentre esta nueva biblioteca de Python: https://github.com/sbraz/pymediainfo
Para obtener la duración:
from pymediainfo import MediaInfo
media_info = MediaInfo.parse(''my_video_file.mov'')
#duration in milliseconds
duration_in_ms = media_info.tracks[0].duration
El código anterior se prueba con un archivo mp4 válido y funciona, pero debe hacer más comprobaciones, ya que depende en gran medida de la salida de MediaInfo.
Para hacer las cosas un poco más fáciles, los siguientes códigos ponen el resultado en JSON .
Puede usarlo usando probe(filename)
u obtener duración usando duration(filename)
:
json_info = probe(filename)
secondes_dot_ = duration(filename) # float number of seconds
Funciona en Ubuntu 14.04
donde, por supuesto, ffprobe
instalado. El código no está optimizado para la velocidad o propósitos hermosos, pero funciona en mi máquina espero que ayude.
#
# Command line use of ''ffprobe'':
#
# ffprobe -loglevel quiet -print_format json /
# -show_format -show_streams /
# video-file-name.mp4
#
# man ffprobe # for more information about ffprobe
#
import subprocess32 as sp
import json
def probe(vid_file_path):
'''''' Give a json from ffprobe command line
@vid_file_path : The absolute (full) path of the video file, string.
''''''
if type(vid_file_path) != str:
raise Exception(''Gvie ffprobe a full file path of the video'')
return
command = ["ffprobe",
"-loglevel", "quiet",
"-print_format", "json",
"-show_format",
"-show_streams",
vid_file_path
]
pipe = sp.Popen(command, stdout=sp.PIPE, stderr=sp.STDOUT)
out, err = pipe.communicate()
return json.loads(out)
def duration(vid_file_path):
'''''' Video''s duration in seconds, return a float number
''''''
_json = probe(vid_file_path)
if ''format'' in _json:
if ''duration'' in _json[''format'']:
return float(_json[''format''][''duration''])
if ''streams'' in _json:
# commonly stream 0 is the video
for s in _json[''streams'']:
if ''duration'' in s:
return float(s[''duration''])
# if everything didn''t happen,
# we got here because no single ''return'' in the above happen.
raise Exception(''I found no duration'')
#return None
if __name__ == "__main__":
video_file_path = "/tmp/tt1.mp4"
duration(video_file_path) # 10.008
para cualquiera que le guste usar el programa mediainfo :
import json
import subprocess
#===============================
def getMediaInfo(mediafile):
cmd = "mediainfo --Output=JSON %s"%(mediafile)
proc = subprocess.Popen(cmd, shell=True,
stderr=subprocess.PIPE, stdout=subprocess.PIPE)
stdout, stderr = proc.communicate()
data = json.loads(stdout)
return data
#===============================
def getDuration(mediafile):
data = getMediaInfo(mediafile)
duration = float(data[''media''][''track''][0][''Duration''])
return duration
Probablemente necesites invocar un programa externo. ffprobe
puede proporcionarle esa información:
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]
from subprocess import check_output
file_name = "movie.mp4"
#For Windows
a = str(check_output(''ffprobe -i "''+file_name+''" 2>&1 |findstr "Duration"'',shell=True))
#For Linux
#a = str(check_output(''ffprobe -i "''+file_name+''" 2>&1 |grep "Duration"'',shell=True))
a = a.split(",")[0].split("Duration:")[1].strip()
h, m, s = a.split('':'')
duration = int(h) * 3600 + int(m) * 60 + float(s)
print(duration)