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-python
los 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.