Sickbeard MP4 Automator

Sickbeard MP4 Automator автоматически приводит видеофайлы к заданному контейнеру и набору кодеков, обрабатывает аудио и субтитры, добавляет метаданные и обложки, а затем возвращает результат в цепочку Sonarr, Radarr, SickBeard, SABnzbd, NZBGet или торрент-клиента.

Основной принцип работы — не просто перекодировать каждый файл, а сначала исследовать дорожки через FFprobe, сопоставить их с правилами из autoProcess.ini и по возможности копировать уже подходящие потоки без лишнего повторного кодирования. Поэтому один и тот же профиль может аккуратно обработать смешанную библиотеку: часть материалов только перемультиплексировать, часть перекодировать, часть дополнить универсальной аудиодорожкой или субтитрами.

Управление строится вокруг сценариев Python и конфигурационного файла. Для ручной обработки служит manual.py; для автоматической цепочки используются postSonarr.py, postRadarr.py, SABPostProcess.py, NZBGetPostProcess.py, qBittorrentPostProcess.py и другие обработчики. Реальное кодирование выполняет FFmpeg, а Sickbeard MP4 Automator формирует параметры, решает, какие потоки оставить или преобразовать, выполняет сортировку, тегирование и последующие действия.

Скачать Sickbeard MP4 Automator

Оценка 9.7Рекомендуем
  • Конвертация видео
  • Сжатие файлов
  • Просто для новичков
Скачать бесплатно на Windows
Лучшая альтернатива
Sickbeard MP4 Automator
Оценка 8.5
  • Настройка через INI-файл
  • Зависит от Python и FFmpeg
  • Нет единого графического окна
Скачать Sickbeard MP4 Automator
Загрузка начнётся после нажатия

Что именно автоматизирует Sickbeard MP4 Automator

Программа полезна там, где медиатека постоянно пополняется файлами с разными контейнерами, кодеками, наборами звуковых дорожек и субтитров. Вместо ручного открытия каждого файла в конвертере задаётся единая политика: какой контейнер нужен на выходе, какие видеокодеки разрешено оставлять без перекодирования, какие аудиоформаты допустимы, сколько каналов сохранять, в каком порядке располагать дорожки, какие языки нужны и что делать с исходником после успешной обработки. Такая политика применяется одинаково к ручному запуску и к автоматическому постобработчику.

Название проекта не ограничивает его ни SickBeard, ни форматом MP4. В конфигурации отдельно задаются выходной контейнер и расширение, а интеграции предусмотрены также для Sonarr, Radarr, SickRage, SABnzbd, NZBGet, Deluge, qBittorrent и uTorrent. На практике MP4 остаётся типовым вариантом, потому что именно под него настроены стандартные значения: H.264 для видео, AAC для совместимой звуковой дорожки и mov_text для текстовых субтитров.

Обработка состоит из нескольких стадий. Сначала определяется входной файл и его медиапотоки. Затем для каждого видео, аудио и субтитров выбирается действие: copy, перекодирование в первый разрешённый кодек либо исключение дорожки. После этого FFmpeg создаёт целевой файл, при необходимости выполняется оптимизация структуры контейнера для потокового воспроизведения, добавляются метаданные и обложка, применяются права доступа, копирование или перемещение, а интеграционный скрипт сообщает медиаменеджеру о результате.

  • Ручное преобразование одного файла или каталога через manual.py.
  • Автоматический запуск после импорта в Sonarr или Radarr.
  • Преобразование до передачи файла медиаменеджеру из SABnzbd, NZBGet или торрент-клиента.
  • Нормализация видео, аудио и субтитров по отдельным спискам допустимых кодеков.
  • Сортировка дорожек по языку, признакам default/forced/commentary и другим критериям.
  • Тегирование MP4 метаданными TMDB и встраивание обложки, если выбранный контейнер это поддерживает.
  • Копирование, перемещение и удаление исходника после успешного завершения с учётом заданной политики.

Подготовка к первому запуску

Sickbeard MP4 Automator представляет собой набор Python-сценариев, поэтому рабочая среда должна содержать Python 3 и FFmpeg. FFprobe требуется не меньше самого FFmpeg: он читает структуру входного файла и даёт программе сведения о кодеках, каналах, языковых тегах, disposition-флагах, разрешении и других характеристиках дорожек. Если команды ffmpeg и ffprobe доступны через системный PATH, в конфигурации можно оставить короткие имена; при иной установке задаются полные пути к исполняемым файлам.

После распаковки исходного архива устанавливаются Python-зависимости из файла требований проекта. Затем образец setup/autoProcess.ini.sample копируется в каталог config под именем autoProcess.ini. Если конфигурации нет, первый запуск способен создать базовый файл, но для предсказуемой настройки удобнее начать с образца: в нём видна структура секций и значения по умолчанию.

  1. Проверить, что Python 3 запускается от того же пользователя, от которого будут работать Sonarr, Radarr или загрузчик.
  2. Проверить ffmpeg -version и ffprobe -version; при аппаратном кодировании дополнительно убедиться, что сборка FFmpeg содержит нужный энкодер.
  3. Установить зависимости проекта из списка требований, не смешивая системный Python и случайное виртуальное окружение.
  4. Создать config/autoProcess.ini и сначала изменить только пути к FFmpeg/FFprobe и базовый выходной профиль.
  5. Запустить manual.py на одном тестовом файле, изучить команду FFmpeg и результат, и только после этого подключать автоматическую постобработку.

Проверка на одном файле принципиальна: ошибка в списке разрешённых кодеков, языков или в политике удаления исходника масштабируется на всю очередь. Ручной запуск позволяет увидеть, какие потоки программа распознала, что решила копировать, что отправила на кодирование и какой файл считает окончательным. Когда эта логика подтверждена, тот же autoProcess.ini можно безопасно использовать в интеграционных сценариях.

Ручная обработка через manual.py

Сценарий manual.py подходит и для единичной проверки, и для пакетной обработки каталога. Параметр -i принимает путь к файлу или директории. Без автоматического режима сценарий задаёт вопросы о типе медиаданных и идентификаторах, а флаг -a отключает запросы и заставляет программу самостоятельно угадывать данные по имени и пути. Это удобно для пакетных заданий, но качество распознавания зависит от аккуратности названий файлов.

Для фильмов можно явно передать идентификатор TMDB или IMDb; для сериалов предусмотрены TVDB/TMDB, номер сезона и эпизода. Явный идентификатор полезен, когда по названию есть несколько совпадений, в имени нет года или релиз содержит технический мусор. Если метаданные не нужны, их можно отключить отдельным флагом — тогда конвертация не зависит от успешности поиска фильма или эпизода.

Параметр manual.py Назначение Когда применять
-i, --inputФайл либо каталог для обработки.Основной способ задать источник при автоматическом запуске.
-a, --autoРабота без интерактивных запросов с угадыванием метаданных.Пакетные задания, планировщик, обработка каталога.
--configАльтернативный путь к конфигурации.Несколько профилей для разных библиотек или тест нового набора правил.
-tmdbЯвный идентификатор TMDB.Однозначное тегирование фильма или эпизода при неясном имени.
-imdbЯвный идентификатор IMDb.Когда удобнее исходить из IMDb ID.
-tvdbЯвный TVDB ID.Сериалы, если автоматическое распознавание не выбрало нужное шоу.
-s и -eНомер сезона и эпизода.Точная привязка отдельной серии.
-nm, --nomoveВременно запрещает настроенное перемещение.Проверка профиля без изменения структуры библиотеки.
-m, --movetoПереопределяет каталог назначения.Разовый вывод в тестовую или временную папку.
-nc, --nocopyОтключает настроенные копии.Тестирование, когда не нужны резервные экземпляры.
-nt, --notagОтключает тегирование.Диагностика проблем метаданных или чисто техническая конвертация.
-nd, --nodeleteНе удаляет исходник.Первичная проверка профиля и безопасное переобрабатывание архива.
-pr, --preserve-relativeСохраняет относительную структуру путей при заданном корне.Пакетная обработка дерева каталогов с переносом результата.
-b, --bypass-convertПропускает конвертацию.Когда нужен только этап тегирования/постобработки подходящего файла.
--processedУказывает каталог для уже обработанных исходников.Разделение очереди и завершённых заданий без удаления исходного файла.

При работе с каталогом полезно сочетать автоматический режим с безопасной политикой файлов: на первом проходе отключить удаление и перемещение, а результат складывать отдельно. После проверки нескольких разных источников — AVC и HEVC, стерео и многоканального звука, внутренних и внешних субтитров — можно вернуть обычные правила. Такой подход показывает реальные решения программы до подключения Sonarr или Radarr.

Как устроен autoProcess.ini

Конфигурация разделена по задачам. Секция Converter отвечает за запуск FFmpeg, контейнер, временные файлы и операции с путями. Video, Audio, Universal Audio и Subtitle описывают правила отдельных типов потоков. Подсекции *.Sorting определяют порядок дорожек. Metadata управляет тегами и оптимизацией контейнера. Отдельные секции Sonarr, Radarr, Sickbeard, SABNZBD, qBittorrent и других приложений хранят параметры API, категории, метки и правила обратной передачи.

Значительная часть полей — не готовые команды FFmpeg, а декларация желаемого результата. Например, список codec = h264, x264 означает, что подходящий H.264-поток можно сохранить, а неподходящий видеопоток следует преобразовать первым кодеком из списка. Тот же принцип используется для аудио и субтитров. Это делает конфигурацию пригодной для смешанных источников: одни дорожки просто копируются, а другие приводятся к стандарту.

Если нужно добавить редкий параметр FFmpeg, предусмотрены preopts, postopts, параметры кодека и фильтры. Но эти поля следует использовать после проверки обычных настроек. Конфликт между собственной опцией и автоматически сформированной командой сложнее диагностировать, а некорректный фильтр принудительно переводит поток из режима copy в перекодирование.

