MCEBuddy 帮助,通过 Plex 后处理脚本手动调用

大家好,

我遇到了一个难题:由于 Plex 不再将 DVR 录制保存为 MKV,当文件名从 .TS 转换为 .MKV 后,Plex 创建的元数据就丢失了。如果我让 MCEBuddy 重命名文件,由于它们使用的数据源不同,结果常常出错(比如对 @Midnight 会误用第 4 季而不是 2017 季,不过这个问题也不会持续太久,唉)。

如果通过 Plex 的「后处理脚本」调用 MCEBuddy,我可以保留元数据。这部分已经搞定,但又带来新问题:目前我根据录制文件所在的目录(TV 还是 TV-Commercials)来决定是否跑 comskip。MCEBuddy 有一个很方便的功能,可按「监控路径」限制特定配置文件的执行;但通过脚本调用时,我似乎没有这个能力。

有没有办法在后处理脚本里,只让部分录制文件跑 Comskip?

作为参考,Plex DVR 提供如下信息:

脚本放在任意目录即可。
DVR 后处理只会调用你的脚本,并传入一个变量:录制视频在 .grab 处理文件夹中的完整路径和文件名。该变量(文件名)可在脚本里用标准输入变量名引用:
Windows:%1
Linux/Unix/Android/Apple:$1

因此,脚本里需要完整路径和文件名时,可直接用标准变量。也可以用标准修饰符提取各部分:
Windows:
%~d1 = 仅盘符
%~p1 = 仅路径
%~n1 = 仅文件名(不含路径和扩展名)
在 Windows 中,%1 不要加引号,但部分引用需加引号,因为路径/文件名里含空格。

谢谢!Will。

是否有機會讓 MCEBuddy 在透過 CLI/指令碼呼叫時,尊重 Plex 提供的輸入路徑,以決定使用哪個設定檔?

你能再說明一下現在發生了什麼事,以及你希望看到什麼結果嗎?

在我的舊設定中,我會把轉檔任務(不論是否移除廣告)限定在特定路徑(有廣告的錄影、無廣告的錄影)。這對我來說運作得相當好。

當 Plex DVR 從 .mkv 改回 .ts 時,除非使用後製腳本選項,否則 Plex 對該錄影的 metadata 就會遺失。

如果我使用後製腳本選項,除了解析檔名之外,似乎沒有任何邏輯可以讓我選擇要用哪一個轉檔任務,這非常脆弱,而且每有新錄影就得更新。

我希望的是,是否有替代方案或 MCEBuddy 的更新,讓我能傳入一個檔案位置(例如 ../TV-Commercials),這樣當我從 CLI/腳本呼叫時,它就能根據該位置自動選擇正確的轉檔任務。

希望這說得夠清楚——如果是我漏了什麼,而這功能其實已經存在,請告訴我。謝謝!Will。

让我确认一下是否理解正确。您希望 MCEBuddy 通过 CLI 传入的文件名来决定运行哪个转换任务(并且该转换任务附带特定脚本)?

如果这样,我认为可以按以下方式实现:

  • 首先设置您的(多个)转换任务
  • 为每个转换任务创建自定义配置文件,使每个配置文件都带有一个自定义脚本(如果您希望每个转换任务使用不同的后处理脚本)
  • 现在,在每个转换任务的“高级设置”中指定文件名过滤器,例如一个转换任务只处理文件名包含 CSI* 的文件,另一个只处理 House*
  • 最后,在每个转换任务的“专家设置”→“选择监控位置”选项中,指定它们仅在通过 CLI 传入文件时才运行

我本希望避免这种做法,因为很容易在添加新剧集或电影时忘记更新过滤器。

正如我所说,目前的方法(不使用 Plex 的后处理脚本)是根据文件保存的位置来分配转换任务。由于我在设置录制时就已知道这一点,因此整个过程都是自动的。不幸的是,Plex 又回到了录制 .TS 格式,导致我失去了元数据。

如果这是唯一的办法,我会设法让它运作——我只是希望能有替代方案。一如既往地感谢!

如果您有任何建議,或是想要新增可以傳遞給腳本的變數,請告訴我們,我們會考慮加入。

我认为可能的解决方案有两个方面:

  1. 后处理脚本不希望存在受监控的目录,但这些目录却是限制某个编码任务所必需的。如果可以在设置目录的同时,让 MCEBuddy 永远不检查它们是否有新内容,那就可以解决问题。

2)在转换任务的专家设置中,手动/CLI 任务似乎与文件夹限制是分开的。是否可以在选择 CLI 时增加一个文件位置掩码选项(即仅当文件位于 ../tv-commercials/ 时才执行此 CLI 任务)?如果有这个功能,就不需要额外的变量了。

谢谢!Will。

