Files
my-clips/scripts/process.py
T
2026-05-19 22:29:29 +03:00

73 lines
2.2 KiB
Python

import sys
import yaml
import subprocess
from pathlib import Path
def main():
with open('/workspace/config/settings.yaml', 'r', encoding='utf-8') as f:
config = yaml.safe_load(f)
p = config['processing']
# Видео-фильтры
vf_parts = []
if p.get('mirror'):
vf_parts.append('hflip')
speed = p.get('speed', 1.0)
if speed != 1.0:
vf_parts.append(f'setpts={1/speed:.3f}*PTS')
f_type = p.get('filter', 'none')
if f_type == 'warm':
vf_parts.append('eq=saturation=1.15:contrast=1.05:brightness=0.02')
elif f_type == 'cool':
vf_parts.append('eq=saturation=0.85:contrast=1.0:brightness=-0.02')
elif f_type == 'vintage':
vf_parts.append('eq=contrast=1.1:saturation=0.8:brightness=0.05')
vf = ','.join(vf_parts) if vf_parts else None
# Аудио-фильтры (только для скорости)
af = f'atempo={speed}' if speed != 1.0 else None
input_dir = Path('/workspace/input')
output_dir = Path('/workspace/output')
output_dir.mkdir(exist_ok=True)
files = [f for f in input_dir.iterdir() if f.suffix.lower() in ('.mp4', '.mov', '.avi', '.mkv')]
if not files:
print("⚠️ Папка input пуста")
sys.exit(0)
print(f"📋 mirror={p['mirror']}, speed={p['speed']}, filter={p['filter']}")
print(f"🎬 Найдено: {len(files)}\n")
for idx, src in enumerate(files, 1):
dst = output_dir / f"processed_{src.stem}.mp4"
print(f"[{idx}/{len(files)}] {src.name} -> ", end="", flush=True)
cmd = ['ffmpeg', '-y', '-i', str(src)]
if vf:
cmd.extend(['-vf', vf])
if af:
cmd.extend(['-af', af])
cmd.extend([
'-c:v', 'libx264',
'-c:a', 'aac',
'-preset', 'fast',
'-crf', str(p.get('crf', 21)),
str(dst)
])
try:
subprocess.run(cmd, capture_output=True, text=True, check=True)
print("")
except subprocess.CalledProcessError as e:
print("")
print(f"🔍 STDERR: {e.stderr}")
if __name__ == '__main__':
main()