Reproducir videos con MPV, mediante Python.

La reproducción de videos es una de las formas favoritas de entretenimiento de la gran mayoría de los seres humanos. Ya sean películas, documentales, video clips, grabaciones privadas o cualquier otro formato existente.

Nos pasamos gran parte de nuestro tiempo libre, o incluso no tan libre, visualizando todo tipo de contenidos audio visuales, especialmente del inmenso océano de material videográfico que es YouTube.

MPV es un reproductor multimedia gratuito, de código abierto y multiplataforma.

En Mac se puede instalar facilmente utilizando brew, con la siguiente instrucción en la terminal.

brew install mpv

MPV es un reproductor que funciona a través de la consola. Si lo que quieres es una interfaz gráfica, puedes utilizar IINA. Esta aplicación utiliza MPV como reproductor, dotándolo de una interfaz gráfica más amigable.

Con Python podemos exprimir las grandes características que nos ofrece MPV, ejecutando scrips que reproduzcan listas de video, todos los videos de una o varias carpetas, reproducir trozos aleatorios de videos, con secuencias que comienzan y acaban de forma aleatoria.

Este es el código para reproducir un archivo de video:

from subprocess import call

def reproduce(archivo, comienzo, resolucion, final):
    try:
        call('mpv "' +  archivo + '" – start=' + comienzo + ' – geometry=' + resolucion + ' – length=' + final, shell = True)
    except:
        print("Error al Reproducir Momento")

archivo = "" # Ruta del archivo
comienzo = "00:00:00"
resolucion = "45%"
final = "2:00:00"

reproduce(archivo, comienzo, resolucion, final)

Los parámetros que necesitamos pasar a la función son:

  • Archivo. La ruta del archivo que vamos a reproducir.
  • Comienzo. Donde empieza a reproducirse el archivo. Si queremos que empiece en el minuto 5, le pasamos 00:05:00
  • Resolución. El tamaño que tendrá la ventana de reproducción.
  • Final. El punto en el que se detendrá la reproducción, contando desde el momento que comienza la reproducción. En otras palabras, si la reproducción comienza en el minuto 5 (00:05:00), y queremos reproducir 15 segundos (00:00:15), la reproducción se detendrá en el minuto 5:15

Para listar todos los subdirectorios de una carpeta, devuelve los archivos contenidos en todas las subcarpetas encontradas.

from os.path import isfile, isdir, join

def listdir_recurd(files_list, root, folder, checked_folders):

    if (folder != root):
        checked_folders.append(folder)
        
    for f in listdir(folder):
        d = join(folder, f)       

        if isdir(d) and d not in checked_folders:
            listdir_recurd(files_list, root, d, checked_folders)
        else:
            if isfile(d):  # si no hago esto, inserta en la lista el nombre de las carpetas ignoradas
                files_list.append(join(folder, f))

    return files_list

Para obtener un tiempo aleatorio.

import random

def tiempo_aleatorio(tMin, tSeg):
    minutos = random.randint(0, tMin)
    segundos = random.randint(0, tSeg)

    tiempo = "00:%s:%s" %(minutos, segundos)
    return tiempo

Obtener la duración de un video, para ello debemos tener instalada la aplicación exiftool. Sabiendo la duración del video, calculamos un punto de inicio y fin aleatorio, sin exceder la duración real del video.

import subprocess

def duracion_escena(escena):
    datos = subprocess.check_output(['exiftool', escena]).decode('utf-8')

    dic = {}
    for line in datos.splitlines():
        valores = line.split(" : ",1)
        dic[valores[0].strip()] = valores[1].strip()

    duracion = dic['Track Duration']

    dura = duracion.split(":")
    minutos = int(dura[0]) + int(dura[1])

    resultado = tiempo_aleatorio(minutos, 59)

    return resultado

Desordenar una lista obtenida con la función anterior listdir_recurd.

import random

def random_sin_repetir(lista):
    for _ in range(0,len(lista)):
        result = random.choice(lista)
        yield result
        lista.remove(result)

El reproductor MPV dispone de infinidad de parametros para controlar la reproducción de videos, puedes ver más información aqui.

Share

Generar una lista de reproducción M3U aleatoria de Video o Audio

