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

Conocer las tarifas de luz cada hora, script en python

Las tarifas de luz son cada día más caras, por lo que tenemos que mirar muy bien cuándo realizamos nuestros consumos. Es cierto que muchos electrodomésticos no se pueden desconectar, como es la nevera, pero por ejemplo la lavadora, secadora o secador de pelo, podemos y debemos utilizarlos entre los rangos de horas que la electricidad es más barata.

Para las tarifas (PVPC) Precios Voluntarios para el Pequeño Consumidor.

Según la tarifa de luz eléctrica que tengamos contratada, el precio de la luz en cada zona horario es diferente.

Con la tarifa 2.0.A, el precio de la luz por horas es bastante uniforme, variando entre la hora más barata a la más cara un 14%, el precio de la hora más barata se sitúa en torno a los 0,095 € y la más cara a 0,110 €.

La tarifa 2.0.DHA, con dos discriminaciones horarias, divide el día en dos franjas, de 10 de la noche a las 12 del medio día del día siguiente, esta es la tarifa con las horas más baratas, en torno a los 0,05 €, recuerda que cada hora varia el precio. Y la franja de 12 del mediodía a 10 de la noche el precio por hora oscila entre los 0,12 €. La diferencia entre las horas baratas y las horas caras es de un 175%. Si tu consumo se realiza principalmente entre la franja con las horas más baratas, es muy recomendable utilizar esta tarifa.

La tarifa 2.0.DHS es muy similar a la tarifa 2.0.DHA, esta indicada para la carga de vehículos eléctricos. Las horas nocturnas son un poco más baratas que en la tarifa anterior.

Los valores indicados son los precios oficiales, y están referidos al Término de Facturación de Energía Activa del PVPC, de la Tarifa general (2.0.A), Tarifa discriminación horaria también llamada tarifa nocturna (2.0.DHA), y Vehículo eléctrico (2.0.DHS). 

Para obtener el precio real de la electricidad en cada franja horaria disponemos de la API de esios.

Los códigos de la api para cada una de las tarifas son:

  • 2.0.A – 10229
  • 2.0.DHA – 10230
  • 2.0.DHS – 10231

Para poder utilizar la API de esios, debemos utilizar un TOKEN. Este TOKEN debemos solicitarlo en la siguiente dirección de correo, consultasios@ree.es.

El código Python:

import requests
import json

TOKEN = "poner aqui el token"


url = 'https://api.esios.ree.es/indicators/10230'
headers = {'Accept':'application/json; application/vnd.esios-api-v2+json','Content-Type':'application/json','Host':'api.esios.ree.es','Authorization':'Token token=' + TOKEN}

response = requests.get(url, headers=headers)

if response.status_code == 200:
    json_data = json.loads(response.text)

    valores = json_data['indicator']['values']

    precios = [x['value'] for x in valores]
    
    hora = 0
    for precio in precios:
        print("%s horas - %s €" %(str(hora).zfill(2), str(round(precio/1000, 4))))
        hora += 1

    
    valor_min = min(precios)
    valor_max = max(precios)
    valor_med = round(statistics.mean(precios),2)
    
    print("Precio mínimo: %s" % str(valor_min/1000))
    print("Precio máximo: %s" % str(valor_max/1000))
    print("Precio medio: %s" % str(valor_med/1000))

El código anterior descarga la tarifa 2.0.DHA (10230). Cambiando el parametro de la url, despues de indicators, el código corresponde a la tarifa que queremos consultar.

Se obtiene el precio de cada fracción de hora, la hora y el precio mínimo, máximo, y el valor medio.

Resultado:

00 horas - 0.0547 €
01 horas - 0.0435 €
02 horas - 0.0471 €
03 horas - 0.0459 €
04 horas - 0.044 €
05 horas - 0.0434 €
06 horas - 0.0465 €
07 horas - 0.0615 €
08 horas - 0.0588 €
09 horas - 0.0545 €
10 horas - 0.0524 €
11 horas - 0.0571 €
12 horas - 0.0574 €
13 horas - 0.1209 €
14 horas - 0.1207 €
15 horas - 0.1213 €
16 horas - 0.1205 €
17 horas - 0.1227 €
18 horas - 0.1274 €
19 horas - 0.1253 €
20 horas - 0.1237 €
21 horas - 0.1238 €
22 horas - 0.1202 €
23 horas - 0.0519 €
Precio mínimo: 0.04344
Precio máximo: 0.12742
Precio medio: 0.08105

Share