Скрипт для создания RSS-фида подкаста из медиафайлов. Автоматически конвертирует видео в MP4 (опционально) и запускает временный HTTP-сервер для раздачи файлов и ленты.
- Рекурсивный поиск аудио и видео в указанной директории.
- Конвертация неподдерживаемых форматов (webm, avi, mkv, ogv, wmv, flv, ogg, mpg, mpeg) в MP4 с помощью
ffmpeg. - Гибкая настройка конвертации: выбор кодека (
copy– быстрая переупаковка,libx264– перекодирование). - Генерация RSS 2.0 с элементами
<enclosure>для каждого медиафайла. - Сортировка эпизодов по числовому значению в имени файла (от большего к меньшему).
- Автоматический подбор свободного порта (или указание вручную) и запуск HTTP-сервера в фоне.
- Поддержка поддиректорий (опционально).
- Подробное логирование.
- Python 3.6 или выше (используются стандартные библиотеки, дополнительные не требуются).
- ffmpeg – обязателен только если включена конвертация. Установите его:
- Linux (Ubuntu/Debian):
sudo apt install ffmpeg - macOS:
brew install ffmpeg - Windows: скачайте с ffmpeg.org и добавьте в PATH.
- Linux (Ubuntu/Debian):
- Скачайте скрипт
podcast_generator.py(или любое другое название). - Сделайте его исполняемым (Linux/macOS):
chmod +x podcast_generator.py
python podcast_generator.py <directory> <base_url> [options]<directory>– путь к директории с медиафайлами (обязательный).<base_url>– базовый URL, который будет использоваться в RSS (например,http://localhost). Порт будет добавлен автоматически. Обязательный аргумент.
| Опция | Описание |
|---|---|
--port PORT |
Указать порт для HTTP-сервера (если не указан, выбирается случайный свободный в диапазоне 3000–3010). |
--no-convert |
Отключить конвертацию видео. Будут использованы только файлы с расширениями .mp3, .mp4, .m4a, .m4v, .mov, .m4b. |
--delete-source |
Удалять исходные файлы после успешной конвертации (только при включённой конвертации). |
--no-recursive |
Не обрабатывать поддиректории, искать файлы только в корне указанной директории. |
--ffmpeg-path PATH |
Путь к исполняемому файлу ffmpeg (по умолчанию ffmpeg). |
--codec CODEC |
Кодек для конвертации: copy (переупаковка, по умолчанию) или libx264 и т.д. |
--verbose |
Показывать отладочные сообщения (debug-логирование). |
python podcast_generator.py /home/user/podcast http://192.168.1.100Скрипт:
- Найдёт все видео в
/home/user/podcastи поддиректориях, сконвертирует их в MP4 (переупаковкой). - Соберёт все медиафайлы, отсортирует по номерам.
- Сгенерирует RSS в файл
podcast.xmlв той же директории. - Запустит HTTP-сервер на случайном свободном порту (например, 3005).
- Выведет URL для подписки:
http://192.168.1.100:3005/podcast.xml.
python podcast_generator.py /media/videos http://example.com --codec libx264 --delete-sourcepython podcast_generator.py /path/to/files http://localhost --no-recursive --no-convert --port 8080python podcast_generator.py . http://127.0.0.1 --ffmpeg-path /usr/local/bin/ffmpeg-
Конвертация (если не отключена):
- Рекурсивно ищутся файлы с расширениями
webm, avi, mkv, ogv, wmv, flv, ogg, mpg, mpeg. - Для каждого вызывается
ffmpegс заданным кодеком. Если кодекcopy, происходит переупаковка в контейнер MP4 без перекодирования (быстро, без потерь). - Если указан кодек, например
libx264, выполняется перекодирование. - При успешной конвертации и включённой опции
--delete-sourceисходный файл удаляется.
- Рекурсивно ищутся файлы с расширениями
-
Сбор медиафайлов:
- После конвертации собираются все файлы с расширениями
.mp3, .mp4, .m4a, .m4v, .mov, .m4b(включая сконвертированные).
- После конвертации собираются все файлы с расширениями
-
Сортировка:
- Из имени каждого файла извлекается первое число (регулярное выражение
\d+). Файлы сортируются по убыванию (самый большой номер первым). Файлы без чисел имеют номер0и будут в конце.
- Из имени каждого файла извлекается первое число (регулярное выражение
-
Генерация RSS:
- Для каждого файла создаётся элемент
<item>с<title>(имя файла) и<enclosure>, содержащим URL, размер и MIME-тип. - MIME-тип определяется по расширению с помощью модуля
mimetypes(добавлены типы для популярных форматов). - RSS сохраняется в файл
{название_директории}.xmlв той же директории.
- Для каждого файла создаётся элемент
-
Запуск сервера:
- HTTP-сервер на базе
http.server.SimpleHTTPRequestHandlerзапускается в отдельном потоке. - Сервер раздаёт все файлы из указанной директории, включая сгенерированный RSS.
- Скрипт ожидает нажатия
Ctrl+Cдля завершения.
- HTTP-сервер на базе
- Если конвертация отключена (
--no-convert), скрипт будет использовать только файлы, уже имеющие подходящие расширения. - Если указан порт, который уже занят, скрипт завершится с ошибкой (в отличие от автоматического выбора, где порт перебирается до 20 попыток).
- Для корректной работы с кириллицей и спецсимволами в URL применяется
urllib.parse.quote. - При конвертации с кодеком
copyисходный файл может быть несовместим с контейнером MP4. В таком случае ffmpeg выдаст ошибку, и файл не будет сконвертирован. Рекомендуется сначала протестировать на одном файле.
MIT License. Используйте на свой страх и риск.