Si dispones de una gran colección de películas, puede ser util para tus fiestas o reuniones ir mostrando diferentes secuencias aleatorias de dichas películas.

Este script en Python permite seleccionar una carpeta y crear con todos sus archivos un fichero m3u.

from os import scandir, system
from datetime import datetime, date, time, timedelta
import subprocess
import random
import math
import sys


segundos = 30
ahora = datetime.now()
hora_actual = time(ahora.hour, ahora.minute, ahora.second)
hora = "%H-%M-%S"

path = '/Volumes/Mac HD/Series/Forever/Vistos/'
ruta_b = path.replace(' ', '\ ')

f = open('Lista_' + ahora.strftime(hora) + '_.m3u', 'wt')
f.write("#EXTM3U" + '\n')

def ls2(path): 
    return [obj.name for obj in scandir(path) if obj.is_file()]

archivos = ls2(path)

for archivo in archivos:
    print(archivo)
    if archivo != ".DS_Store":
        
        archivo_b = archivo.replace(' ', '\ ')

        if not archivo_b.find("(") > 0:
            duracion = subprocess.getoutput("exiftool -q -p '$Duration#' " + ruta_b + archivo_b)
            print(duracion)


            dur0 = duracion.replace('\n', '').replace('\r', '')

            dur_ini = random.randint(0, int(float(dur0)-segundos))
            dur_stop = dur_ini + segundos
            
            f.write("#EXTVLCOPT:start-time=" + str(dur_ini) + '\n')
            f.write("#EXTVLCOPT:stop-time=" + str(dur_stop) + '\n')
            f.write(path + archivo + '\n')
        

f.close()

Para que el script funcione, debemos tener instalada en nuestro sistema la utilidad exiftool. Con esta herramienta consegimos la duración del video, “exiftool -q -p ‘$Duration#’ ” + ruta_b + archivo_b“, y obtenemos el momento aleatorio del comienzo del video.

La ruta a la carpeta con los archivos de video se configura en “path = ‘/Volumes/Mac HD/Series/Forever/Vistos/’

Por defecto la duración del video será de 30 segundos, “segundos = 30

Al ejecutar el script se crea un archivo con la hora actual, similar a “Lista_18-47-24_.m3u“. Tan solo debemos abrir dicho archivo con la aplicación “VLC“, para que los fragmentos aleatorios se vayan repriduciendo.

Este script a sido creado para su utilización en Mac OS X, para utilizarlo en Windows, serán necesarios unos pequeños retoques.

Share

Como extraer información de archivos de audio, video o imágenes

Exiftool es una aplicación de linea de comando, ejecutada desde la terminal del sistema. Esta disponible para Windows, Mac y Linux. Y es totalmente gratuita.

Esta herramienta nos permite realizar diversas tareas con los archivos de audio, video y fotografía. Una muy interesante, es la de poder conocer todos los datos de los archivos multimedia; audio, video e imágenes.

Exiftool nos permite conocer con todo lujo de detalles todos los datos presentes en los archivos multimedia.

En un archivo de audio, podemos obtener:

  • El codec utilizado.
  • El bitrate.
  • Si la grabación es stereo.
  • Los datos ID3.
  • La duración.
  • Y otros muchos parametros.

Captura de un archivo de audio:

Captura de un archivo de video:

Captura de una fotografía:

Como podemos ver, los datos obtenidos de una fotografía son abrumadores. Tenemos todos los detalles con los que fue capturada la imagen así como las coordenadas donde fue realizada, y la altitud, GPS Altitude: 1367 m Above Sea Level.

Exiftool, no solo nos permite visualizar los datos de los archivos multimedia, sino también, modificar dichos datos. Con el siguiente comando podemos modificar los datos GPS.

exiftool -exif:gpslatitude="40 15" -exif:gpslatituderef=S -exif:gpslongitude="172 129" -exif:gpslongituderef=E ruta_nombre_imagen.jpg

La salida de los datos se puede realizar en multiples formatos; txt, json, html, a una base de datos, una tabla, etc.

Ejemplo para exportar datos a un archivo txt:

exiftool /Volumes/Mac\ HD/imagenes/IMG_1726.JPG -w /Users/darco/Downloads/a%c.txt

Puedes encontrar más información de esta estupenda aplicación en este enlace.

Share