Контейнер, выходной файл и операции после конвертации

Пара output-format и output-extension задаёт формат мультиплексирования и расширение. Обычно оба значения соответствуют друг другу — например, mp4. Разделение существует потому, что FFmpeg различает muxer и имя файла. Если указать нестандартное сочетание, оно должно быть осмысленным для FFmpeg и последующих приложений, иначе медиаменеджер может неверно определить полученный файл.

Опция temp-extension добавляет временное расширение на время записи. Она полезна, когда библиотеку одновременно сканирует Plex, Emby, Jellyfin или другой индексатор: незавершённый файл не выглядит как готовый медиаресурс. После успешного завершения временное имя заменяется окончательным. Это снижает риск, что медиасервер увидит частично записанный MP4 и сохранит неверные сведения о длительности или потоках.

minimum-size помогает игнорировать мелкие sample-файлы. ignored-extensions исключает служебные расширения при обходе каталогов. process-same-extensions решает, нужно ли анализировать и обрабатывать файл, который уже имеет то же расширение, что и выход. Даже если контейнер совпадает, внутри могут быть нежелательные кодеки, неправильный порядок аудио или неудачные субтитры, поэтому для строгой нормализации эту опцию включают осознанно.

Файловые действия задаются отдельно. copy-to создаёт дополнительные копии итогового файла в перечисленных каталогах, move-to переносит финальный результат, delete-original разрешает удалить источник после успеха. Для тестового периода безопаснее сохранить оригиналы: ошибка профиля чаще обнаруживается не по факту завершения FFmpeg, а позже — например, при воспроизведении конкретной аудиодорожки или субтитров.

Видео: копирование, перекодирование и ограничения

Видеосекция начинается со списка разрешённых кодеков. Если исходный поток уже соответствует одному из них и остальные ограничения не требуют перекодирования, Sickbeard MP4 Automator может передать видео через copy. Если кодек не разрешён, первым элементом списка выбирается целевой энкодер. Поэтому порядок важен: он одновременно описывает предпочтительный выход и набор форматов, которые можно оставить.

Ограничения по ширине, уровню, профилю, пиксельному формату, глубине и битрейту дают более точную нормализацию. Например, один H.264-файл можно скопировать, а другой H.264 с неподходящим профилем или чрезмерной шириной — перекодировать. Программа не улучшает качество из воздуха: если задать меньшую ширину или агрессивный CRF, результат будет компромиссом между размером, нагрузкой и сохранением деталей.

Для программного кодирования обычно выбирают либо битрейт, либо CRF/quality-параметр в зависимости от энкодера. max-bitrate служит верхней границей, а коэффициенты позволяют связать целевой поток с характеристиками источника. Важна проверка фактически сформированной команды FFmpeg: одинаковое числовое значение качества не имеет одинакового смысла у x264, x265, NVENC, QSV и VAAPI.

Аппаратное ускорение настраивается через список допустимых hwaccels, декодеры, устройства и формат выхода аппаратного кадра. Это не универсальный переключатель быстрее. FFmpeg должен быть собран с нужным API, драйвер должен видеть устройство, выбранный энкодер — поддерживать исходный и целевой пиксельный формат. При ошибках сначала полезно добиться корректной работы на CPU, затем включать аппаратный декодер и энкодер по одному.

Порядок видеопотоков

Секция Video.Sorting определяет порядок, если в контейнере больше одного видеопотока — например, основной видеоряд и вложенное изображение. Ключи сортировки могут учитывать кодек, язык, disposition и технические признаки. В типичной библиотеке основное видео одно, поэтому эта настройка редко требует изменений; её значение возрастает у необычных файлов с несколькими видеопотоками или вложениями.

Аудио: языки, каналы, универсальная дорожка

Аудиоправила у Sickbeard MP4 Automator детальнее простого выбора AAC или AC3. Можно перечислить допустимые кодеки, языки, язык по умолчанию, максимальное число каналов, ограничение битрейта на канал, допустимые частоты дискретизации, dispositions, фильтр и режим сохранения оригинала. Это позволяет, например, сохранить качественный многоканальный поток и одновременно создать совместимую стереодорожку AAC для устройств, которые не умеют декодировать исходный формат.

Именно для второго сценария существует Universal Audio. Это отдельная политика дополнительной звуковой дорожки. По умолчанию проект ориентируется на AAC с битрейтом на канал и создаёт такой поток из подходящего источника. Универсальную дорожку можно ограничить первым аудиопотоком, задать отдельный профиль, фильтр и положение в итоговой сортировке. Она не заменяет основную многоканальную дорожку, если политика разрешает сохранить обе.

Параметр битрейта на канал удобен тем, что целевой общий битрейт масштабируется с числом каналов. Но для современных кодеков и VBR-профилей это не всегда лучший критерий; если энкодер поддерживает качественный VBR, значение задаётся отдельно. max-bitrate нужен как страховка от чрезмерного потока. При копировании оригинальной дорожки эти параметры кодирования не применяются, пока какой-либо фильтр или иное условие не заставит FFmpeg перекодировать звук.

Языковая фильтрация требует корректных тегов в исходнике. Если дорожка не содержит языка, применяется default-language либо она может считаться неопределённой — в зависимости от выбранной политики. Опция сохранения исходного языка полезна, когда при перекодировании не следует заменять существующий тег. Для библиотек с дубляжом и оригинальной дорожкой важно сначала проверить несколько файлов от разных релиз-групп: обозначения rus, eng и und часто распределены непоследовательно.

Сортировка аудио

Отдельная секция Audio.Sorting задаёт, какая дорожка окажется первой и какие будут следовать за ней. В официальной конфигурации предусмотрены ключи по языку, канальности, кодеку и disposition-флагам. Практический смысл очень заметен: многие телевизоры и приложения автоматически выбирают первый поток, поэтому правильные дорожки должны не только присутствовать, но и стоять в ожидаемом порядке.

Если нужно предпочитать дорожку default, forced, commentary или оригинальный язык, сортировка должна отражать именно это, а не надеяться на порядок во входном MKV. При этом не стоит одновременно задавать противоречивые критерии — например, жёстко предпочитать стерео и одновременно больше каналов. Сначала решается пользовательская цель, затем под неё строится последовательность ключей.

Субтитры: встраивание, конвертация, forced и внешние файлы

Для текстовых субтитров стандартный MP4-профиль использует mov_text. В MKV чаще встречаются SRT/ASS/SSA или графические PGS/VobSub, поэтому программа должна решить: копировать, перекодировать, извлечь наружу, прожечь в видео либо отбросить несовместимый поток. embed-subs отвечает за встраивание; отдельные настройки управляют графическими субтитрами и тем, следует ли брать только внутренние дорожки.

Forced-субтитры можно обрабатывать отдельно от обычных. Это полезно для фильмов, где переведены только реплики на иностранном языке. Disposition-флаги не всегда выставлены корректно, поэтому предусмотрена возможность определять дополнительные признаки по имени внешнего файла. Важно помнить: прожиг субтитров всегда требует перекодирования видеопотока, даже если само видео ранее подходило для copy.

Поддерживается автоматическая загрузка внешних субтитров через Subliminal с заданными языками и провайдерами. Это отдельная стадия, зависящая от доступности поставщиков и правильного определения фильма или сериала. Если основной сценарий — надёжная техническая нормализация, загрузку субтитров разумно включать после того, как конвертация и тегирование уже работают независимо.

В конфигурации также предусмотрены CleanIt для очистки текстовых субтитров и FFSubsync для синхронизации. CleanIt применяет правила к текстовому содержимому и может использовать набор тегов либо отдельный YAML-файл. FFSubsync пытается синхронизировать субтитры относительно видео. Обе функции полезны только там, где соответствующие зависимости установлены и формат дорожки допускает текстовую обработку.

Метаданные, постер и оптимизация MP4

Тегирование включается в секции Metadata. Программа получает данные из TMDB и, когда контейнер поддерживает запись таких тегов, добавляет название, сведения о фильме или эпизоде и выбранную графику. Язык метаданных задаётся отдельно. Если автоматическое распознавание ошибается, лучше передать точный ID через manual.py, чем исправлять уже обработанную серию файлов.

download-artwork управляет загрузкой изображения — например, постера или миниатюры — для встраивания. Сама по себе обложка не влияет на воспроизведение, но делает библиотеку единообразнее в программах, которые читают внутренние MP4-теги. Если медиасервер всегда использует собственный скрейпер и внешние постеры, эту функцию можно отключить и сократить число сетевых зависимостей обработки.

relocate-moov переносит индекс MP4 в положение, удобное для начала воспроизведения до полной загрузки файла. Для MP4 это выполняется с использованием механизма fast-start/qtfaststart; для MKV применяется резервирование пространства индекса. Опция не меняет качество кодирования, но полезна для сетевой раздачи файла и некоторых клиентов, чувствительных к расположению служебных атомов.

Интеграция с Sonarr

В связке с Sonarr Sickbeard MP4 Automator обычно запускается как пользовательский сценарий после импорта. В autoProcess.ini задаются адрес Sonarr, порт, API-ключ, SSL и webroot. В Sonarr создаётся подключение Custom Script: для обычной схемы включают события импорта/загрузки и обновления файла, а путь указывает на Python и postSonarr.py либо на обёртку .bat/.sh, если среде требуется объединить команду запуска.

Ключевой выбор — когда именно конвертировать. При включённом Completed Download Handling Sonarr сначала получает завершённую загрузку, импортирует и переименовывает файл, после чего вызывает постскрипт. В альтернативной схеме конвертация выполняется в загрузчике до передачи Sonarr: тогда Completed Download Handling отключают, а SABnzbd/NZBGet/qBittorrent запускают свой SMA-сценарий и по API инициируют обработку конкретного пути. Нельзя оставлять обе стороны цепочки без механизма обратной передачи: файл просто не попадёт в импорт.

