tabla - tipos de ductos electricos
utilizando tuberÃas para canalizar archivos de E/S a otro proceso (2)
ffmpeg puede persuadirse para que salga a una tubería:
ffmpeg -i whatever.avi -f mp4 -
El "-" le dice que envíe a stdout en lugar de a un archivo, y la "-f" le dice a qué salida debe llegar el archivo de salida.
Podrías redirigir eso a una tubería con nombre, por supuesto, pero llamarlo con popen
para obtener la salida como un descriptor de archivo directamente parece ser el camino a seguir.
Acabo de empezar a aprender / usar tuberías y me preguntaba cómo encaminar la salida del archivo de una aplicación a una tubería para que otra aplicación pueda usarla.
Para ser exactos, quiero conectar la salida de ffmpeg (datos de video transcodificados) a mi aplicación para usarla. Si creo un conducto con nombre como /tmp/out.mp4
y le doy a ffmpeg como nombre de archivo de salida, ffmpeg intentará crear este archivo de nuevo, probablemente sobreescribiendo mi canalización (o algo así). ¿Cómo lidiar con este tipo de situación?
¿Hay alguna forma general de desviar File IO de una aplicación de forma transparente?
(Estoy intentando escribir un servidor de transmisión de video (solo para aprender y divertirme) que transcodifica formatos como avi en un formato amigable de transmisión de datos como mpeg4 durante la transmisión, encontré que ffmpeg es demasiado lento para este propósito, me tomó como 2 segundos transcodificar 1 sec video :(
¿Es el problema con mi configuración / PC o ffmpeg es conocido por su lentitud? )
PD: Estoy escribiendo esto en C por cierto.
ffmpeg también puede leer de stdin y escribir en stdout así:
ffmpeg -i pipe:0 -f wav pipe:1
donde 0 y 1 son los descriptores de archivo POSIX estándar.