[Python] Manim Animation Rendering Fails on Google Cloud Run: Segment Combination Issues

Discussão em 'Python' iniciado por Stack, Junho 28, 2025.

  1. Stack

    Stack Membro Participativo

    Problem Summary


    I'm running a Manim animation server on Google Cloud Run that successfully creates video segments but fails during the FFmpeg combination step. The behavior is inconsistent based on the number of segments created.

    Environment

    • Platform: Google Cloud Run (8GB RAM, 4 CPU)
    • Container: Debian 12 (bookworm) with Python 3.9.23
    • FFmpeg: 5.1.6 (with h264 support enabled)
    • Manim: Latest version with -ql (480p15) quality setting
    • Timeout: 240 seconds
    Observed Behavior

    Animation Complexity Segments Created Final Video Status
    Simple (2 segments) ✅ Success ✅ Created (7,681 bytes) ❌ Reports "failed"
    Complex (8+ segments) ✅ Success ❌ Not created ❌ Actually fails
    Code Structure


    # Manim command used
    manim_cmd = [
    'manim', python_file, scene_class,
    '--media_dir', output_dir,
    '-ql', # Low quality (480p15)
    '--disable_caching',
    '--output_file', f"{output_filename}.mp4",
    '--verbosity', 'ERROR',
    '--progress_bar', 'none',
    '--write_to_movie'
    ]

    Specific Issues

    Issue 1: False Negatives (Simple Animations)

    • What happens: Manim creates 2 segments successfully, FFmpeg combines them into final video
    • Problem: Final video exists and is playable, but process reports "Manim failed (code 1)"
    • Evidence: Can download the "failed" video via /videos/filename.mp4 and it plays correctly
    Issue 2: Real Failures (Complex Animations)

    • What happens: Manim creates 8+ segments successfully
    • Problem: FFmpeg combination step genuinely fails, no final video created
    • Error: Process exits with code 1, only partial segments remain
    Key Questions

    1. Why does FFmpeg combination work for 2 segments but fail for 8+ segments?
    2. Why does the same code work locally but fail on Cloud Run?
    3. Is this a Cloud Run container limitation, FFmpeg configuration issue, or Manim-specific problem?
    4. How can I debug FFmpeg combination failures in a containerized environment?
    File Structure (When Working)


    /app/manim_animations/
    └── animation_name/
    └── videos/
    └── animation_name_1234/
    └── 480p15/
    ├── partial_movie_files/
    │ └── SceneClass/
    │ ├── uncached_00000.mp4
    │ └── uncached_00001.mp4
    └── final_animation.mp4 # This gets created for 2 segments

    Error Output


    ISOLATED: Manim return code: 1
    Manim failed (code 1): [stderr contains FFmpeg errors]


    Has anyone encountered similar issues with Manim + FFmpeg on Cloud Run or other containerized environments? Any insights into why segment count affects combination success would be greatly appreciated.

    Investigation Results

    What Works:

    • ✅ Local development (identical code works perfectly)
    • ✅ FFmpeg installation (ffmpeg -version works, h264 encoders available)
    • ✅ Segment creation (all uncached_*.mp4 files created with correct sizes)
    • ✅ Simple animations after container restart
    What Doesn't Work:

    • ❌ Segment combination for 8+ segments
    • ❌ Status detection for 2-segment animations
    • ❌ Animations after multiple renders (resource accumulation?)
    Theories Tested:

    1. Resource constraints: Upgraded to 16GB/8CPU - made things worse
    2. FFmpeg version: Upgraded 5.1.6→7.x - broke basic functionality
    3. File accumulation: Container restart helps temporarily
    4. Path detection: Isolation script may look in wrong directories

    Continue reading...

Compartilhe esta Página