Параметр rescan позволяет после конвертации попросить Sonarr пересканировать путь и обновить сведения о новом расширении и потоках. force-rename помогает, если шаблон имени содержит характеристики кодека, которые изменяются при конвертации. in-progress-check предотвращает вмешательство, пока сканирование загрузки ещё идёт. blockreprocess полезен для предотвращения повторной обработки уже нормализованных файлов при сохранении этапа тегирования.

При ошибке скрипт отработал, но Sonarr не импортировал файл проверяются три границы: сам выход FFmpeg, API-соединение с Sonarr и путь, который Sonarr видит относительно своего окружения. Особенно часто различаются пути на хосте и внутри контейнера. Для этого у интеграций предусмотрено path-mapping: локальный путь преобразуется в путь, понятный удалённому приложению. Без такого соответствия успешная конвертация может закончиться неудачным уведомлением.

Интеграция с Radarr

Radarr использует тот же принцип, но с postRadarr.py и отдельной секцией API. Параметры force-rename, rescan, in-progress-check и blockreprocess решают те же задачи: обновить базу после изменения файла, не запустить второй конвертирующий проход и дождаться завершения текущего импорта. Порт по умолчанию отличается от Sonarr, поэтому копирование секции без проверки часто приводит к банальной ошибке соединения.

Для фильмов особенно полезно тестировать метаданные на неоднозначных названиях и ремейках. Если Radarr уже знает TMDB ID, интеграционный сценарий получает более надёжный контекст, чем при ручном угадывании имени. При отдельном запуске manual.py ту же однозначность даёт параметр -tmdb. Если тегирование не требуется, техническая конвертация может выполняться независимо от метаданных.

SABnzbd и NZBGet: конвертация до импорта

SABnzbd подключается через SABPostProcess.py. Категории в загрузчике должны совпадать с sonarr-category, radarr-category, sickbeard-category, sickrage-category или списком bypass-категорий. Сценарий получает завершённую загрузку, при включённом convert обрабатывает медиа, затем уведомляет нужный медиаменеджер. output-directory и path-mapping помогают разделить место загрузки, обработки и путь, который видит Sonarr/Radarr.

В NZBGet используется NZBGetPostProcess.py. Скрипт копируют в каталог сценариев NZBGet, после перезапуска он появляется в настройках. В категориях NZBGet назначается соответствующий PostScript, а имена категорий согласуются с SMA. Такая схема нужна, когда важно завершить конвертацию до того, как Sonarr или Radarr переместит файл в библиотеку.

Если Completed Download Handling в Sonarr/Radarr оставлен включённым, дополнительный постпроцесс загрузчика обычно не нужен: медиаменеджер сам отслеживает завершение и затем запускает свой post-скрипт. Одновременное включение двух схем способно привести к повторной обработке, конфликту путей или гонке за один файл. Поэтому сначала выбирают точку конвертации, затем настраивают только нужные вызовы.

qBittorrent, uTorrent и Deluge

qBittorrent запускает qBittorrentPostProcess.py после завершения торрента. В настройке Run external program on torrent completion передаются параметры категории, трекера, корневого пути, конкретного файла, имени и хеша в ожидаемом порядке. На Windows иногда удобнее использовать BAT-обёртку, которая явно вызывает нужный python.exe и затем передаёт все аргументы скрипту. Это устраняет зависимость от файловых ассоциаций .py.

Настройка запуска qBittorrentPostProcess для Sickbeard MP4 Automator в qBittorrent

В секции qBittorrent можно сопоставить метки Sonarr/Radarr/SickBeard/SickRage, определить bypass-метки, указать WebUI и учётные данные, а также действие с торрентом до и после обработки. action-before = pause защищает от ситуации, когда клиент продолжает работать с файлом во время преобразования; после завершения возможны возобновление, удаление задания или удаление вместе с данными — если такая политика действительно соответствует правилам раздачи.

Запуск BAT-обёртки qBittorrentPostProcess Sickbeard MP4 Automator в командной строке Windows

Для uTorrent команда постобработки получает собственный набор подстановок клиента, а секция конфигурации аналогично хранит метки, WebUI и действия. Deluge использует демон и свой delugePostProcess.py; важно не перепутать порт демона с портом WebUI. Во всех трёх случаях путь внутри контейнера/службы может отличаться от пути, который видит медиаменеджер, поэтому path-mapping остаётся критически важным.

SickBeard и SickRage

Для SickBeard предусмотрен postSickbeard.py, который указывается в extra_scripts. В секции Sickbeard хранятся хост, порт, API-ключ, SSL, webroot и при необходимости логин с паролем. На Windows путь с обратными слешами должен быть записан так, чтобы конфигурация SickBeard прочитала его корректно, а изменения в конфигурационном файле лучше вносить при остановленном процессе, чтобы они не были перезаписаны.

SickRage использует аналогичную идею через Extra Scripts. Важно не переносить настройки слепо: порт, webroot и API-ключ относятся к конкретному экземпляру медиаменеджера. Само название проекта сохранило Sickbeard, но сценарии обработки не ограничены этой интеграцией, поэтому выбор секции должен соответствовать реально используемому менеджеру.

Постобработка: что можно сделать после готового файла

После успешной конвертации Sickbeard MP4 Automator умеет запускать пользовательские сценарии из каталога постобработки. Они получают контекст готового файла и могут выполнять действия, которые не относятся к кодированию: вызвать внешний индексатор, обновить дополнительную систему, переименовать сопутствующие данные или выполнить собственную автоматизацию. Важно отделять такие сценарии от основной конвертации: ошибка постобработчика не должна маскировать качество самого медиа.

Настройки post-process и wait-post-process определяют, запускать ли такие сценарии и следует ли ждать их завершения. Ожидание удобно, если следующий шаг зависит от результата; асинхронный запуск уменьшает задержку основной цепочки, но усложняет диагностику. Сначала полезно добиться стабильной работы без пользовательских сценариев, затем добавлять их по одному и вести отдельный лог.

Аппаратное ускорение: NVENC, QSV, VAAPI и декодирование

Sickbeard MP4 Automator не реализует собственные аппаратные кодеки — он передаёт FFmpeg выбранные ускорители, энкодеры, декодеры и устройства. Поэтому поддержка определяется конкретной сборкой FFmpeg и драйверами системы. Если ffmpeg -encoders не показывает нужный энкодер, изменение autoProcess.ini не исправит ситуацию. То же относится к аппаратным декодерам и форматам кадров.

Практическая диагностика начинается с программного кодирования того же файла. Если оно проходит, затем включают только аппаратный энкодер, а декодирование оставляют на CPU. После этого отдельно добавляют hardware decoder и hwaccel-output-format. Такой порядок быстро показывает, где возникает несовместимость: на чтении потока, передаче кадров между устройством и фильтром или на кодировании.

Фильтры масштабирования, прожиг субтитров и некоторые цветовые преобразования могут потребовать перехода кадров в обычную память. Ошибки вида невозможно преобразовать между форматами фильтра часто связаны не с Sickbeard MP4 Automator как таковым, а с несовместимой цепочкой FFmpeg. В этом случае проверяют пиксельный формат, аппаратное устройство, фильтр и необходимость явной загрузки/выгрузки кадров.

Права доступа и пути

После обработки программа может применить chmod, а в Unix-подобной среде — uid и gid. Это важно, если загрузчик, конвертер и медиасервер работают от разных пользователей. Успешный FFmpeg ещё не означает, что Sonarr сможет переименовать результат или Plex сможет его прочитать. Права проверяют не только у файла, но и у всех каталогов по пути.

В контейнерных схемах ещё важнее не путать путь хоста с путём внутри контейнера. Например, загрузчик может сообщить /downloads/movie, тогда как Sonarr видит те же данные как /data/downloads/movie. path-mapping переводит один префикс в другой перед API-вызовом. Ошибка здесь выглядит как проблема импорта, хотя файл физически существует и конвертация завершилась.

На Windows типичная ошибка — запуск постскрипта другим Python, чем тот, в который установлены зависимости. Вручную команда работает, а qBittorrent или Sonarr падает с ImportError. Решение — указывать полный путь к python.exe в BAT-обёртке или настройке Custom Script и использовать тот же интерпретатор, которым выполнялась установка требований.

Реальный запуск qBittorrentPostProcess Sickbeard MP4 Automator с аргументами загрузки

Логи и последовательная диагностика ошибок

Основной принцип диагностики — найти последнюю успешно завершённую границу. Если FFmpeg не стартовал, проверяются пути к бинарникам и параметры кодирования. Если FFmpeg создал файл, но он не появился в библиотеке, проверяются постобработка, права, API и path mapping. Если файл импортирован, но не соответствует профилю, анализируются выбранные потоки и правила Video/Audio/Subtitle. Такой порядок экономит время по сравнению с одновременным изменением десятка параметров.

Режим подробного логирования показывает решение по каждому потоку и фактическую команду FFmpeg. Это главный материал для анализа. По нему видно, был ли выбран copy, какой энкодер запущен, какие -map соответствуют дорожкам, какой язык записан в metadata, куда идёт временный файл и какое действие выполняется после завершения. Скрывать API-ключи и токены при публикации лога обязательно.

Диагностический вывод Sickbeard MP4 Automator после запуска qBittorrentPostProcess

FFmpeg завершает конвертацию с ошибкой

Сначала копируют сформированную команду FFmpeg и воспроизводят её отдельно. Если ошибка повторяется, проблема находится в медиа, сборке FFmpeg, драйвере или параметрах кодека. Затем временно убирают дополнительные фильтры, аппаратное декодирование, пользовательские preopts/postopts и прожиг субтитров. Когда минимальная команда работает, опции возвращают по одной. Если отдельно FFmpeg работает, а через SMA нет, сравнивают окружение, текущий каталог и права пользователя.

После конвертации пропал звук

