Saltar al contenido

¿Cómo uso ffmpeg con Python pasando objetos de archivo (en lugar de ubicaciones a archivos en el disco)?

Si hallas alguna incompatibilidad en tu código o trabajo, recuerda probar siempre en un entorno de testing antes añadir el código al proyecto final.

Solución:

con ffmpeg puedes usar - como nombre de archivo de entrada/salida para indicar que debe leer los datos de stdin/write to stdout.

Entonces puedes usar el stdin/stdout argumentos de Popen para leer/escribir sus datos.

un ejemplo:

from subprocess import Popen, PIPE

with open("test.avi", "rb") as infile:
    p=Popen(["ffmpeg", "-i", "-", "-f", "matroska", "-vcodec", "mpeg4",
        "-acodec", "aac", "-strict", "experimental", "-"],
           stdin=infile, stdout=PIPE)
    while True:
        data = p.stdout.read(1024)
        if len(data) == 0:
            break
        # do something with data...
        print(data)
    print p.wait() # should have finisted anyway

en su lugar, proporciona un archivo para stdin también podrías usar un PIPE y escribir directamente en el flujo de entrada de procesos (p.stdin). o en su caso simplemente usaría wavfile…

tenga en cuenta que debe especificar el formato de salida y los códecs explícitamente, ya que ffmpeg no puede adivinarlos a partir de la extensión del archivo como suele hacer.
y solo funcionará para muxers que no necesitan flujos de salida buscables, pero flac debería funcionar…

Para cualquiera que todavía lea esto: Esto se puede hacer sin subprocesos utilizando el protocolo de canalización de FFMPEG en su lugar. Si se llama a FFMPEG usando el paquete ffmpeg-pythonlos stdout, stderr La salida del comando FFMPEG se puede alimentar a las variables de Python como se ve aquí:

out, err = inpstream.output('pipe:', ... ).run(capture_stdout=True)

Te mostramos comentarios y puntuaciones

Si entiendes que ha sido provechoso este post, sería de mucha ayuda si lo compartes con más programadores de esta manera nos ayudas a extender nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *