| """ |
| auto_editor.py |
| --------------------------------------- |
| Automatic video pacing editor |
| |
| Features: |
| - Removes silence automatically |
| - Speeds up slow segments |
| - Keeps speech natural |
| - CPU optimized (HuggingFace FREE tier safe) |
| |
| Input: |
| input.mp4 |
| |
| Output: |
| edited.mp4 |
| """ |
|
|
| import subprocess |
| import os |
| import sys |
| from pathlib import Path |
|
|
| INPUT_VIDEO = "input.mp4" |
| OUTPUT_VIDEO = "edited.mp4" |
|
|
|
|
| def run_command(cmd): |
| """Run shell command safely""" |
| try: |
| subprocess.run( |
| cmd, |
| shell=True, |
| check=True |
| ) |
| except subprocess.CalledProcessError as e: |
| print("Command failed:", e) |
| sys.exit(1) |
|
|
|
|
| def check_input(): |
| if not os.path.exists(INPUT_VIDEO): |
| print(f"❌ Missing file: {INPUT_VIDEO}") |
| sys.exit(1) |
|
|
|
|
| def install_auto_editor(): |
| """ |
| Ensures auto-editor exists. |
| Required because HF containers reset. |
| """ |
| print("Installing auto-editor...") |
| run_command("pip install --no-cache-dir auto-editor") |
|
|
|
|
| def auto_edit(): |
| """ |
| Main editing step. |
| Removes silence + improves pacing. |
| """ |
|
|
| cmd = f""" |
| auto-editor "{INPUT_VIDEO}" |
| --margin 0.2s |
| --silent-speed 99999 |
| --video-speed 1 |
| --audio-normalize peak |
| --export mp4 |
| --output "{OUTPUT_VIDEO}" |
| """ |
|
|
| print("Running auto-editor...") |
| run_command(cmd) |
|
|
|
|
| def optimize_output(): |
| """ |
| Re-encode for social media compatibility. |
| """ |
|
|
| temp = "optimized.mp4" |
|
|
| cmd = f""" |
| ffmpeg -y -i "{OUTPUT_VIDEO}" |
| -vf scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2 |
| -c:v libx264 |
| -preset veryfast |
| -crf 23 |
| -c:a aac |
| -b:a 128k |
| "{temp}" |
| """ |
|
|
| print("Optimizing output...") |
| run_command(cmd) |
|
|
| os.replace(temp, OUTPUT_VIDEO) |
|
|
|
|
| def main(): |
| print("===== AUTO EDITOR START =====") |
|
|
| check_input() |
| install_auto_editor() |
| auto_edit() |
| optimize_output() |
|
|
| print("✅ Editing complete:", OUTPUT_VIDEO) |
|
|
|
|
| if __name__ == "__main__": |
| main() |