В таком случае изучают -map и аудиокодеки в команде. Слишком строгий список языков может исключить единственную дорожку с тегом und; неподходящий max-channels или сортировка способны выбрать не тот поток; аппаратный/редкий кодек может не поддерживаться целевым клиентом. Для проверки удобно временно разрешить исходный аудиокодек или создать только универсальный AAC, затем постепенно вернуть основной многоканальный поток.

Файл сконвертирован, но Sonarr/Radarr не видит его

Если итоговый файл присутствует, проверяется API-секция медиаменеджера и видимость пути. Успешная проверка Custom Script ещё не гарантирует, что путь из загрузчика доступен внутри другого контейнера. Сравнивают путь в логе SMA с путём, который вручную открывается из Sonarr/Radarr, затем настраивают path-mapping. При схеме до импорта убеждаются, что выбран либо постскрипт загрузчика, либо Completed Download Handling; отсутствие обоих разрывает цепочку.

Повторная конвертация уже обработанных файлов

Причина обычно в process-same-extensions, настройках Sonarr/Radarr и отсутствии признака, что текущий файл уже соответствует профилю. Если все потоки подходят, SMA может пропустить реальное кодирование, но дополнительные универсальные дорожки или тегирование способны запускаться повторно. Для интеграций предусмотрен blockreprocess; дополнительно стоит проверить, не вызывают ли один и тот же файл одновременно загрузчик и медиаменеджер.

Субтитры становятся причиной полного перекодирования видео

Это ожидаемо, если включён burn-in. Встраивание текстового потока в контейнер и прожиг — разные операции. mov_text можно записать отдельной дорожкой без изменения видеопотока, а визуальное наложение требует декодировать и заново закодировать каждый кадр. Если цель — Direct Play, сначала проверьте, поддерживает ли клиент отдельные субтитры; прожиг оставляйте для форматов или forced-сценариев, которые иначе не воспроизводятся.

qBittorrent запускает конвертацию, но нет ожидаемого лога или возврата в Sonarr

Проверяется точная команда Run external program, порядок аргументов и интерпретатор Python. На Windows полезно открыть BAT-файл из командной строки с тестовыми аргументами: так видно синтаксическую ошибку, неправильное экранирование кавычек и импорт модулей. Если преобразование реально идёт, но нужный лог не создаётся, это признак того, что запускается другой экземпляр скрипта, другой config или другая Python-среда. Полные пути устраняют неоднозначность.

Практические профили без выдуманных пресетов

В проекте нет кнопки с готовыми профилями уровня телевизор, телефон или максимальное качество. Профиль формируется самим autoProcess.ini. Ниже — не названия встроенных режимов, а практические схемы, которые собираются из реальных параметров программы. Численные значения качества следует подбирать под собственные источники и энкодер, поэтому здесь важна логика, а не универсальные цифры.

Цель Ключевая настройка Что проверить
Максимум совместимости с бытовыми устройствамиMP4, H.264 и универсальная AAC-стереодорожка; неподдерживаемые аудиокодеки перекодируются.Поддержку H.264-профиля, уровень, mov_text и порядок аудиодорожек на реальных клиентах.
Сохранить качество подходящего видеоРазрешить исходные видеокодеки в списке Video.codec, чтобы SMA использовал stream copy при отсутствии других ограничений.Что фильтры, burn-in и принудительное преобразование не заставляют перекодировать видео.
Оставить многоканальный звук и добавить совместимыйОсновной поток сохраняется или перекодируется по Audio, дополнительный AAC создаётся через Universal Audio.Первую дорожку и сортировку: клиент должен автоматически выбирать нужный вариант.
Нормализовать библиотеку из разных контейнеровЕдиные output-format/output-extension и process-same-extensions по необходимости.Что MP4-ограничения совместимы с имеющимися субтитрами и аудио.
Конвертировать до появления файла в библиотекеПостскрипт загрузчика и отключённый Completed Download Handling в Sonarr/Radarr.Категории/метки, API, path mapping и обратный вызов медиаменеджера.
Конвертировать после нормального импортаCompleted Download Handling включён, Sonarr/Radarr вызывает postSonarr.py/postRadarr.py.Права на уже перемещённый файл, rescan и возможное переименование после изменения кодека.
Безопасно проверить новый профиль--nodelete, --nomove, отдельный выходной каталог, один тестовый файл.Аудио, субтитры, метаданные, воспроизведение и размер перед массовым запуском.
Обработать дерево каталоговmanual.py -i на каталоге, автоматический режим, при необходимости сохранение относительных путей.Минимальный размер, игнорируемые расширения и отсутствие sample-файлов в очереди.

Справочник основных параметров autoProcess.ini

Ниже собраны параметры, которые определяют реальное поведение программы. Конфигурация разделена на тематические секции. Если найденный пример использует единую секцию MP4, переносить его строки буквально не следует: сверяйте названия с секциями Converter, Video, Audio, Universal Audio, Subtitle и Metadata, а также с интеграциями, которыми вы действительно пользуетесь.

Converter

Параметр Практический смысл
ffmpegПуть или имя исполняемого FFmpeg. Если задано просто ffmpeg, процесс должен находить его через PATH.
ffprobeПуть или имя FFprobe. Ошибка здесь ломает анализ потоков ещё до выбора параметров кодирования.
threadsЧисло потоков FFmpeg; значение 0 означает автоматический выбор. Это параметр FFmpeg, а не отдельный лимитер загрузки процессора SMA.
hwaccelsСписок разрешённых механизмов аппаратного ускорения, которыми программа может воспользоваться при построении команды.
hwaccel-decodersСписок аппаратных декодеров FFmpeg. Наличие имени в конфигурации не заменяет поддержку в сборке FFmpeg и драйвере.
hwdevicesОписание аппаратных устройств, например VAAPI-узла. Используется, когда FFmpeg требуется явная инициализация устройства.
hwaccel-output-formatФормат кадров после аппаратного декодирования; важен для совместимости с фильтрами и энкодером.
output-directoryКаталог для результата, если вывод не должен создаваться рядом с исходником.
output-formatИмя muxer-формата FFmpeg, типично mp4.
output-extensionРасширение итогового файла; должно соответствовать выбранному контейнеру и ожиданиям медиаменеджера.
temp-extensionВременное расширение на период обработки, чтобы внешние сканеры не приняли незаконченный файл за готовый.
minimum-sizeМинимальный размер входного файла в МБ; удобен для отсечения samples и мелких служебных видео.
ignored-extensionsРасширения, которые пропускаются при обходе каталогов, например NFO и системные файлы.
copy-toОдин или несколько каталогов, куда копируется готовый файл после успеха.
move-toКаталог, куда переносится финальный результат.
delete-originalРазрешает удалить исходный файл после успешной обработки; для тестов лучше временно отключать.
process-same-extensionsРазрешает анализ и потенциальную обработку входа, даже если его расширение уже совпадает с выходным.
force-convertПринуждает к преобразованию в случаях, где обычная логика могла бы ограничиться копированием подходящих потоков.
post-processВключает запуск дополнительных пользовательских сценариев после основного результата.
wait-post-processЗаставляет основной процесс дождаться завершения постобработчиков вместо фонового запуска.
detailed-progressВключает более подробный вывод прогресса FFmpeg, что полезно при интерактивной диагностике.
opts-separatorОпределяет разделитель для списков пользовательских параметров FFmpeg в конфигурации.
preoptsПользовательские опции, размещаемые в команде FFmpeg до входных аргументов; применять только при понимании порядка опций.
postoptsПользовательские опции, добавляемые ближе к выходной части команды.
regex-directory-replaceРегулярное выражение для очистки/замены символов в создаваемых каталогах, когда схема перемещения это использует.

Video и Video.Sorting

Параметр Практический смысл
codecУпорядоченный список допустимых видеокодеков. Подходящий поток можно скопировать, неподходящий преобразуется первым кодеком списка.
bitrateЦелевой битрейт для кодирования, если выбранный режим использует фиксированное значение.
max-bitrateОграничение максимального видеобитрейта; помогает не создавать поток выше заданного потолка.
crfКоэффициент качества для энкодеров, которые поддерживают CRF-подобный режим. Значение зависит от конкретного кодека.
max-widthМаксимальная ширина кадра. Более широкое видео масштабируется с сохранением логики соотношения сторон.
profileТребуемый профиль кодека. Несоответствие может стать причиной перекодирования даже при совпадении семейства кодека.
max-levelМаксимальный уровень видеокодека — полезен для совместимости со старыми декодерами и телевизорами.
pix-fmtТребуемый пиксельный формат, например 8-битный формат для совместимости. Смена формата означает реальное преобразование.
priorityПравило выбора видеопотока, когда вход содержит несколько кандидатов.
codec-parametersДополнительные параметры, привязанные к конкретному видеокодеку/энкодеру.
dynamic-parametersПараметры, вычисляемые в зависимости от свойств конкретного источника.
filterFFmpeg video filter. Любой активный фильтр исключает прямой stream copy для соответствующего потока.
force-filterПринудительно применяет фильтр даже тогда, когда остальные характеристики позволяют копировать поток.
presetPreset выбранного энкодера; влияет на скорость/эффективность в пределах возможностей самого FFmpeg-энкодера.
bitrate-ratioПозволяет соотнести целевой битрейт с исходным вместо полностью фиксированного значения.
max-depthОграничивает глубину цвета; важно при преобразовании 10-битных и иных источников под более совместимый профиль.

В Video.Sorting поле sorting содержит последовательность ключей сортировки, а codecs — дополнительный порядок кодеков, если в сортировке используется критерий codec. Для обычного файла с единственным видеопотоком секцию можно не усложнять.

Audio

