跳至主内容
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

直播电视录制后处理

录制内容后处理

Jellyfin支持对录制的直播电视节目进行后处理。该功能可用于将录制内容转码为特定格式(避免播放时实时转码)、提取字幕、去除广告等操作。

备注

后处理脚本有多种配置方式,具体实现需根据您的实际使用场景调整。

下文描述的是其中一种实现方式,可能存在其他(可能更高效的)后处理方案。

请根据实际需求调整配置。您可以通过Jellyfin论坛等渠道搜索解决方案或提问求助。日志记录至关重要!请确保脚本将运行日志输出到文件或其他存储位置,因为Jellyfin日志不会捕获stdout/stderror输出,这对故障排查非常关键。

Jellyfin控制台/DVR/录制后处理设置

当录制完成后,Jellyfin会自动执行管理员控制台DVR设置中指定的脚本,并将文件路径作为命令行参数传递。

在Jellyfin控制台的DVR/录制后处理设置中:

将"后处理应用程序"设置为调用实际处理器的Shell脚本(下文详述)。本例中应填写/path/to/run_post_process.sh

将"后处理器命令行参数"设置为"{path}"

直播电视后处理DVR设置

完成上述设置后,服务器执行后处理时将运行以下命令:

"/path/to/run_post_process.sh" "\"/path/to/LiveTV/Shows/Series/Season/Episode.ts\""

后处理执行脚本(由Jellyfin服务器直接调用)

引号解析是后处理脚本中最棘手的问题之一。因此推荐采用"执行器"方案:让Jellyfin调用一个Shell启动脚本,再由该脚本调用实际的后处理器。这样既便于在Jellyfin中配置,又能获得干净的Shell环境,方便日志查看和问题排查。

下方示例脚本包含以下特性:

  • 启用日志功能,在Jellyfin实例可访问的路径创建日志文件

  • 首个命令行参数$1会写入日志(主要用于调试),该参数即待处理节目的文件路径,格式为:/path/to/LiveTV/Shows/Series/Season/Episode.ts

  • 随后调用实际的Python后处理脚本record_post_process.py,并将文件名作为参数传递

run_post_processor.sh脚本示例

GitHub Gist链接查看run_post_processor.sh

#!/bin/sh
exec > "/path/to/logging/directory/logs/$(date +"%Y-%m-%d_%H-%M-%S")-run_post_process-sh.log" 2>&1
echo $1
/usr/local/bin/python3 /path/to/record_post_process.py "$1"

Python后处理脚本(由run_post_processor.sh调用)

本方案采用Python脚本作为核心处理器。选择Python主要因其高度灵活性,以及丰富的第三方扩展库特别适合后处理任务。您可根据需求自由定制该脚本。

示例脚本包含以下功能:

  • 启用日志功能,在Jellyfin实例可访问的路径创建日志文件

  • 检查命令行参数,若未提供参数则终止脚本

  • 将确定相关变量,包括未转码文件的完整路径、基础文件名、带扩展名的待转码文件、转码后的文件名及路径等

  • 创建并执行 FFMPEG 命令

    • 本示例使用 h264_videotoolbox 视频编解码器,音频则直接从源文件复制。请根据实际需求调整 ffmpeg 命令
  • 将未转码文件从剧集/季目录移出,存放到 Jellyfin 无法访问的 OLDFILES 文件夹(此部分也可配置为直接删除未转码文件)

示例 record_post_process.py 脚本

该脚本内容较多不便在此展示,现提供 GitHub 仓库链接。 注释部分详细说明了每个代码块的功能

record_post_process.py 的 GitHub 链接

深入探索

当基础的后处理功能正常运行后,还有更多可拓展空间!

部分思路: