大家好,
我遇到了一个难题:由于 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 提供的輸入路徑,以決定使用哪個設定檔?
RBoy
(RBoy)
3
你能再說明一下現在發生了什麼事,以及你希望看到什麼結果嗎?
在我的舊設定中,我會把轉檔任務(不論是否移除廣告)限定在特定路徑(有廣告的錄影、無廣告的錄影)。這對我來說運作得相當好。
當 Plex DVR 從 .mkv 改回 .ts 時,除非使用後製腳本選項,否則 Plex 對該錄影的 metadata 就會遺失。
如果我使用後製腳本選項,除了解析檔名之外,似乎沒有任何邏輯可以讓我選擇要用哪一個轉檔任務,這非常脆弱,而且每有新錄影就得更新。
我希望的是,是否有替代方案或 MCEBuddy 的更新,讓我能傳入一個檔案位置(例如 ../TV-Commercials),這樣當我從 CLI/腳本呼叫時,它就能根據該位置自動選擇正確的轉檔任務。
希望這說得夠清楚——如果是我漏了什麼,而這功能其實已經存在,請告訴我。謝謝!Will。
RBoy
(RBoy)
5
让我确认一下是否理解正确。您希望 MCEBuddy 通过 CLI 传入的文件名来决定运行哪个转换任务(并且该转换任务附带特定脚本)?
如果这样,我认为可以按以下方式实现:
- 首先设置您的(多个)转换任务
- 为每个转换任务创建自定义配置文件,使每个配置文件都带有一个自定义脚本(如果您希望每个转换任务使用不同的后处理脚本)
- 现在,在每个转换任务的“高级设置”中指定文件名过滤器,例如一个转换任务只处理文件名包含 CSI* 的文件,另一个只处理 House* 等
- 最后,在每个转换任务的“专家设置”→“选择监控位置”选项中,指定它们仅在通过 CLI 传入文件时才运行
我本希望避免这种做法,因为很容易在添加新剧集或电影时忘记更新过滤器。
正如我所说,目前的方法(不使用 Plex 的后处理脚本)是根据文件保存的位置来分配转换任务。由于我在设置录制时就已知道这一点,因此整个过程都是自动的。不幸的是,Plex 又回到了录制 .TS 格式,导致我失去了元数据。
如果这是唯一的办法,我会设法让它运作——我只是希望能有替代方案。一如既往地感谢!
RBoy
(RBoy)
7
如果您有任何建議,或是想要新增可以傳遞給腳本的變數,請告訴我們,我們會考慮加入。
我认为可能的解决方案有两个方面:
- 后处理脚本不希望存在受监控的目录,但这些目录却是限制某个编码任务所必需的。如果可以在设置目录的同时,让 MCEBuddy 永远不检查它们是否有新内容,那就可以解决问题。
2)在转换任务的专家设置中,手动/CLI 任务似乎与文件夹限制是分开的。是否可以在选择 CLI 时增加一个文件位置掩码选项(即仅当文件位于 ../tv-commercials/ 时才执行此 CLI 任务)?如果有这个功能,就不需要额外的变量了。
谢谢!Will。
完全同意关于第1点的意见——如果可以在CLI选择中输入路径掩码,其实就不需要它了,我越想越觉得这样是对的。第1点更多是关于能够在“转换任务 > 专家”中手动选择位置。
至于如何实现第2点,我想可以这样操作:
当用户在专家设置中选择“手动/CLI”时,下方会出现一个文本框,允许用户输入路径。“文件路径掩码”这个名称可能不太友好,也许可以叫“仅限制到这些位置”。文本框后面应该有一个加号,允许你添加另一个位置。
如果采用变量方式更简单,那大概就是设置某个变量与给定转换任务对应。以Plex为例,我会用“%~p1”——也就是文件的路径。
非常感谢你对此的关注!
RBoy
(RBoy)
11
關於第2點,你是指轉換任務還是監控位置?因為轉換任務已經有 CLI 選擇選項,而且也有檔案篩選器,所以我不是很清楚這裡到底缺了什麼。
至於變數,自訂腳本已經有一個會傳遞檔案路徑的變數了。
我指的是轉換任務——然後我不確定該如何執行第二點。
你的意思是,我可以把轉換任務 > 專家設定 > 選擇監控位置設成只有「手動 / CLI」,然後在檔名符合欄位裡輸入像「\\DISK8\Plex\TV-Commercials」這樣的路徑,這樣它就只會對位於 \\DISK8\Plex\TV-Commercials 的手動任務生效嗎?
謝謝!!Will。
另一条可能重要的信息是——Plex DVR 只允许一个后处理脚本,因此我试图把“该执行哪项转换任务”的逻辑放到 MCEBuddy 里。如果唯一办法是把逻辑写进脚本本身,那我就得在那儿想办法搞定。
能否通过 CLI 指定要执行哪项转换任务?
谢谢!!Will。
RBoy
(RBoy)
14
不,CLI 本质上是手动添加的 API 扩展。其基础架构不允许手动选择转换任务。这些关联只能通过转换任务本身使用“选择监视器位置”功能来完成。
好——所以我又回到「我不知道該怎麼做」的狀態了。
如果我想要透過 CLI 呼叫 MCEBuddy,並根據傳入檔案的所在路徑來選擇對應的轉換任務,該怎麼做?
RBoy
(RBoy)
16
你需要在转换任务中输入文件名过滤器。
你回到了之前的起点。跳出思维定式,你如何通过后置脚本来处理这个问题?
是啊,我覺得如果沒辦法在命令列指定要用哪個轉換工作,腳本裡就處理不了。要是能這樣,我就能在腳本裡解析路徑、傳檔名,再挑對應的轉換工作。有機會加上類似這樣的語法嗎:
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。