Параметр Практический смысл
codecДопустимые аудиокодеки; первый используется для преобразования неподходящих дорожек.
languagesЯзыки аудиодорожек, которые следует сохранять/обрабатывать. Ошибочные теги источника напрямую влияют на результат.
default-languageЯзык, который назначается потоку без языкового тега или используется как предпочтение по правилам секции.
include-original-languageСохраняет исходное языковое обозначение при обработке, когда это возможно.
first-stream-of-languageОграничивает сохранение первым потоком каждого выбранного языка, если дубликаты не нужны.
channel-bitrateБитрейт на канал для кодируемого аудио; итоговое значение масштабируется с числом каналов.
variable-bitrateПараметр качества/VBR, если выбранный аудиоэнкодер его поддерживает.
max-bitrateПотолок аудиобитрейта, чтобы ограничить необычно тяжёлые дорожки.
max-channelsМаксимальное число каналов в создаваемом потоке; при необходимости выполняется downmix.
prefer-more-channelsПри выборе между несколькими дорожками одного языка предпочитает вариант с большим числом каналов.
default-more-channelsПомогает назначить default дорожке с большей канальностью в соответствии с политикой сортировки.
filterFFmpeg audio filter — например для downmix/нормализации, если пользователь явно его задаёт.
force-filterЗапрещает обход фильтра через stream copy и всегда пропускает поток через аудиофильтр.
sample-ratesСписок допустимых частот дискретизации; иные значения могут быть преобразованы.
copy-originalСоздаёт/сохраняет оригинальную звуковую дорожку дополнительно к преобразованной, если политика секции это допускает.
ignored-dispositionsDisposition-флаги, которые не должны влиять на сохранение или сортировку.
unique-dispositionsDispositions, которые должны присутствовать только у одного аудиопотока.
custom-dispositionsПользовательские правила назначения disposition для дорожек.

Universal Audio

Параметр Практический смысл
codecКодек универсальной совместимой дорожки; по умолчанию используется AAC.
channel-bitrateБитрейт на канал для дополнительного универсального потока.
variable-bitrateVBR/quality-значение универсального аудио, если энкодер его понимает.
first-stream-onlyСоздаёт универсальную дорожку только из первого подходящего аудиопотока и не размножает её для каждого языка.
profileПрофиль аудиоэнкодера для дополнительной дорожки.
filterОтдельный фильтр, например для downmix, применяемый именно к универсальному потоку.
force-filterВсегда применяет фильтр универсальной дорожки.
move-afterСтарое управление позицией дополнительного потока; в современных схемах предпочтительнее секция сортировки.

Subtitle

Параметр Практический смысл
codecДопустимые кодеки субтитров. Для MP4 обычно первым ставят mov_text.
languagesСписок языков, которые следует сохранять или получать.
default-languageЯзык для субтитров без корректного тега либо предпочтение в правилах.
force-defaultПозволяет принудительно назначить default подходящей дорожке, если исходные флаги неудобны.
encodingОжидаемая/целевая кодировка текстовых внешних субтитров.
burn-subtitlesУказывает прожиг субтитров в видео. Это всегда приводит к перекодированию видеопотока.
burn-dispositionsОграничивает прожиг дорожками с нужными disposition-флагами, например forced.
embed-subsРазрешает помещать совместимые субтитры внутрь выходного контейнера.
embed-image-subsРазрешает работу с графическими субтитрами при встраивании, если контейнер и выбранный сценарий это допускают.
embed-only-internal-subsНе подбирает внешние файлы для встраивания и работает только с дорожками внутри источника.
filename-dispositionsИзвлекает признаки вроде forced из имени внешнего файла по заданным правилам.
ignore-embedded-subsПозволяет отказаться от внутренних субтитров и строить результат только по внешней политике.
attachment-codecПравило обработки вложений, связанных с субтитрами, например шрифтов в контейнере.
remove-bitstream-subsУдаляет проблемные bitstream-субтитры в сценариях, где они несовместимы с целевым контейнером.
ignored-dispositionsDisposition-флаги, которые следует игнорировать при решении судьбы субтитров.
unique-dispositionsСледит, чтобы определённый disposition был уникален среди итоговых субтитров.
custom-dispositionsПозволяет описать собственные правила назначения disposition.

Subtitle.Sorting задаёт порядок дорожек через sorting и список кодеков через codecs. Subtitle.CleanIt содержит enabled, config-path и tags; Subtitle.FFSubsync включает синхронизацию; Subtitle.Subliminal отвечает за загрузку субтитров, выбранные языки, forced-варианты, hearing-impaired и список провайдеров.

Metadata

Параметр Практический смысл
relocate-moovПереносит индекс MP4 в начало/оптимизирует индекс контейнера для более удобного потокового чтения.
full-path-guessПри ручном угадывании метаданных учитывает полный путь, а не только имя файла.
tagВключает запись метаданных из TMDB для контейнеров, где проект поддерживает тегирование.
tag-languageЯзык метаданных.
download-artworkОпределяет, загружать ли изображение и какой тип использовать для встраивания — например poster или thumb.
sanitize-dispositionСписок disposition-признаков, которые следует игнорировать/очистить при обработке потоков.

Sonarr и Radarr

Параметр Практический смысл
host / portАдрес и порт Sonarr. Для Radarr используется отдельная секция и свой порт.
apikeyКлюч API, через который постскрипт инициирует рескан и другие действия.
sslПереключает HTTPS для API-подключения.
webrootДобавляет webroot, если приложение опубликовано не в корне адреса.
force-renameПереименовывает до обработки/запрашивает обновление имени, если в шаблоне участвуют свойства кодека.
rescanПосле конвертации просит медиаменеджер обновить сведения о файле и расширении.
in-progress-checkЖдёт завершения текущего scan/import, чтобы не начать обработку в середине операции.
blockreprocessБлокирует повторную конвертацию тех же расширений из интеграции, сохраняя возможность нужных завершающих стадий.

Медиаменеджеры и загрузчики

Параметр Практический смысл
Sickbeard/Sickrage: host, portАдрес сервиса и API-порт конкретного экземпляра.
Sickbeard/Sickrage: apikeyКлюч для обратного вызова после обработки.
Sickbeard/Sickrage: ssl, webrootСхема подключения и путь публикации веб-интерфейса/API.
Sickbeard/Sickrage: username, passwordУчётные данные, если экземпляр защищён базовой авторизацией.
SABNZBD: convertОпределяет, должен ли SAB-постскрипт реально конвертировать файл до обратной передачи.
SABNZBD: *-categoryСоответствие категории загрузки целевому медиаменеджеру.
SABNZBD: bypass-categoryКатегории, где можно выполнить преобразование, но не передавать файл медиаменеджеру.
SABNZBD: output-directoryОтдельный каталог вывода для обработки из SABnzbd.
SABNZBD: path-mappingПеревод локального пути в путь, который понимает удалённый Sonarr/Radarr.
qBittorrent: *-labelМетки, по которым определяется, куда возвращать завершённую загрузку.
qBittorrent: action-beforeДействие с торрентом перед обработкой, допустим пауза.
qBittorrent: action-afterДействие после успеха: продолжение или удаление в соответствии с выбранной политикой.
qBittorrent: host, port, username, passwordДоступ к WebUI, если сценарию нужно управлять состоянием торрента.
Deluge: host, portДоступ к daemon; его порт не следует путать с портом WebUI.
Deluge: removeРазрешение удалить торрент после завершения заданного сценария.
uTorrent: webuiВключает использование WebUI для изменения состояния задания.
uTorrent: action-before / action-afterОстанавливает/приостанавливает до конвертации и задаёт действие после неё.
path-mappingВо всех загрузчиках решает проблему разных путей между хостом, контейнером и медиаменеджером.

Как не испортить библиотеку массовой обработкой

Самая безопасная стратегия — считать конфигурацию программой обработки данных: любое изменение должно пройти тестовый набор. В него стоит включить короткий H.264/AAC MP4, MKV с HEVC, файл с несколькими аудиодорожками разных языков, файл с forced-субтитрами и материал с графическими субтитрами. Такой набор показывает почти все ветви принятия решений без запуска по всей библиотеке.

На первом проходе запрещают удаление исходников и не разрешают автоматическому менеджеру немедленно заменить рабочую копию. После проверки медиаплеером сравнивают состав дорожек через FFprobe: кодек, язык, каналы, default/forced dispositions, длительность. Затем проверяют метаданные и то, как файл видит фактический клиент — телевизор, мобильное приложение, браузерный плеер или медиасервер. Только после этого включают delete-original или автоматическое действие removedata у торрент-клиента.

При массовом прогоне важно учитывать свободное место. Пока новый файл не завершён и оригинал не удалён, на диске существуют оба. Дополнительные copy-to умножают расход. На сетевом хранилище одновременно появляются нагрузка чтения источника, запись результата и, возможно, сканирование медиасервера. temp-extension снижает риск преждевременного индексирования, но не уменьшает I/O.

Сравнение Sickbeard MP4 Automator с аналогами

Прямые аналоги различаются не столько набором кодеков — большинство в итоге используют FFmpeg или HandBrake, — сколько моделью автоматизации. Sickbeard MP4 Automator особенно силён в скриптовой связке с Sonarr/Radarr и загрузчиками, где правила кодирования и обратные API-вызовы находятся в одном конфигурационном контуре. Другие инструменты делают акцент на веб-панели, распределённой очереди или фоновой оптимизации уже существующей библиотеки.

