Add progress report for ffmpeg
This commit is contained in:
parent
d91fc0b254
commit
a18fcc81c8
2 changed files with 29 additions and 5 deletions
32
main.py
32
main.py
|
|
@ -97,16 +97,39 @@ def background_process(person_id, padding_percent, resize_size, face_resolution_
|
||||||
"-i", os.path.join(OUTPUT_FOLDER, "*.jpg"),
|
"-i", os.path.join(OUTPUT_FOLDER, "*.jpg"),
|
||||||
"-c:v", "libx264",
|
"-c:v", "libx264",
|
||||||
"-pix_fmt", "yuv420p",
|
"-pix_fmt", "yuv420p",
|
||||||
|
"-progress", "pipe:1",
|
||||||
output_video
|
output_video
|
||||||
]
|
]
|
||||||
try:
|
try:
|
||||||
subprocess.run(ffmpeg_command, check=True)
|
progress_info["completed"] = 0
|
||||||
progress_info["video_path"] = output_video
|
progress_info["total"] = 100
|
||||||
progress_info["status"] = "video_done"
|
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:
|
except subprocess.CalledProcessError as e:
|
||||||
progress_info["status"] = f"Video compilation failed: {e}"
|
progress_info["status"] = f"Video compilation failed: {e}"
|
||||||
else:
|
else:
|
||||||
progress_info["status"] = "done"
|
progress_info["status"] = "done"
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
progress_info["status"] = f"error: {e}"
|
progress_info["status"] = f"error: {e}"
|
||||||
|
|
||||||
|
|
@ -225,4 +248,5 @@ def index():
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app.run(host="0.0.0.0", port=5000)
|
app.run(host="0.0.0.0", port=5000)
|
||||||
|
|
||||||
|
|
@ -444,4 +444,4 @@ def process_faces(config: ProcessConfig, max_workers=1, progress_callback=None,
|
||||||
progress_callback(completed_count, total_assets)
|
progress_callback(completed_count, total_assets)
|
||||||
|
|
||||||
logger.info(f"Finished processing. {len(processed_files)} images saved out of {total_assets} assets.")
|
logger.info(f"Finished processing. {len(processed_files)} images saved out of {total_assets} assets.")
|
||||||
return processed_files
|
return processed_files
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue