es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ffmpeg.probe no funciona cuando se ejecuta desde Python en Windows 10.

Soy relativamente nuevo en Python, estoy trabajando en la extracción de metadatos de un video y estoy tratando de usar ffmpeg.probe (o ffprobe) porque proporciona todos los datos que necesito.

Después de muchos errores, volví a lo básico e intenté:

import ffmpeg
import json

movie_path = "E:\Archive\Peliculas\Clasicos\Casablanca.avi"
probe = ffmpeg.probe(movie_path)

El error que obtengo es:

Traceback (most recent call last):
  File "C:\Users\xxx\Desktop\test.py", line 5, in <module>
    probe = ffmpeg.probe(movie_path)
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\ffmpeg\_probe.py", line 20, in probe
    p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 966, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 1435, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] El sistema no puede encontrar el archivo especificado

He estado buscando y he intentado instalar y desinstalar ffmpeg, ffmpeg-python, instalándolo directamente en Windows (agregando los archivos a la ruta para poder ejecutarlo en la consola). Luego intenté hacerlo por mi cuenta usando el archivo _probe.py como ejemplo:

p = subprocess.Popen(['ffprobe', '-show_format', '-show_streams', '-of', 'json', 'E:\Archive\Peliculas\Clasicos\Casablanca.avi'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) #shell=True no está presente en _probe.py pero si no se presenta, no se ejecutará de otra manera
out, err = p.communicate()

El error que devuelve es: b'"ffprobe" no se reconoce como un comando interno o externo,\r\n programa o archivo por lotes ejecutable.\r\n' pero se ejecuta, no es el “FileNotFoundError”.

Cuando lo ejecuto en cmd no hay problema, ffprobe -show_format -show_streams -of json E:\Archive\Peliculas\Clasicos\Casablanca.avi proporciona la información (con un par de líneas antes del JSON pero funciona).

No sé si es un problema de Windows (ya he probado tanto \ como \ sin una diferencia aparente) o si estoy haciendo algo mal.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber un problema con la instalación o configuración de ffmpeg. Cuando ejecutas el comando directamente en cmd, funciona correctamente, pero cuando intentas ejecutarlo a través de Python, obtienes un error.

    Una cosa que puedes intentar es agregar la ubicación del archivo ejecutable de ffmpeg a la variable PATH de tu sistema, para que Python pueda encontrarlo cuando intentes ejecutarlo. Otra cosa que puedes hacer es especificar la ruta completa del archivo ejecutable de ffmpeg en tu código de Python, en lugar de solo usar el nombre del comando ‘ffprobe’.

    Además, mencionaste que intentaste instalar tanto ffmpeg como ffmpeg-python, pero no está claro cuál estás usando realmente en tu código. Asegúrate de estar utilizando la biblioteca correcta y de que esté instalada correctamente.

    Finalmente, vale la pena mencionar que el carácter de barra invertida ‘\’ se utiliza como un carácter de escape en las cadenas de Python, por lo que debes escaparlo (usando ‘\’ en su lugar) o usar una cadena en bruto (precediendo la cadena con ‘r’) para evitar problemas con los nombres de ruta. Por ejemplo:

    movie_path = r'E:\Archive\Peliculas\Clasicos\Casablanca.avi'
    

    En general, es difícil determinar exactamente cuál es el problema sin más información o sin poder reproducir el problema. Pero espero que estas sugerencias te ayuden a encontrar una solución.

Comments are closed.