Программа Лучше подходит для Главное ограничение
Sickbeard MP4 AutomatorСкриптовая постобработка загрузок Sonarr/Radarr, точные правила дорожек, тегирование и возврат по API.Настройка в основном через INI и командные сценарии; требуется отдельно установленный Python/FFmpeg.
TdarrБольшие библиотеки, распределённая транскодировка по узлам, очереди и плагины обработки.Сложнее для небольшой схемы, где нужен простой постскрипт загрузчика и точная интеграция с конкретными событиями Sonarr/Radarr.
FileFlowsГрафические потоки обработки с условиями и наглядным конвейером для разных типов медиа.Более тяжёлая архитектура, если нужна только компактная скриптовая нормализация после загрузки.
UnmanicПостоянная фоновая оптимизация медиабиблиотеки и плагинная обработка существующих файлов.Меньше ориентирован на классическую схему загрузчик → Sonarr/Radarr → скрипт обратного вызова.
HandBrakeРучная и очередная перекодировка с понятным выбором кодеков и готовыми профилями.Не управляет сам по себе полной цепочкой меток загрузчика, API Sonarr/Radarr, тегированием TMDB и возвратом путей.
FFmpegМаксимально точные разовые команды, собственные скрипты и нестандартные фильтры.Вся логика анализа, выбора дорожек, метаданных, повторного сканирования и интеграций остаётся на пользователе.

Если нужна именно автоматическая обработка только что загруженных сериалов и фильмов с возвратом в Sonarr/Radarr, Sickbeard MP4 Automator остаётся очень точным инструментом: он уже знает категории, метки, API и типовые стадии медиапайплайна. Для большой существующей библиотеки, распределённой по нескольким машинам, Tdarr обычно удобнее. Если важна визуальная схема с условиями, FileFlows проще читать и сопровождать. Unmanic хорош как фоновый оптимизатор. HandBrake и чистый FFmpeg лучше, когда автоматизацию вокруг кодирования пользователь строит сам.

Типовые рабочие сценарии

Сценарий Как строится цепочка Критическая проверка
Новый эпизод из SABnzbdSAB завершает загрузку; категория указывает Sonarr; SMA конвертирует до передачи или Sonarr импортирует и вызывает postSonarr — в зависимости от выбранной схемы.Не смешивать две схемы; категория и API Sonarr должны совпадать.
Фильм из qBittorrentКатегория/метка radarr запускает qBittorrentPostProcess; скрипт анализирует файл, при необходимости ставит торрент на паузу и после обработки уведомляет Radarr.Точный порядок аргументов, WebUI, path mapping и политика seed/удаления.
Пакет старых MKVmanual.py получает каталог, auto-режим обходит файлы, подходящие H.264 может копировать, а контейнер и аудио приводить к заданным правилам.На первом проходе nodelete/nomove и отдельный выход.
HEVC оставить, звук нормализоватьHEVC присутствует в списке допустимых Video.codec, поэтому видеопоток копируется; Audio/Universal Audio создают совместимый звук.Не включать видеофильтр, burn-in или force-convert, иначе видео будет перекодировано.
Только исправить метаданные MP4Используется bypass-convert либо файл уже полностью соответствует потоковым правилам; тегирование получает точный TMDB ID.Контейнер должен поддерживать выбранное тегирование; лучше передать явный ID.
Forced-субтитры для клиентаСохраняются/конвертируются forced-дорожки; прожиг включается только если клиент не воспроизводит их отдельно.Burn-in меняет видео и увеличивает время обработки.
Docker с разными mount-путямиСкрипт получает путь загрузчика и переводит его через path-mapping в путь Sonarr/Radarr.Оба контейнера должны реально видеть один и тот же файл под сопоставленными путями.
Аппаратное кодирование Intel/NVIDIA/VAAPIСначала проверяется энкодер FFmpeg, затем hwdevice/hwaccel; профиль SMA лишь формирует команду.Драйвер, сборка FFmpeg, фильтры и pixel format должны быть совместимы.
Несколько языков аудиоAudio.languages сохраняет нужные языки; sorting определяет первый поток; Universal Audio создаётся из выбранного источника.Следить за und и ошибочными языковыми тегами релизов.
Медиасервер сканирует папку во время конвертацииtemp-extension скрывает незавершённый файл до финального переименования.Сканер должен игнорировать временное расширение; права на финальное переименование обязательны.
Нужно сохранить оригинал и копиюdelete-original отключён, copy-to создаёт дополнительный экземпляр результата.Проверить свободное место и отсутствие циклического повторного сканирования копии.
Имя файла содержит кодекПосле преобразования force-rename/rescan заставляет Sonarr/Radarr обновить имя и сведения.Шаблон именования медиаменеджера должен реально использовать характеристики кодека.

Частые вопросы

Почему файл с расширением MP4 иногда всё равно нужно обрабатывать?

Расширение описывает контейнер, а не гарантирует нужные видеокодек, звук, субтитры, порядок дорожек или метаданные. При process-same-extensions программа анализирует содержимое и может ограничиться копированием уже подходящих потоков.

Можно ли не перекодировать H.264?

Да. Если H.264 входит в список допустимых видеокодеков и профиль, уровень, размер, pixel format, фильтры и другие ограничения не требуют изменения, SMA формирует stream copy.

Почему включение субтитров резко замедлило работу?

Если субтитры прожигаются в изображение, прямое копирование видео невозможно: FFmpeg декодирует и заново кодирует каждый кадр. Простое встраивание mov_text — другая операция и обычно не требует перекодирования видео.

Можно ли хранить AC3 и одновременно иметь AAC?

Да. Основная секция Audio и отдельная Universal Audio позволяют сохранить/создать разные варианты. Затем сортировка определяет, какая дорожка будет первой.

Что важнее: CRF или bitrate?

Это зависит от энкодера и цели. SMA передаёт соответствующие параметры FFmpeg, но не делает их универсальными между x264, x265, NVENC, QSV и другими энкодерами.

Нужен ли Sonarr, чтобы запускать программу?

Нет. manual.py обрабатывает файл или каталог независимо. Интеграции нужны только для автоматической цепочки с медиаменеджером.

Можно ли использовать не MP4?

Да, выходной формат и расширение задаются отдельно. Однако нужно самостоятельно обеспечить совместимость выбранного контейнера с аудио, субтитрами, тегами и клиентами.

Почему Radarr test проходит, а реальный импорт нет?

Тест проверяет запуск сценария, но реальная задача добавляет конкретный путь, права, API-вызовы и состояние импорта. В контейнерах особенно часто проблема в path mapping.

Почему qBittorrent запускает другой Python?

Файловая ассоциация .py может указывать на иной интерпретатор. Полный путь к python.exe в BAT-команде делает среду однозначной.

Что делать с файлами без language tag?

Настроить default-language и проверить политику языков на нескольких источниках. Нельзя предполагать, что und всегда означает английский или русский.

Можно ли ограничить CPU параметром threads?

Значение передаётся FFmpeg как параметр потоков. Реальная загрузка зависит от конкретного кодека, фильтров и внутренней многопоточности FFmpeg; это не жёсткий системный лимит CPU.

Когда нужен rescan?

Когда после импорта файл изменился: поменялись расширение, кодеки, размер или имя. Rescan помогает Sonarr/Radarr синхронизировать базу с итоговым файлом.

Что делает bypass-категория?

Позволяет обработать загрузку по правилам конвертации, но не передавать её дальше конкретному медиаменеджеру. Это полезно для самостоятельных задач загрузчика.

Как безопасно менять профиль?

Создать альтернативную конфигурацию, запустить manual.py с --config на небольшом тестовом наборе, отключить удаление/перемещение и сравнить потоки через FFprobe.

Почему одинаковый профиль даёт разный объём файлов?

Содержимое кадров, исходный шум, кодек, режим качества и количество дорожек различаются. SMA не обещает фиксированный коэффициент сжатия; оно применяет выбранные правила FFmpeg.

Можно ли получить только стерео?

Да, через ограничения числа каналов и выбранный аудиокодек/фильтр. Но если нужен и многоканальный оригинал, разумнее оставить его и создать отдельную универсальную стереодорожку.

Как избежать повторного вызова через Sonarr и загрузчик?

Выбрать один основной момент конвертации. При Completed Download Handling обычно работает postSonarr/postRadarr; при конвертации до импорта — постскрипт загрузчика и обратный API-вызов.

Нужен ли полный путь к FFmpeg?

Только если бинарник не гарантированно доступен через PATH для пользователя/службы, запускающей SMA. Для служб и контейнеров полный путь обычно надёжнее.

Почему metadata-tagging иногда не работает на MKV?

Тегирование проекта ориентировано на контейнеры, где поддержан используемый механизм метаданных; официальная конфигурация прямо связывает TMDB-tagging с MP4. Для иных контейнеров не следует ожидать тот же набор внутренних тегов.

Можно ли сначала только посмотреть, какую команду построит SMA?

Без запуска FFmpeg отдельного универсального dry-run в ручном сценарии нет, но подробный лог показывает анализ и фактическую команду. Для безопасности применяют короткий тестовый файл и nodelete/nomove.

Как Sickbeard MP4 Automator принимает решение по каждому потоку

Сильная сторона SMA — не сама команда FFmpeg, а предварительный выбор. Для входного контейнера FFprobe возвращает набор streams. Для каждого видеопотока программа сопоставляет codec, профиль, уровень, ширину, глубину, pixel format и ограничения конфигурации. Для аудио дополнительно учитываются язык, каналы, битрейт и disposition; для субтитров — тип текста или изображения, язык, forced/default и политика встраивания. Итоговая команда получается из этих отдельных решений, поэтому её удобнее читать по блокам -map, а не как одну длинную строку.

Если поток удовлетворяет требованиям и над ним не нужно выполнять фильтр, оптимальный путь — копирование. Оно сохраняет исходное качество и обычно занимает значительно меньше времени, чем перекодирование. Но совпадение названия кодека само по себе недостаточно: ограничение ширины, уровня, пиксельного формата или принудительный фильтр переводят видео в режим кодирования. Аналогично аудиодорожка AAC может быть перекодирована повторно, если требуется изменить число каналов, применить фильтр или частоту дискретизации.

После выбора отдельных потоков программа формирует их порядок. Здесь важно различать какие дорожки оставить и какая будет первой. Языковый фильтр может исключить ненужные потоки, а sorting уже расставляет оставшиеся. Неправильная сортировка не портит кодирование, но меняет пользовательский опыт: телевизор может автоматически включить комментарии режиссёра, стерео вместо 5.1 или дорожку без нужного языка. Поэтому результат проверяют не только на наличие потоков, но и на индекс каждого из них.

Универсальная аудиодорожка добавляет ещё один слой. Это не запасной вариант только для файлов без подходящего звука, а отдельный поток, который SMA может создать ради совместимости клиентов. Источник для него выбирается по аудиополитике, затем выполняются downmix и кодирование заданным кодеком. Если универсальная дорожка должна быть первой, это закрепляется сортировкой; если приоритет у многоканального оригинала, совместимый AAC размещают после него.

Субтитры требуют особой проверки из-за несовместимости контейнеров. Текстовый SRT можно превратить в mov_text для MP4, но PGS нельзя просто переименовать в текст. Графический поток либо остаётся во внешнем/совместимом контейнере, либо требует другой стратегии, а burn-in делает его частью изображения и вынуждает перекодировать видео. Поэтому при переходе из MKV в MP4 полезно заранее определить, что важнее: максимальная совместимость MP4 или сохранение всех оригинальных графических дорожек.

После медиапотоков применяются метаданные, операции с контейнером и файловой системой. Это объясняет типичный случай, когда FFmpeg успешно завершился, но весь job всё равно считается проблемным: не удалось записать теги, переместить файл, установить права или уведомить медиаменеджер. Лог анализируют по стадиям, а не по единственному сообщению conversion complete.

Disposition-флаги и почему они важны

Disposition — это служебные признаки потока: default, forced, commentary, hearing impaired и другие. Проигрыватель использует их вместе с языком и порядком дорожек, поэтому формально правильный набор потоков может вести себя неудобно, если флаги перенесены без очистки. SMA умеет учитывать dispositions при сортировке, игнорировать выбранные признаки, обеспечивать уникальность некоторых флагов и назначать их по пользовательским правилам.

Признак или ситуация Что означает на практике Как учитывать в SMA
defaultДорожка, которую контейнер предлагает как основную. Клиенты часто выбирают её автоматически.Не оставлять несколько противоречивых default без необходимости; использовать сортировку и unique-dispositions.
forced у субтитровОбычно содержит только обязательные переводы фрагментов на другом языке.Можно предпочесть forced при сортировке или прожигать только такие дорожки через burn-dispositions.
commentaryАудиокомментарии создателей, не предназначенные как основной звук.Сортировать после обычных дорожек и не делать default, если комментарии должны включаться вручную.
hearing_impairedСубтитры с дополнительными звуковыми описаниями.При загрузке через Subliminal можно отдельно решать, нужны ли hearing-impaired варианты.
visual_impairedАудиодорожка с аудиодескрипцией.Не ставить первой без явного намерения; при языковой фильтрации учитывать её disposition.
dub / originalНекоторые файлы используют дополнительные признаки оригинальной или дубляжной дорожки.Сначала смотреть реальные теги через FFprobe; затем строить sorting вместо предположения по индексу.
Два default-аВстречается после неаккуратного remux и сбивает выбор клиента.sanitize/unique-dispositions помогают нормализовать флаги, а sorting определяет фактический первый поток.
Нет default вообщеНекоторые клиенты выбирают просто первый поток, другие применяют собственные языковые правила.Сделать порядок дорожек осмысленным и при необходимости назначить default по конфигурации.
forced только в имени SRTВнешний файл может называться movie.eng.forced.srt, но не иметь контейнерного disposition.filename-dispositions позволяет извлечь признак из имени до встраивания.
und вместо языкаПоток технически присутствует, но язык не задан.Использовать default-language осторожно и тестировать источники, чтобы случайно не переименовать реальный другой язык.
Несколько дорожек одного языкаНапример AAC stereo, AC3 5.1 и commentary на английском.Комбинировать first-stream-of-language, prefer-more-channels и sorting в зависимости от цели.
Графические субтитры forcedPGS с forced-флагом может быть важен, но MP4 не всегда подходит для его сохранения как отдельного потока.Выбрать внешний файл, другой контейнер или осознанный burn-in; не ожидать автоматического превращения изображения в текст.

Remux и transcode: как понять, что делает программа

В разговоре о медиаконвертации часто смешивают три операции. Remux меняет контейнер, но копирует содержимое потоков; transcode заново кодирует хотя бы один поток; tagging меняет метаданные без изменения аудио и видео. SMA способен объединить все три в одном задании. Например, MKV с H.264 может стать MP4 без перекодирования видео, но с преобразованием DTS в AAC, конвертацией SRT в mov_text и добавлением TMDB-тегов. Такой job технически не является полным перекодированием, хотя выходной файл существенно изменён.

Понять фактический режим проще всего по параметрам FFmpeg. -c:v copy означает копирование видеопотока; -c:a aac — кодирование соответствующей аудиодорожки; -c:s mov_text — преобразование субтитров. Наличие -vf, scale, subtitle filter или аппаратного фильтра почти всегда указывает на реальную обработку видео. Это объективнее, чем судить по расширению входного и выходного файла.

Remux особенно выгоден, когда цель — единый контейнер для клиентских устройств, а H.264/HEVC уже подходит. Он выполняется быстро и не вносит потерь качества видео. Но контейнер накладывает собственные ограничения. Если важны PGS, вложенные шрифты ASS или специфические потоки, MKV может быть практичнее MP4. Поэтому выходной формат выбирают исходя из клиентской совместимости и содержимого библиотеки, а не только из привычного расширения.

Transcode оправдан, когда клиент не поддерживает исходный кодек, поток превышает допустимый уровень/разрешение, нужно изменить pixel format, применить фильтр, уменьшить канальность аудио или прожечь субтитры. В таких случаях SMA автоматизирует одинаковую политику для всех файлов. Качество результата всё равно определяется выбранным FFmpeg-энкодером и его параметрами; программа не скрывает фундаментальный компромисс между скоростью, размером и потерями.

Tagging можно выполнить и без изменения медиапотоков. Это удобно для уже совместимых MP4: программа сопоставляет файл с фильмом или эпизодом и записывает поддерживаемые контейнером метаданные. Если распознавание сомнительное, явный TMDB/TVDB/IMDb ID надёжнее автоматического guess. Для массового тегирования особенно важно отключить ненужные move/delete действия, чтобы задача оставалась именно метаданной, а не перестройкой библиотеки.

Диагностическая матрица: симптом → что проверять

Симптом Вероятная зона Проверка и решение
manual.py не видит FFmpegConverter / окружениеПроверить полный путь к ffmpeg и ffprobe от того же пользователя. Служба может иметь другой PATH, чем интерактивная консоль.
FFprobe возвращает ошибку на одном файлеВходной контейнерЗапустить ffprobe отдельно. Если контейнер повреждён, сначала проверить/ремультиплексировать источник; SMA не исправляет произвольную порчу.
Видео неожиданно перекодируетсяVideo / SubtitleПроверить filter, force-filter, max-width, profile, pix-fmt, burn-subtitles и force-convert. Любое из условий может отменить stream copy.
Видео копируется, хотя ожидалось HEVC-кодированиеVideo.codecЕсли исходный кодек указан как допустимый, он считается подходящим. Удалить его из разрешённого списка или добавить реальное ограничение, требующее преобразования.
AAC создаётся дваждыAudio / Universal AudioПроверить copy-original, Universal Audio и повторный запуск одного файла. Дополнительный совместимый поток не должен дублироваться из-за двойной интеграции.
Исчез язык оригиналаAudio.languagesПроверить языковой тег ffprobe и default-language. Источник с und может быть исключён слишком строгим списком.
Первая дорожка — commentaryAudio.SortingДобавить disposition в критерии и убедиться, что commentary не получает default. Порядок входного MKV не следует считать правильным.
Стерео стало default вместо 5.1Audio.Sorting / Universal AudioОпределить целевую логику: совместимость или качество. Изменить sorting и настройки default-more-channels.
MP4 потерял PGSSubtitle / контейнерPGS графический и не эквивалентен mov_text. Выбрать внешний вариант, burn-in или контейнер, поддерживающий нужную дорожку.
После burn-in файл обрабатывается очень долгоSubtitle / VideoЭто нормальное следствие перекодирования видео. Проверить, действительно ли прожиг нужен, или клиент умеет отдельные субтитры.
Скачанные субтитры не находятсяSubtitle.SubliminalПроверить распознавание названия, языки, провайдеры и сетевую доступность. Сначала убедиться, что основная конвертация работает без этой стадии.
Sonarr Test успешен, job падаетИнтеграция / путиТест не моделирует реальный файл. Сравнить путь в логе с mount Sonarr, проверить path-mapping, права и API-ключ.
Radarr не обновляет расширениеRadarr.rescanВключить rescan для схемы после импорта и проверить, что API пользователя способен запустить обновление.
Имя содержит старый кодекforce-renameЕсли naming шаблон зависит от codec, требуется force-rename/rescan после преобразования.
SAB конвертирует, но не передаёт файлSABNZBD / APIПроверить категорию, секцию нужного медиаменеджера, path-mapping и строки ошибки API после завершения FFmpeg.
NZBGet не показывает скриптУстановка NZBGetСкрипт должен лежать в каталоге scripts и иметь нужные права; после копирования требуется перезапуск/перезагрузка списка сценариев.
qBittorrent вообще не запускает .pyqBittorrent / WindowsИспользовать BAT-обёртку с полным путём к python.exe и qBittorrentPostProcess.py; передать все ожидаемые параметры в нужном порядке.
qBittorrent конвертирует, но лог пустНесколько установок / configПроверить абсолютные пути к скрипту и config. Такое поведение указывает, что запускается не тот экземпляр или другая Python-среда.
Deluge подключается не к тому портуDelugeИспользовать daemon port, а не WebUI port. Проверить auth-файл и права пользователя.
Файл создан, но Plex не читаетПрава / контейнерПроверить chmod/uid/gid и возможность медиасервера открыть файл. Затем проверить клиентскую поддержку кодеков, а не только расширение.
Медиасервер видит недописанный файлtemp-extensionЗадать временное расширение и убедиться, что сканер его игнорирует до финального rename.
Удалился исходник раньше проверкиdelete-originalДля новых профилей выключить удаление и использовать --nodelete. Автоматическое удаление включать только после тестового набора.
Не хватает места во время обработкиФайловая политикаУчитывать одновременное существование исходника, temp-файла и copy-to копий. Освободить место или изменить стратегию вывода.
Аппаратный энкодер не найденFFmpeg buildПроверить ffmpeg -encoders. SMA не может использовать кодек, которого нет в сборке или который недоступен драйверу.
Hardware decode ломает фильтрhwaccel / filtersОтключить аппаратный декодер, оставив hardware encode; затем вернуть hwaccel и настроить формат кадров/transfer между устройством и CPU.
Threads не ограничивает CPU как ожидаетсяFFmpegПараметр передаётся FFmpeg, но реальная многопоточность зависит от энкодера и фильтров. Для жёсткого лимита нужны средства ОС/контейнера.
Обработка запускается дваждыАрхитектура цепочкиПроверить, не включены ли одновременно postSonarr/postRadarr и постскрипт загрузчика для одного события. Выбрать единственную точку конвертации.
same extension снова меняетсяprocess-same-extensionsОценить, нужен ли повторный анализ контейнера с тем же расширением. При готовой библиотеке параметр можно отключить или применить blockreprocess.
Теги относятся к другому фильмуMetadata guessПередать точный TMDB/IMDb ID и при необходимости год. Не полагаться на имя релиза при неоднозначных названиях.
После перемещения пропали sidecar-субтитрыИнтеграция / rescanПроверить, как Sonarr/Radarr обрабатывает внешние субтитры, и не удаляет ли их rescan. Проект отдельно учитывает риск при rescanning.
Ошибка Permission denied после конвертацииPermissionsПроверить владельца целевого каталога, права на rename/delete и пользователя службы. chmod файла не исправит отсутствие права записи в каталог.
Путь содержит символы и ломает командуShell / quotingИспользовать корректное quoting и полные аргументы. На Windows BAT и на Unix shell-обёртка должны передавать путь единым аргументом.
Пакетный запуск зацепил sampleminimum-size / ignoredПоднять minimum-size и при необходимости добавить расширения/каталоги в исключения до массового прохода.
Пользовательские postopts ломают muxFFmpeg optionsУбрать пользовательские опции, убедиться, что базовая команда работает, затем вернуть их по одной и проверить позицию в команде.
После обновления конфигурации используется старое значениеconfig pathПроверить, какой autoProcess.ini загрузил конкретный сценарий. При нескольких установках и --config легко редактировать не тот файл.

