重命名的示例

这更像是一个建议而不是问题。但我会接受任何我能得到的帮助。

我刚刚在网络中添加了一台新的迷你电脑,专门用于运行 Plex 和 MCEBuddy。与此同时,我将 MCEBuddy 从一直运行良好的 2.5 版本升级到了 2.64 版本。

在 2.5 版本中一切正常,但现在 MCEBuddy 会在电影名称末尾添加录制日期,而 Plex 并不喜欢这样。我更希望只保留电影名称,可能再加上它首次上映的年份,并保存在以电影名称命名的文件夹中。

不好: The Bourne Ultimatum - 2024-11-23 2211.mp4
好: The Bourne Ultimatum - 2007.mp4

我在迷你电脑上使用 Plex 录制电影到 DVR Recordings,录制剧集到 DVR TV Recordings。MCEBuddy 会监视这两个文件夹。MCEBuddy 处理完成后,最终目的地是我的 NAS 驱动器上的 TV 或 movie 文件夹。

我在 MCEBuddy 中搜索可用的示例,但完全把我搞糊涂了。

建议:如果有人能创建一个重命名规则的描述和示例列表页面,那将非常棒,这样像我这样的用户就可以直接复制粘贴使用。这个列表可以包括电影和电视剧的合并命名规则,也可以像我想要的那样,将它们简化为单独版本。

哎呀,我應該把年份放在括號裡才對
The Bourne Ultimatum (2007).mp4

我使用 Plex,并且通过以下方式让单个任务同时处理电影和电视剧。

\%ismovie%<Movies\%showname%%ifairdate% (%airyear%),>\%showname%,TV\showname%%ifpremieredate% (%premiereyear%),>\Season %ifseason%<%season%##,00>\%showname% - S%ifseason%<%season%##,00>E%episode%## - %episodename%>

我们来拆解一下:
%ismovie%<> 这是一个逻辑真/假判断。如果是电影,就使用逗号前的第一段;如果是假,就使用第二段。我还在其中嵌套了这类检查。
所以,如果是电影,路径将是 Movies\,然后是节目名称,如果有播出日期,就在文件夹名称中包含(播出年份),否则就不在文件夹名称中添加任何内容。然后是节目/电影的名称。
最终结果:\Movie\The Bourne Ultimatum (2007)\The Bourne Ultimatum.mp4

如果不是电影,就会被放到 TV 文件夹中。然后是名称文件夹,如果有首播日期,就将其放入 () 中。会创建一个季度的子文件夹,如果有季度,就会加上前导零的季度号,如果没有季度,就会是 00。所以,如果有季度,它会显示为 Season 01,如果没有季度,就是 Season 00。然后文件命名为 节目名称 - S,接着是和文件夹名称相同的季度号逻辑,E 集数 - 集名。
最终结果:\TV\Breaking Bad (2008)\Season 01\Breaking Bad - S01E01 - Pilot.mp4

我不会在文件名中加入年份,而是放在文件所在的文件夹名称中。Plex 可以毫无问题地根据这个进行匹配。但也可能是通过元数据进行匹配的。

但如果你只是想简单地在电影文件名中包含年份,可以使用
%showname% (%airdate%)

太棒了!我想我開始有點懂了。

我把轉檔完成的電影目的地改成 NAS 上的主要 Plex 資料夾,因為你的程式碼應該會把它辨識成電影,並自動放到 Movies 資料夾裡。

我直接複製貼上你給的內容,然後用《2 Guns》做測試。

我覺得我們好像漏了一些反斜線,因為《2 Guns》並沒有進到 Movies 資料夾,而是被存在主要 Plex 資料夾,而且沒有建立「2 Guns」資料夾,如下圖所示:

我不太確定反斜線要怎麼跟 % 搭配,所以想請你幫我看一下,幫我解決這個問題。

非常感謝,
Tim

你說得對,看起來論壇文章把反斜線濾掉了。試試這個:
\%ismovie%<Movies\%showname%%ifairdate%< (%airyear%),>\%showname%,TV\showname%%ifpremieredate%< (%premiereyear%),>\Season %ifseason%<%season%##,00>\%showname% - S%ifseason%<%season%##,00>E%episode%## - %episodename%>

另外,@Goose 已經把我原始回覆的斜線修好了。謝謝 Goose。

我刚刚转换了一部电影,效果非常好!非常感谢。我很喜欢你用同一个脚本同时处理剧集和电影的做法。
目前,我的电影和剧集是分成两个任务处理的,因为我把 Plex 的剧集物理保存在另一台电脑上,那台电脑运行着第二个 Plex 服务器,原因是存储空间不足。我已经把你的整个脚本插到我的电影转换任务里,但正在考虑像你一样只用一个任务。为此,你知道有没有办法在这个脚本里加上 IP 地址或服务器名来指定剧集的位置吗?

在重新命名字串中無法變更根目標位置,因此你仍需要兩個任務。不過你可以使用相同的重新命名字串,除非你能將其中一台伺服器的位置對應到另一台。

非常感谢你接手这个问题并和我一起推进。我会采用你的想法,尝试通过映射来解决。
你知道哪里可以找到 MCEBuddy 可用命令的链接吗?我以前做过一些编程,现在想多了解一下 MCEBuddy。

這裡是關於檔案重新命名的部分。
自訂檔案重新命名模式

我剛想到幾個方法,也許你可以只用一個任務就搞定。

1 - 使用 PostCustomCommand。(可能比第二個選項複雜一點)
你可以寫一支腳本,利用參數把檔案搬到該去的地方。
可用的變數在這裡:
執行自訂命令

