async def detect_hardware_encoder():
try:
result = await asyncio.to_thread(
subprocess.run,
["ffmpeg", "-encoders"],
capture_output=True,
text=True
)
# Check for hardware encoders in order of preference
if "h264_videotoolbox" in result.stdout:
return "h264_videotoolbox"
elif "h264_nvenc" in result.stdout:
return "h264_nvenc"
elif "h264_qsv" in result.stdout:
return "h264_qsv"
return "libx264" # Default software encoder
except Exception:
logger.warning("Failed to check for hardware acceleration. Using default encoder.")
return "libx264"
Этот код делает рендеринг 15-секундного видео длительностью около 6 минут и более, что неприемлемо.
Я видел несколько вопросов по SO, связанных с этим, но не смог найти однозначного ответа. Ниже приведен мой код. [code]async def write_final_video(clip, output_path, results_dir): cpu_count = psutil.cpu_count(logical=False) threads = max(1, min(cpu_count - 1, 16))
logger.info(f"Starting video writing process with codec: {output_params['codec']}") try: await asyncio.to_thread( clip.write_videofile, output_path, **output_params, ) except Exception as e: logger.error(f"Error during video writing with {output_params['codec']}: {str(e)}") logger.info("Falling back to libx264 software encoding") output_params["codec"] = "libx264" output_params["preset"] = "medium" try: await asyncio.to_thread( clip.write_videofile, output_path, **output_params, ) except Exception as e: logger.error(f"Error during fallback video writing: {str(e)}") raise finally: logger.info("Video writing process completed")
# Calculate and return the relative path relative_path = os.path.relpath(output_path, start=os.path.dirname(ARTIFACTS_DIR)) return relative_path [/code] и вспомогательная функция для получения кодировщика приведена ниже [code]async def detect_hardware_encoder(): try: result = await asyncio.to_thread( subprocess.run, ["ffmpeg", "-encoders"], capture_output=True, text=True )
# Check for hardware encoders in order of preference if "h264_videotoolbox" in result.stdout: return "h264_videotoolbox" elif "h264_nvenc" in result.stdout: return "h264_nvenc" elif "h264_qsv" in result.stdout: return "h264_qsv"
return "libx264" # Default software encoder except Exception: logger.warning("Failed to check for hardware acceleration. Using default encoder.") return "libx264" [/code] Этот код делает рендеринг 15-секундного видео длительностью около 6 минут и более, что неприемлемо. [code]t: 62%|██████▏ | 223/361 [04:40