MoviePy write_videofile работает очень медленно. Почему?Python

Программы на Python
Ответить
Anonymous
 MoviePy write_videofile работает очень медленно. Почему?

Сообщение Anonymous »

Я видел несколько вопросов по SO, связанных с этим, но не смог найти однозначного ответа. Ниже приведен мой код.

Код: Выделить всё

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))

os.makedirs(results_dir, exist_ok=True)

output_params = {
"codec": await detect_hardware_encoder(),
"audio_codec": "aac",
"fps": 24,
"threads": threads,
"preset": "medium",
"bitrate": "5000k",
"audio_bitrate": "192k",
}

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
и вспомогательная функция для получения кодировщика приведена ниже

Код: Выделить всё

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 минут и более, что неприемлемо.

Код: Выделить всё

t:  62%|██████▏   | 223/361 [04:40

Подробнее здесь: [url]https://stackoverflow.com/questions/79143335/moviepy-write-videofile-is-very-slow-why[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»