舉例來說,你可以寫一支叫 moveTVShows.ps1 的 PostCustomCommand 腳本,帶一個 isMovie 參數(目前沒有 isTVShow 變數),把 %ismovie% 傳進去;如果為 false 就知道要處理,否則跳過。腳本裡再用 %destinationpath% 與 %convertedfilename% 組合出要搬的檔案與目標路徑。

設定檔範例(使用 PowerShell Core):

PostCustomCommandPath="C:\Program Files\PowerShell\7\pwsh.exe"
PostCustomCommandParameters="path to ps1 script file" -isMovie %ismovie% -DestinationPath "%destinationpath%" -DestinationFileBaseName "%convertedfilename%"
PostCustomCommandHangPeriod=0
PostCustomCommandCritical=false
PostCustomCommandUISession=false
PostCustomCommandShowWindow=false
PostCustomCommandExitCodeCheck=false

2 - 排程工作定時把電影伺服器 TV 資料夾的檔案搬到電視伺服器的 TV 資料夾,用 robocopy 很簡單。下面範例可能需要微調,我好久沒用 robocopy 了。

robocopy.exe "\\MovieServer\Plex\TV" "\\TVServer\Plex\TV" /S /MOV /V /NP

感谢分享。我之前在2.5版本里尝试用逻辑做转换,结果完全搞砸了。后来我让mcebuddy跳过PBS节目的comskip,结果连任何录制都无法转换了。要是用户手册里能多给几个逻辑用法的例子,普通用户就能更直观地看到实际效果。我喜欢可以自定义这一点,但一旦设置超过几种转换或重命名场景,事情就变得复杂,几乎得回到编程入门,画流程图,最后还得全部验证一遍。

是啊,为了把这串规则打磨好,我试了很多次,也亏得我有基础编程知识,平时工作里也经常写脚本。

我把逻辑拆得更直观些,方便看清每一步判断。第一个 \ 我删掉了,因为格式总出错。

%ismovie%
	If Is a Movie then "Movies\%showname%"
		%ifairdate%
			If airdate not blank/null then append " (%airyear%)"
			If airdate blank/null then no append or ""
		"\%showname%"
	If Not a Movie then "TV\%showname%"
		%ifpremierdate%
			If premierdate not blank/null then append " (%prmiereyear%)"
			If premierdate blank/null then no append or ""
		"\Season "
		%ifseason%
			If season not blank/null then append "%season%##"
			If season blank/null then append "00"
		"\%showname% - S"
		%ifseason%
			If season not blank/null then append "%season%##"
			If season blank/null then append "00"
		"E%episode%## - %episodename%

谢谢!这种格式确实更容易理解。和你一样,我也有一些编程经验,但没有写过脚本。既然你已经把它拆解清楚了,我可能会亲自试试,看看还能做些什么。因为我网络里有多台电脑作为 Plex 服务器(都是往年留下的),我可以把其中一台隔离出来,专门用来录制/保存到一个独立文件夹,并让隔离的 MCEBuddy 从那个驱动器做实验,而不删除原始文件。这样我就有了一个“沙盒”可以折腾。

说实话,你的原始脚本运行得非常棒!我喜欢那种干净利落的名字和带年份的文件夹。自从换成你的脚本后,Plex 找元数据找得可准了。

友情提示:Kodi 和 Plex 跟你的 PVR 机顶盒搭配真的超好用。不过我发现,要想让各种程序正确匹配元数据,得先查到 tvdb 或 imdb 的 id。我常用 tinyMediaManager 来抓演员表、重命名、检查完整性。最头疼的是首播年份,因为不少剧每 20–25 年就“重启”一次,名字却一模一样。我的做法是:所有字段都用英文句点分隔,首播年份用括号括起来,最关键的还是季和集(S00E00),实在匹配不上再加一集简短描述。其实把首播年份写进文件夹名更好,不过文件名里已经有了,文件夹就省了。

我的电视剧命名格式如下:
%showname%\\%showname%.(%premiereyear%).S%season%##E%episode%##.%episodename%

如果你有更棒的元数据抓取方案,请一定告诉我。我也希望 Kodi 是 C/S 架构,这样 Fire Stick 就不用缓存所有文件,或者只在播放时读元数据,看完就删。可惜它并不是这么设计的,所以我干脆只在真电脑上用 Kodi 时才做完整元数据。

謝了 Frank,我會在我的「Sandbox」裡用 Plex 測試這個腳本,看看效果如何。我偶爾會用 Kodi,但已經用 Plex 很多年了,還買了終身訂閱。Plex 比起早期已經進步非常多。

這看起來很有用,但我很少錄製電影——主要是 PBS 的電視節目——這就引出了這個問題,也許可以修改它來修正。

如果我錄製了一個節目,例如英國電視節目「Unforgotten」,PBS 堅持稱其為「Unforgotten on Masterpiece」,而在 TVDB 上查找時並不存在。如何使用這個或類似的腳本來移除「on Masterpiece」並只留下節目的實際名稱?

这可以通过简单的替换或我们为更正元数据而添加的新正则表达式功能来实现。

如果所有名称都相同,并且您只是想以相同的方式更正它们,请使用简单的替换和更正功能。转换任务 → 专家设置 → 更正

如果标题略有变化,请参阅此帖子,了解如何使用正则表达式匹配和替换标题的详细信息。

如果您不熟悉正则表达式,请使用顶部栏上的 AI 机器人,您可以要求它创建正则表达式以匹配您的特定标题变化,并使用正则表达式替换功能来提取正确的匹配项。