Add progress report for ffmpeg

This commit is contained in:
Arnaud_Cayrol 2025-04-09 21:41:20 +02:00
parent d91fc0b254
commit a18fcc81c8
2 changed files with 29 additions and 5 deletions

32
main.py
View file

@ -97,16 +97,39 @@ def background_process(person_id, padding_percent, resize_size, face_resolution_
"-i", os.path.join(OUTPUT_FOLDER, "*.jpg"),
"-c:v", "libx264",
"-pix_fmt", "yuv420p",
"-progress", "pipe:1",
output_video
]
try:
subprocess.run(ffmpeg_command, check=True)
progress_info["video_path"] = output_video
progress_info["status"] = "video_done"
progress_info["completed"] = 0
progress_info["total"] = 100
progress_info["status"] = "video_compiling"
process = subprocess.Popen(ffmpeg_command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
universal_newlines=True)
for line in process.stdout:
line = line.strip()
if line:
if line.startswith("frame="):
try:
parts = line.split("=")
frame = int(parts[1].strip())
progress_info["completed"] = min(frame, progress_info["total"])
except Exception:
pass
if "progress=end" in line:
progress_info["completed"] = progress_info["total"]
break
process.wait()
if process.returncode == 0:
progress_info["status"] = "video_done"
else:
progress_info["status"] = "Video compilation failed."
except subprocess.CalledProcessError as e:
progress_info["status"] = f"Video compilation failed: {e}"
else:
progress_info["status"] = "done"
except Exception as e:
progress_info["status"] = f"error: {e}"
@ -225,4 +248,5 @@ def index():
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
app.run(host="0.0.0.0", port=5000)

View file

@ -444,4 +444,4 @@ def process_faces(config: ProcessConfig, max_workers=1, progress_callback=None,
progress_callback(completed_count, total_assets)
logger.info(f"Finished processing. {len(processed_files)} images saved out of {total_assets} assets.")
return processed_files
return processed_files