Warum wird mein FastAPI-Prozess angehalten und wie kann ich das vermeiden?
Posted: 19 Jan 2025, 21:13
Ich arbeite an einer Web-App mit FastAPI, die ffmpeg verwendet, um für den Benutzer Audio über Video zu legen. Ich stoße auf ein Problem, bei dem bei Verwendung von subprocess.run(cmd) der Prozess, der meine FastAPI-App ausführt, automatisch angehalten wird. Ich kann nicht herausfinden, wie ich die Fehlerprotokolle abrufen kann, um herauszufinden, warum das so ist, und ich habe online nichts gefunden, was darüber spricht.
Ich habe versucht, die Ausgabe nicht in das Terminal zu schreiben, da ich gelesen habe, dass dies ein Grund dafür sein könnte, dass es mit result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE), und ich habe auch versucht, es asynchron auszuführen, um ein Blockieren der Ereignisschleife mit
zu vermeiden
aber nichts funktioniert. Für jede Hilfe oder mögliche andere Vorgehensweise wären wir sehr dankbar. Terminalausgabe zur Aussetzung: [1] + 12526 suspendiert (tty-Ausgabe) „/Users//Tech Projects/project/tts/videnv/bin/python“
Code: Select all
@app.get("/overlay-audio/")
async def get_video(audio_file: str, forged_name: Annotated[str, Query()] = "default"):
video_path = os.path.join(output_path, "sample.mp4")
audio_path = os.path.join(output_path, audio_file)
forged_path = os.path.join(output_path, forged_name + ".mp4")
print("Video path: " + video_path)
print("Audio path: " + audio_path)
print("Output path: " + forged_path)
# command to recreate
# ffmpeg -i input.mp4 -i input.wav -c:v copy -map 0:v:0 -map 1:a:0 -c:a aac -b:a 192k output.mp4
cmd = ["/opt/homebrew/bin/ffmpeg",
"-i", video_path,
"-i", audio_path,
"-c:v", "copy",
"-map", "0:v:0",
"-map", "1:a:0",
"-c:a", "aac",
"-b:a", "192k",
forged_path]
subprocess.run(cmd)
return {"forged_vid": f"forged_{forged_name}"}
if __name__ == "__main__":
uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)
zu vermeiden
Code: Select all
result = await asyncio.create_subprocess_exec(
*cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)