Контрольный список перед полностью автоматическим режимом

Полная автоматизация означает, что решение о перекодировании, удалении и перемещении будет приниматься без подтверждения. До этого момента профиль должен пройти технический и организационный контроль. Технический — это воспроизведение разных типов файлов и проверка потоков. Организационный — понимание, какая программа владеет каждым этапом: загрузчик завершает задачу, SMA создаёт медиарезультат, Sonarr/Radarr импортирует и переименовывает, медиасервер сканирует библиотеку. Если две программы считают себя владельцем одного шага, появляются гонки и повторная обработка.

  • На тестовом наборе есть как минимум один файл с видео, которое должно копироваться, и один файл, которое должно перекодироваться.
  • Проверены stereo, многоканальный звук, несколько языков и источник с неопределённым языковым тегом.
  • Проверены внутренние текстовые субтитры, внешние SRT и хотя бы один случай forced; отдельно решена судьба графических субтитров.
  • В логе видно ожидаемую команду FFmpeg и понятны все -map для видео, аудио и субтитров.
  • Итоговый файл открывается тем клиентом, ради которого выполняется нормализация, а не только тестовым плеером на компьютере.
  • Проверены права на создание, rename, move и delete от пользователя реальной службы, а не от администратора в интерактивной консоли.
  • В Docker/виртуальной среде проверено соответствие путей между загрузчиком, SMA и Sonarr/Radarr; path-mapping подтверждён реальным импортом.
  • Решено, где выполняется конвертация: до импорта через загрузчик либо после импорта через postSonarr/postRadarr.
  • Для qBittorrent/uTorrent/Deluge определено, можно ли ставить задание на паузу и что делать с ним после обработки с учётом правил раздачи.
  • Временно отключены delete-original и destructive action-after; они включаются только после успешного цикла от загрузки до библиотеки.
  • Оценён запас места минимум под исходник и временный результат одновременно, а при copy-to — ещё и под дополнительные копии.
  • Метаданные проверены на фильме с неоднозначным названием и на эпизоде сериала; известно, как передать явный ID при ошибке guess.
  • Если включено аппаратное ускорение, отдельно протестирован software encode того же файла и сохранена рабочая конфигурация для отката.
  • Пользовательские preopts/postopts задокументированы и не дублируют автоматически формируемые параметры.
  • Логи сохраняются в известном месте и не содержат опубликованных API-ключей/токенов при передаче для диагностики.

После этого можно включать destructive-операции по одной. Сначала автоматическое перемещение, затем удаление оригинала, и только после устойчивого периода — удаление данных из торрент-клиента, если оно вообще соответствует политике хранения. Такой порядок не замедляет настройку: он уменьшает стоимость ошибки, которая в автоматическом медиапайплайне легко затрагивает сотни файлов.

Что программа не делает и где проходит граница ответственности

Sickbeard MP4 Automator не является медиаменеджером: он не ищет новые релизы вместо Sonarr/Radarr и не организует каталог сериалов по собственной базе. Он получает уже существующий файл или событие интеграции и обрабатывает медиа. Если Sonarr неверно сопоставил релиз с эпизодом, SMA не должен использоваться как средство исправления библиотеки; сначала устраняется ошибка в медиаменеджере.

Программа также не заменяет FFmpeg. Поддержка AV1, HEVC, NVENC, QSV, VAAPI, конкретных профилей AAC или фильтров зависит от сборки FFmpeg. Если команда, созданная SMA, содержит недоступный энкодер, правильное решение — установить подходящую сборку или изменить профиль, а не искать скрытый кодек внутри Python-проекта.

Автоматическое угадывание метаданных не гарантирует идеальное совпадение для произвольных имён. Guess работает как удобная эвристика, но фильмы с одинаковыми названиями, special-эпизоды, аниме с нестандартной нумерацией и плохо названные релизы требуют явных идентификаторов или контекста из Sonarr/Radarr. В критичной библиотеке автоматическую конвертацию отделяют от предположения, что любой filename однозначен.

Наконец, SMA не может сделать несовместимый контейнер универсальным только за счёт расширения. MP4 хорошо поддерживается многими устройствами, но конкретные клиенты имеют ограничения по аудиокодекам, профилям H.264/HEVC, уровню, HDR, субтитрам и числу каналов. Именно поэтому конфигурация строится от реальных клиентов. Универсального профиля для всех телевизоров, мобильных приложений и браузеров не существует.

Проверка готового файла через FFprobe

После изменения профиля полезно проверять результат тем же инструментом, на который опирается SMA. FFprobe показывает не субъективное впечатление от воспроизведения, а фактическую структуру: контейнер, видеокодек, профиль и pixel format, список аудиодорожек, число каналов, языковые теги, disposition-флаги и субтитры. Это особенно важно, когда плеер автоматически скрывает часть потоков или сам выбирает дорожку и создаёт впечатление, что остальные отсутствуют.

Для видео сравнивают codec name, разрешение, profile, level и pix_fmt с ограничениями Video. Если ожидался stream copy, характеристики должны совпадать с источником; если ожидалось преобразование, результат должен соответствовать целевому энкодеру. Для аудио проверяют не только codec, но и channels, language и индекс дорожки. Наличие AAC ещё не доказывает, что универсальный поток создан правильно: он может оказаться не первым, иметь неверный язык или получить default вместо основной 5.1-дорожки.

У субтитров смотрят codec и dispositions. В MP4 текстовая дорожка обычно будет обозначена как mov_text. Если forced-флаг ожидался, он должен присутствовать после обработки; если использовался filename-dispositions, проверяется, что признак из имени внешнего файла действительно перенесён. Отсутствие графических PGS в MP4 не следует автоматически считать ошибкой — сначала сверяют выбранную политику embed/burn и возможности контейнера.

Такую проверку удобно превратить в небольшой регрессионный набор: сохранить несколько типичных входных файлов и после каждого серьёзного изменения autoProcess.ini прогонять их повторно. Тогда можно заметить не только явный сбой FFmpeg, но и незаметное изменение поведения — другой default-аудиопоток, исчезнувший forced, лишний повторный AAC или неожиданное перекодирование H.264. Для автоматического медиапайплайна это надёжнее, чем оценивать конфигурацию только по факту появления файла в библиотеке.

Итог

Sickbeard MP4 Automator лучше всего раскрывается как слой правил между загрузкой и медиатекой. Он не заменяет FFmpeg, Sonarr или Radarr, а связывает их: анализирует входные потоки, решает, что можно скопировать, что нужно преобразовать, как расположить аудио и субтитры, какие метаданные добавить и как вернуть готовый файл в автоматическую цепочку. За счёт этого один autoProcess.ini способен последовательно нормализовать разные источники без ручного выбора параметров для каждого файла.

Надёжная эксплуатация начинается не с максимального числа опций, а с маленького проверенного профиля. Сначала контейнер, видео, основной звук и один тестовый файл; затем универсальное аудио, языки и субтитры; после этого метаданные и, в последнюю очередь, интеграции загрузчиков и дополнительные постскрипты. Такой порядок делает логи понятными и позволяет точно связать каждое изменение конфигурации с реальным результатом.