2010-03-13 20 views

Respuesta

17

Aquí hay una secuencia de comandos de Python simple para obtener la duración de cualquier cosa que pueda decodificar gstreamer. Tenga en cuenta que todos los tiempos en gstreamer están en nanosegundos.

duration.py:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
from __future__ import division 

import sys 
import gobject 
gobject.threads_init() 
import pygst 
pygst.require("0.10") 
import gst 
d = gst.parse_launch("filesrc name=source ! decodebin2 ! fakesink") 
source = d.get_by_name("source") 
source.set_property("location", sys.argv[1]) 
d.set_state(gst.STATE_PLAYING) 
d.get_state() 
format = gst.Format(gst.FORMAT_TIME) 
duration = d.query_duration(format)[0] 
d.set_state(gst.STATE_NULL) 

import datetime 
delta = datetime.timedelta(seconds=(duration/gst.SECOND)) 
print delta 

Ejemplos:

$ python duration.py VIDEO_TS/VTS_03_1.VOB 
0:20:10.528000 
$ python duration.py ~/Movies/BigBuckBunny_640x360.m4v 
0:09:56.461667 
+0

Da menos de la duración total de la transmisión para mí. Devuelve 880ms para un video MKV de 83 segundos, por ejemplo. Tal vez un problema con los metadatos? Otros jugadores juegan el archivo correctamente y el MKV en sí mismo es producido por la misma versión de gstreamer. – fviktor

0

¿Por qué reinventar la rueda?
Uso:
GST-descubridor-1.0 nombre del archivo
o
GST-descubridor-0,10 nombre

Dependiendo del tipo de archivo que desea, puede añadir "| grep Duración" para evitar las etiquetas que pueden ser muy largo .
Para deshacerse de etiquetas superfluas para archivos de video, flac y mp3, esto debería funcionar usando grep para excluirlas.
gst-discoverer-1.0 filename | grep -v Tags | grep -v ID3v2 | grep -v image | grep -v attachment

Cuestiones relacionadas