讓我試著回應上述幾點

  1. 已經取得位置卻不檢查,可能會造成極大混淆,這是相當根本的問題。我們可以考慮的選項是停用 Monitor location,但這要怎麼解決你的問題?我看不出停用 Monitor location 如何解決你的問題?

  2. 從 GUI 的角度,我無法想像這會是什麼樣子。歡迎提供想法。然而,既然說了,實作一個變數會簡單得多,也符合整體架構。

完全同意关于第1点的意见——如果可以在CLI选择中输入路径掩码,其实就不需要它了,我越想越觉得这样是对的。第1点更多是关于能够在“转换任务 > 专家”中手动选择位置。

至于如何实现第2点,我想可以这样操作:
当用户在专家设置中选择“手动/CLI”时,下方会出现一个文本框,允许用户输入路径。“文件路径掩码”这个名称可能不太友好,也许可以叫“仅限制到这些位置”。文本框后面应该有一个加号,允许你添加另一个位置。

如果采用变量方式更简单,那大概就是设置某个变量与给定转换任务对应。以Plex为例,我会用“%~p1”——也就是文件的路径。

非常感谢你对此的关注!

關於第2點,你是指轉換任務還是監控位置?因為轉換任務已經有 CLI 選擇選項,而且也有檔案篩選器,所以我不是很清楚這裡到底缺了什麼。

至於變數,自訂腳本已經有一個會傳遞檔案路徑的變數了。

我指的是轉換任務——然後我不確定該如何執行第二點。

你的意思是,我可以把轉換任務 > 專家設定 > 選擇監控位置設成只有「手動 / CLI」,然後在檔名符合欄位裡輸入像「\\DISK8\Plex\TV-Commercials」這樣的路徑,這樣它就只會對位於 \\DISK8\Plex\TV-Commercials 的手動任務生效嗎?

謝謝!!Will。

另一条可能重要的信息是——Plex DVR 只允许一个后处理脚本,因此我试图把“该执行哪项转换任务”的逻辑放到 MCEBuddy 里。如果唯一办法是把逻辑写进脚本本身,那我就得在那儿想办法搞定。

能否通过 CLI 指定要执行哪项转换任务?

谢谢!!Will。

不,CLI 本质上是手动添加的 API 扩展。其基础架构不允许手动选择转换任务。这些关联只能通过转换任务本身使用“选择监视器位置”功能来完成。

好——所以我又回到「我不知道該怎麼做」的狀態了。

如果我想要透過 CLI 呼叫 MCEBuddy,並根據傳入檔案的所在路徑來選擇對應的轉換任務,該怎麼做?

你需要在转换任务中输入文件名过滤器。

你回到了之前的起点。跳出思维定式,你如何通过后置脚本来处理这个问题?

是啊,我覺得如果沒辦法在命令列指定要用哪個轉換工作,腳本裡就處理不了。要是能這樣,我就能在腳本裡解析路徑、傳檔名,再挑對應的轉換工作。有機會加上類似這樣的語法嗎:

MCEBuddy.UserCLI.exe --command=addfile task=“commercial removal” --action=%1

先謝了!Will。

我會與團隊討論此事,稍後回覆。

Will_Tschumy 有機會分享你在 Plex 的後製腳本嗎?我想參考一下,因為我使用 Plex 很多年了,最近買了 HDHomeRun,正在學習用 MCEBuddy 把 .ts 檔轉成 Plex 比較好播放的格式。

如果願意分享,先謝了……

嗨 Jeff,

我很樂意分享我所擁有的,不過我得先說明我目前並沒有在使用它。我現在的做法是讓 MCEBuddy 監看 PMS 錄製檔案的不同位置,並根據位置執行轉換任務。這樣我就能判斷檔案是否需要篩選廣告。

話雖如此,我測試過的後處理腳本是:

@echo off
C:\\Progra~1\\MCEBuddy2x\\MCEBuddy.UserCLI.exe --command=engine --action=start 
timeout /t 2 /nobreak > NUL
C:\\Progra~1\\MCEBuddy2x\\MCEBuddy.UserCLI.exe --command=addfile --action=%1
timeout /t 10 /nobreak > NUL
:loop
for /f "delims=" %%o in ('C:\\Progra~1\\MCEBuddy2x\\MCEBuddy.UserCLI.exe --command=jobstatus --action=%1 --quiet') do set status=%%o
if %status% == "not present" (
	Exit
) else (
	timeout /t 2 /nobreak > NUL
	goto loop
)

一旦我知道他們是否允許從命令列手動指定轉換任務,我就會修改腳本,根據 %1 變數中的路徑來選擇編碼任務。

這腳本不是我寫的——我是在某個 Reddit 討論串找到的(小心 megafilz 連結,那是廣告軟體/間諜軟體的散播管道)。

希望有幫助!Will。