begin process at 2010 09 04 09:32:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > PREVIEW AVEC MPLAYER

PREVIEW AVEC MPLAYER


 Description

Cliquez pour voir la capture en taille normale
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

  • #!/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:])
#!/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:])



 Sources de la même categorie

Source avec Zip Source avec une capture PYGTK : CODES ET EXPLICATIONS POUR DÉBUTER par loloof64
TK_WATCH :HORLOGE GRAPHIQUE par afranck64
Source avec une capture DESSIN DE DÉS À ÉCHELLE VARIABLE SUR CANVAS par calogerogigante
BOITE DE CONNEXION USER/PASSWORD POUR PYTHON:TK_LOGIN par afranck64
Source avec Zip Source avec une capture CALCUL DE RÉSISTANCES par amaury74

 Sources en rapport avec celle ci

Source avec une capture [PYGTK] LECTEUR MULTI-VIDÉO EMBARQUANT MPLAYER GRÂCE À L'ID ... par loupmagic
Source avec Zip Source avec une capture COMPACTEUR D'IMAGES JPEG PAR LOT par yveslc

Commentaires et avis

Commentaire de azalsup le 02/01/2008 15:49:14

Effectivement c'est une tres bonne idee de realiser cette petite application.
De plus ca l'aire d'etre code proprement tout ca.
Bravo, je vais le tester et le garder des que je rentre

Commentaire de azalsup le 06/01/2008 20:29:54

heuuu,
j'ai un peu de mal a le faire fonctionner.

tu peu ajouter un petit mode d'emploie, je n'arrive pas a le faire tourner



def usage(): #fonction affichant l'aide
     print "usage :" # a realiser

if __name__ == "__main__":
    if ( "-h" in sys.argv[1:] ) or ( "--help" in sys.argv[1:] ) :
           usage()
    else :
          main(sys.argv[1:])

Commentaire de mumupy le 07/01/2008 00:08:47

Quel est exactement ton problème ?

Pour le faire fonctionner, il suffit de taper dans une console ./preview_mplayer.py (pense au chmod) puis le chemin d'accès puis le nombre de lignes et enfin le nombre colonnes.

Tu peux aussi placer un lien symbolique dans /usr/local/bin qui pointe sur le fichier. Comme ça tu peux le lancer de n'importe où avec la commande preview (si ton lien s'appelle preview) puis le chemin d'accès puis le nombre de lignes et enfin le nombre colonnes.

PS : il faut aussi avoir le fichier de la police FreeMono.ttf dans ~ (au début je voulais directement pointer sur /usr/share/fonts/truetype/freefont/FreeMono.ttf mais j'avais des problèmes de permissions).

PS 2 :merci pour ton idée de mode d'emploi. Je le coderai dès que j'aurai un peu de temps.

Commentaire de PaTaTe le 11/08/2010 22:37:11

J'ai testé ce script et il ne fonctionne pas. Je tape pourtant la commande adéquat mais je retombe toujours sur l'usage ...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

wxpython : afficher et effacer des images [ par steede ] Bonjour,J'ai besoin dans mon application d'affiicher des images et de les remplacer par d'autres en fonction des clics de la souris.Je sais les affich erreurs video [ par ktamine ] bonjour étudiante en arts plastiques, je travaille autour de l’esthétique de l’erreur et des données corrompues (d’image affichage des images sur python [ par amina22 ] salut,je sais qu'on peut afficher les images .gif avec python mais je veux savoir si on peut afficher les images(jpeg,jpg,..)  et les vidéos si oui et Cacher une image [ par akkuciha ] Bonjour à tous, Le but de mon application est de trouver l'image "Question" parmis les images "réponses" possibles.J'ai une zone d'image faite avec gl Canvas, scrollbar et images [ par linkid ] Bonjour,Je suis en train de faire une petite application en python et j'ai un petit problème avec les Canvas... (j'utilise Tkinter pour l'interface)(1 Editeur image [ par fl0o0w ] Bonjour, j'ai trouvé un programme sur ce site permettant de convertir toutes les images d'un dossier (http://www.pythonfrance.com/codes/COMPACTEUR-IMA Compression d'images en lignes de commande - Python [ par Elninor ] Bonsoir, j'ai cherché sur tous les sites possibles (francophone et anglophone) mais je n'ai rien trouvé. Je recherche quelques lignes de commande perm


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales