@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
cmd = ["/opt/homebrew/bin/ffmpeg",
"-i", video_path,
"-i", audio_path,
"-c:v", "copy",
"-map", "0
"-map", "1
"-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)
Я пробовал не записывать вывод на терминал, так как читал, что это может быть причиной приостановки использования result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE), и я также попробовал запустить его асинхронно, чтобы избежать блокировки цикла событий, используя
result = await asyncio.create_subprocess_exec(
*cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
```,
but nothing works. Any help or possible other ways to go about this would be greatly appreciated. Terminal output about the suspension: [1] + 12526 suspended (tty output) "/Users//Tech Projects/project/tts/videnv/bin/python"
Подробнее здесь: https://stackoverflow.com/questions/793 ... avoid-this
Мобильная версия