如何使用 HandBrake CLI 查找电影名称?

如何使用 HandBrake CLI 查找电影名称?

使用 HandBrake 时,我发现它有一个非常好的功能,那就是它可以识别 DVD 上的正确电影名称(当然不是全部,但很多)。使用 HandBrake CLI 时,我找不到执行该自动发现的选项。

我是不是漏掉了什么?GUI 是如何做到的?有没有关于从命令行获取电影名称的建议?不需要 HandBrake CLI,我可以自己拼接起来。

为了澄清我的问题:我不是在追寻电影标题编号(如选项中的参数所示-t),而是在追寻电影姓名,如“两杆大烟枪”。GUI 确实识别了这一点,至少对于某些 DVD 来说是这样。这是如何实现的?

答案1

我自己在 CLI 中没有发现这个功能。根据这个:https://forum.handbrake.fr/viewtopic.php?f=6&t=15874#p74897(从我的 Handbrake 中的帮助->指南打开),Handbrake(GUI)默认选择最长的标题,因为这通常是主要功能。

如果您为 CLI 的 -t 选项提供 0,它将列出所有标题,以便您选择最长的标题。

我使用的另一种技术是上面的论坛帖子中的解决方案部分中描述的,只需在 VLC 中启动 DVD,然后检查正在播放哪个标题。

答案2

我终于在HandBrake 论坛

HandBrakeCLI --scan  -i /dev/sr0 | awk -F: '/DVD Title/ {print $3}' |python -c "import sys; print(sys.stdin.read().title().replace('_', ' '))" |head -1

因此,它的作用是过滤 libdvdnavs 日志输出。这可能不是一个稳定的解决方案,因为 lbdvdnav 的日志输出可能不被视为稳定的 api。但它适用于。

答案3

我一直在做的是使用“lsblk”,即(将 /dev/sr0 替换为 DVD 设备的设备文件):

lsblk -n -o LABEL /dev/sr0

lsblk是 util-linux 的一部分(至少在 Ubuntu 上),所以它应该已经安装好了。

如果您愿意,您可以处理标签以使其更美观(例如将其变为小写,将下划线更改为破折号):

lsblk -n -o LABEL  /dev/sr0 | tr '[:upper:]' '[:lower:]' | sed -e 's/_/-/g'

答案4

这是一段 powershell,它读取 handbrakecli 的 JSON 输出,并将其形成具有可读属性的对象。HandbrakeCLI 的 JSON 输出应该比尝试解析纯文本输出更可靠。这里的源光盘驱动器是“D:”,Linux 上的源将是 /dev/xxx:

$titleList = ((HandbrakeCLI --scan --json -i 'D:\' | Join-String) -replace '.*JSON Title Set:\s*(.+)' , '$1' | ConvertFrom-JSON).TitleList

现在您有了 $titleList 对象,您可以将名称作为属性读取:

> $titleList.Name
TRIGUN1

当然,$titleList如果您想要的唯一数据是名称,则可以跳过对变量的分配。

Powershell 核心适用于 Windows、MacOS 和许多(大多数?)主要的 Linux 发行版。

相关内容