Skip to content

arechesk/podfeedgen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Podcast Feed Generator

Скрипт для создания 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.

Установка

  1. Скачайте скрипт podcast_generator.py (или любое другое название).
  2. Сделайте его исполняемым (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.

Конвертация с перекодированием в H.264 и удалением исходников

python podcast_generator.py /media/videos http://example.com --codec libx264 --delete-source

Только файлы в корне (без подпапок), без конвертации, указать порт

python podcast_generator.py /path/to/files http://localhost --no-recursive --no-convert --port 8080

Указать нестандартный путь к ffmpeg

python podcast_generator.py . http://127.0.0.1 --ffmpeg-path /usr/local/bin/ffmpeg

Как это работает

  1. Конвертация (если не отключена):

    • Рекурсивно ищутся файлы с расширениями webm, avi, mkv, ogv, wmv, flv, ogg, mpg, mpeg.
    • Для каждого вызывается ffmpeg с заданным кодеком. Если кодек copy, происходит переупаковка в контейнер MP4 без перекодирования (быстро, без потерь).
    • Если указан кодек, например libx264, выполняется перекодирование.
    • При успешной конвертации и включённой опции --delete-source исходный файл удаляется.
  2. Сбор медиафайлов:

    • После конвертации собираются все файлы с расширениями .mp3, .mp4, .m4a, .m4v, .mov, .m4b (включая сконвертированные).
  3. Сортировка:

    • Из имени каждого файла извлекается первое число (регулярное выражение \d+). Файлы сортируются по убыванию (самый большой номер первым). Файлы без чисел имеют номер 0 и будут в конце.
  4. Генерация RSS:

    • Для каждого файла создаётся элемент <item> с <title> (имя файла) и <enclosure>, содержащим URL, размер и MIME-тип.
    • MIME-тип определяется по расширению с помощью модуля mimetypes (добавлены типы для популярных форматов).
    • RSS сохраняется в файл {название_директории}.xml в той же директории.
  5. Запуск сервера:

    • HTTP-сервер на базе http.server.SimpleHTTPRequestHandler запускается в отдельном потоке.
    • Сервер раздаёт все файлы из указанной директории, включая сгенерированный RSS.
    • Скрипт ожидает нажатия Ctrl+C для завершения.

Примечания

  • Если конвертация отключена (--no-convert), скрипт будет использовать только файлы, уже имеющие подходящие расширения.
  • Если указан порт, который уже занят, скрипт завершится с ошибкой (в отличие от автоматического выбора, где порт перебирается до 20 попыток).
  • Для корректной работы с кириллицей и спецсимволами в URL применяется urllib.parse.quote.
  • При конвертации с кодеком copy исходный файл может быть несовместим с контейнером MP4. В таком случае ffmpeg выдаст ошибку, и файл не будет сконвертирован. Рекомендуется сначала протестировать на одном файле.

Лицензия

MIT License. Используйте на свой страх и риск.

About

rss podcast feed generator

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages