Accueil > > > PREVIEW AVEC MPLAYER
PREVIEW AVEC MPLAYER
Information sur la source
Description
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
Commentaires et avis
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
|
Derniers Blogs
ENUMERABLECOLLECTIONENUMERABLECOLLECTION par Matthieu MEZIL
Prenons le scénario suivant. On utilise MVVM. On a les deux classes suivantes dans le model : public class Child { } public class Parent { private ObservableCollection < Child > _children; public ObservableCollection < Child > Children { get {...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [HS] CHROME 6 + MOI = COUP DE GUEULE ![HS] CHROME 6 + MOI = COUP DE GUEULE ! par JeremyJeanson
Attention, le poste qui suit n'est pas la complainte d'une personne : Qui n'aime pas Chrome. D'un anti Google. D'un développeur qui a un poil énorme dans la main. Ceux qui me fréquentent savent que je change de navigateur favori tous les 2 ou 3 mois afin ...
Cliquez pour lire la suite de l'article par JeremyJeanson [WP7] UTILISER UN WRAPPANEL DANS UNE APPLICATION WINDOWS PHONE 7[WP7] UTILISER UN WRAPPANEL DANS UNE APPLICATION WINDOWS PHONE 7 par Audrey
Lors de la réalisation de ma 2ème application Windows Phone 7, j'ai souhaité utiliser un WrapPanel pour afficher plusieurs photos. Mais le contrôle WrapPanel ne fait pas parti de la liste des contrôles inclus dans le SDK de la version Beta des outils pour...
Cliquez pour lire la suite de l'article par Audrey [WP7] BESOIN D'AVOIR DES DONNéES EN CACHE[WP7] BESOIN D'AVOIR DES DONNéES EN CACHE par Nicolas
Les développeurs ASP.NET ont l'habitude de mettre des données en cache pour éviter de requêter a chaque fois la base de données. Et il est toujours utilie de penser que vos utilisateurs mobiles n'ont pas troujours une super connexion 3G/WIFI et un for...
Cliquez pour lire la suite de l'article par Nicolas [TFS] COMMENT FORCER LA SAISIE D'UN AREA OU ITERATION[TFS] COMMENT FORCER LA SAISIE D'UN AREA OU ITERATION par cyril
Lorsque l'on créé un Work Item dans TFS, il est possible de le classer dans un "area" et dans une "iteration". Dans la plupart des types de projet, un "area" correspond à une catégorie, une "iteration" à un numéro de version. Il est possible de cré...
Cliquez pour lire la suite de l'article par cyril
Forum
RE : PYTHON 3.0RE : PYTHON 3.0 par aera group
Cliquez pour lire la suite par aera group RE : PYTHON 3.0RE : PYTHON 3.0 par xeolin
Cliquez pour lire la suite par xeolin RE : PYTHON 3.0RE : PYTHON 3.0 par aera group
Cliquez pour lire la suite par aera group
Logiciels
Bureau de Gestion - ERP Devis Facturation (2.02)BUREAU DE GESTION - ERP DEVIS FACTURATION (2.02)
- Version gratuite du 10/06/2010
Le Bureau de Gestion est un logiciel dédié à la gestion de l'en...
Cliquez pour télécharger Bureau de Gestion - ERP Devis Facturation sDEVIS-FACTURES vlPRO (3.8.0)SDEVIS-FACTURES VLPRO (3.8.0)sDEVIS-FACTURES vlPRO a été mis au point pour permettre besoins des particuliers, créateurs, entr... Cliquez pour télécharger sDEVIS-FACTURES vlPRO LettresFaciles (5.6.0)LETTRESFACILES (5.6.0)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles MyPlanning 2010 (5.6.0)MYPLANNING 2010 (5.6.0)MyPlanning 2010 permet de créer des plannings sous la représentation de diagrammes. Plannings pré... Cliquez pour télécharger MyPlanning 2010 Emicsoft Mac DVD en iPad Convertisseur (3.1.16)EMICSOFT MAC DVD EN IPAD CONVERTISSEUR (3.1.16)Emicsoft Mac DVD en iPad Convertisseur, logiciel professionnel de convertir les fichiers DVD en i... Cliquez pour télécharger Emicsoft Mac DVD en iPad Convertisseur
|