Il existe beaucoup logiciels sous windows pour faire une preview d'une vidéo. Mais sous linux je n'ai rien trouvé d'équivalent. Donc voici l'utilité de ce petit code.
Source / Exemple :
#!/usr/bin/env python
# -*- coding:Utf-8 -*-
import os
import sys
import shutil
import glob
import Image
import ImageDraw
import ImageFont
import re
def snapshot(path, nb_lgn, nb_col):
buff=os.popen('mplayer -identify -frames 0 '+path+' 2>/dev/null| grep ID_') # ouvre un pipe qui va recevoir les informations de mplayer
infos=buff.read()
buff.close()
longueur = int(re.findall('ID_LENGTH=([0-9]*)', infos)[0]) # recherche la longueur de la vidéo
os.mkdir(os.path.expanduser("~")+'/rtemp') # création d'un répertoire temporaire
interval=int(longueur/(int(nb_lgn)*int(nb_col)))
for i in range(3, longueur-interval, interval):
os.system('mplayer -nosound -ss '+str(i)+' -frames 4 -vo jpeg:quality=99 '+path) # fait des captures avec mplayer
try:
shutil.move('00000004.jpg', os.path.expanduser("~")+'/rtemp/'+str(i).zfill(5)+'.jpg') # déplace et renomme la dernière capture dans un répertoire temporaire
except IOError:
print "Capture introuvable !"
for i in range(1, 4):
os.remove('0000000'+str(i)+'.jpg')
return (infos, longueur)
def trait_path(path):
path=path.replace(' ', '\\ ')
path=path.replace('[', '\\[')
path=path.replace(']', '\\]')
path=path.replace('(', '\\(')
path=path.replace(')', '\\)')
return (path)
def index_th(nb_col, nb_lgn):
nb_col, nb_lgn = int(nb_col), int(nb_lgn)
img_idx = Image.new("RGB", (250*nb_col+10, 190*nb_lgn+70), "#00FF00") # création d'une image de fond
x = 0
y = 60
pre = glob.glob(os.path.expanduser("~")+'/rtemp/'+'*.jpg')
pre.sort() # tri des captures
for i in pre: # boucle qui permet de positionner chaque capture sur l'image de fond
im=Image.open(i)
im_t = im.resize((240, 180), Image.ANTIALIAS)
img_idx.paste(im_t, (10+250*x, 10+y))
if (x == nb_col-1):
y+=190
x=0
else:
x+=1
img_idx.save(os.path.expanduser("~")+'/index.jpg' , "JPEG")
def img_infos(infos, duree, path):
# recherche des infos de la vidéo
width = re.findall('ID_VIDEO_WIDTH=([0-9]*)', infos)[0]
height = re.findall('ID_VIDEO_HEIGHT=([0-9]*)', infos)[0]
path = path.replace("\\", "")
taille = os.stat(path)[6]
image = Image.open(os.path.expanduser("~")+'/index.jpg') # ouvre l'image crée
draw = ImageDraw.Draw(image)
font = ImageFont.truetype(os.path.expanduser("~")+'/FreeMono.ttf', 20) # choix de la police et de la taille
nom = path.split("/")
# écriture des infos sur l'image
draw.text((10, 0), "Nom : " + nom[-1], font=font, fill="#0000ff")
draw.text((10, 16), "Taille : " + str(int(float(taille)/1048576)) + " Mo", font=font, fill="#0000ff")
draw.text((10, 32), "Duree : " + str(int(float(duree)/60)) + " min", font=font, fill="#0000ff")
draw.text((10, 48), "Resolution : " + width + "x" + height, font=font, fill="#0000ff")
image.save(os.path.expanduser("~")+'/index.jpg', "JPEG")
shutil.move(os.path.expanduser("~")+'/index.jpg', os.path.expanduser("~")+'/'+nom[-1][0:20]+'.jpg') # renomme l'image de preview
def main(argv):
if os.path.isdir(os.path.expanduser("~")+'/rtemp'):
shutil.rmtree(os.path.expanduser("~")+'/rtemp')
try:
path = trait_path(argv[0])
info, longueur = snapshot(path, argv[1], argv[2])
index_th(argv[2], argv[1])
img_infos(info, longueur, path)
except IndexError:
print "Erreur : Il manque des arguments ou ils sont invalides."
print "Usage : preview_mplayer.py chemin d'accès [nbr lignes] [nbr colonnes]"
sys.exit(2)
if os.path.isdir(os.path.expanduser("~")+'/rtemp'):
shutil.rmtree(os.path.expanduser("~")+'/rtemp')
if __name__ == "__main__":
main(sys.argv[1:])
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.