2010-07-31 9 views
5

Tengo un par de archivos de contenedor de video que contienen audio y video en varios códecs. Ahora me gustaría inspeccionar el contenedor desde una secuencia de comandos de Python para saber qué códec se utiliza para audio + video. Esto está en un cuadro de Linux, así que tengo todas las herramientas disponibles si es necesario.Python: detectar códecs usados ​​en un contenedor de video

Pensé que tal vez gstreamer podría ayudarme aquí, pero no pude encontrar una API que pudiera ayudarme aquí.

¿Alguna idea? También estoy abierto a cualquier sugerencia, no necesita ser gstreamer siempre y cuando sea software libre :-) fs

Respuesta

3

Intente descargar la fuente ffmpeg y mire la fuente de sus programas de línea de comando. He pirateado utilidades similares en el pasado. No estoy publicando mi solución porque a ffmpeg le gusta cambiar su API, por lo que es poco probable que mi código anterior compile con la versión actual. Querrá hacer suficiente trabajo para crear el contexto del códec, que puede inspeccionar para obtener lo que necesita.

Algunas otras alternativas:


EDIT:

http://code.google.com/p/pyffmpeg/ puede tener lo que desea (no lo he usado).

+0

por lo que esto significa que no hay una biblioteca que pueda devolver esa información? –

+0

Miré a pyffmpeg pero no pude encontrar la manera de obtener la información que quería. Además, no se compilará en mi mac sin parches extensos de las listas de correo, e incluso entonces solo me da un error de bus 10 cuando intento abrir un archivo con él. –

1

Puede usar decodebin2 en Gstreamer. Eche un vistazo a TAE para ejemplos de código.

+0

gracias por el puntero, parece que esto hace más o menos lo que necesito ... –

6
ffprobe -show_format -show_streams -loglevel quiet -print_format json YOUR_FILE 

Simplemente invoque esto con subprocess.check_output y obtendrá una hermosa descripción JSON de su archivo multimedia. Si lo necesita para tomar los datos de stdin, reemplace YOUR_FILE con pipe: 0.

ffprobe viene con ffmpeg.

Cuestiones relacionadas