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.

No se puede reproducir el archivo de video local en Dash.

Estoy construyendo una aplicación Dash simple, que incluye un componente html.Video(). El problema es que los archivos de video locales no se reproducen (los videos alojados en línea funcionan bien).

import dash
from dash.dependencies import Input, Output
import os

app = dash.Dash(__name__)
app.layout = html.Video(src="/static/test.mp4", controls=True)

@app.server.route('/static/<path:path>')
def serve_static(path):
    root_dir = os.getcwd()
    return flask.send_from_directory(os.path.join(root_dir, 'static'), path)

if __name__ == '__main__':
    app.run_server(debug=True)

Estructura de carpetas:

  • app.py
  • /static
    • test.mp4

Utilizo OpenCV para crear los archivos .mp4:

def crop_video(vid_file, start_frame, end_frame, fps=30.0):

    vid_name = f"/static/test.mp4"

    cap = cv2.VideoCapture(vid_file)
    ret, frame = cap.read()
    h, w, _ = frame.shape

    fourcc = cv2.VideoWriter_fourcc(*"mp4v")
    writer = cv2.VideoWriter(vid_name, fourcc, fps, (w, h))

    f = 0
    while ret:
        f += 1

        if start_frame <= f and f <= end_frame:
            writer.write(frame)

        ret, frame = cap.read()

    writer.release()
    cap.release()

    return vid_name

He probado las soluciones de aquí, aquí, aquí y aquí, sin éxito alguno.

Tags:  

Answer

  1. Avatar for davy.ai

    El problema parece estar relacionado con la forma en que la aplicación está sirviendo los videos locales. El código actual incluye una ruta para servir archivos estáticos desde la carpeta /static, pero el atributo src de html.Video() está establecido en /static/test.mp4 en lugar de /static/test.mp4.

    Una posible solución es reemplazar src=”/static/test.mp4″ por src=”static/test.mp4″ en la definición de app.layout. Esto debería permitir que la aplicación localice correctamente el archivo de video.

    Otra posible solución es definir un parámetro static_url_path al crear el objeto dash.Dash, de la siguiente manera:

    app = dash.Dash(name, static_folder=’static’, static_url_path=’/static’)

    Esto especifica que todos los archivos estáticos se servirán desde el endpoint /static. Luego, en la definición de app.layout, establezca el atributo src en “/static/test.mp4”. Esto también debería permitir reproducir correctamente el video.

    Vale la pena señalar que ciertos formatos de video pueden no ser compatibles con html.Video(), por lo que puede ser útil intentar convertir el video a un formato diferente o utilizar otro componente reproductor de video por completo.

Comments are closed.