Этот Python-скрипт предназначен для пакетного конвертирования видеофайлов
.mp4 в формат .webm с использованием кодеков
VP9 (видео) и Opus (аудио).
Решение ориентировано на предсказуемый результат, качество и автоматизацию.
Скрипт подходит для случаев, когда важно: массово подготовить видео для веба, контролировать параметры кодирования, исключить ручную работу и получать стабильный результат. Вся логика прозрачна и полностью доступна в исходном коде.
# Video MP4 to WebM Converter (VP9 + Opus)
Этот Python-скрипт предназначен для пакетного конвертирования всех `.mp4`
видеофайлов в текущей директории в формат `.webm`
с кодеком VP9 для видео и Opus для аудио.
Конвертация выполняется с настройкой качества через CRF
и заданной частотой кадров (FPS).
Все действия логируются в файл conversion_log.txt.
Особенности:
- VP9 (видео)
- Opus (аудио)
- CRF и FPS
- Логирование
- Многопоточность
📁 webm-converter
├── mp4_to_webm.py # Основной Python-скрипт
├── conversion_log.txt # Лог конвертации (создаётся автоматически)
└── README.md # Описание и инструкции
import subprocess
import os
import datetime
import sys
import time
CRF = 20
FPS = 25
LOG_FILE = "conversion_log.txt"
def log(message):
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open(LOG_FILE, 'a', encoding='utf-8') as f:
f.write(f"[{timestamp}] {message}\n")
def convert_file(input_filename, fps, crf, ffmpeg_path='ffmpeg'):
name, _ = os.path.splitext(input_filename)
output_filename = f"{name}.webm"
command = [
ffmpeg_path, '-i', input_filename,
'-r', str(fps), '-c:v', 'libvpx-vp9',
'-crf', str(crf), '-b:v', '0',
'-cpu-used', '4', '-row-mt', '1',
'-tile-columns', '6', '-tile-rows', '1',
'-threads', 'auto',
'-c:a', 'libopus', '-b:a', '160k',
'-ar', '48000', '-ac', '2',
'-y', output_filename
]
log(f"Начало: {input_filename} → {output_filename}")
start_time = time.time()
try:
subprocess.run(command, check=True)
elapsed = round(time.time() - start_time, 2)
log(f"✅ Успешно | {elapsed} сек.")
except subprocess.CalledProcessError as e:
log(f"❌ Ошибка: {e}")
def main():
mp4_files = [f for f in os.listdir('.') if f.lower().endswith('.mp4')]
if not mp4_files:
log("Нет .mp4 файлов в папке.")
return
for file in mp4_files:
convert_file(file, FPS, CRF)
if __name__ == "__main__":
main()
ZIP-архив содержит исходный код, README и готов к использованию или адаптации под собственные задачи.
Скачать ZIP