4

我有一堆视频要转换,从 flv 到 mp4。在 Ubuntu 的 Handbrake gui 中,我已整理好所有设置。我已将其保存为名为“所有平板电脑”的预设。

我需要在不同的 ubuntu 机器上使用 HandBrakeCLI,这只是命令行。所以,我有两个可以看到的选项,但我不知道该怎么做:

1) 查看手刹 gui 使用的设置是什么,因此我可以复制它们并直接与 HandBrakeCLI 一起使用,并根据需要替换文件名。

2)保存我的“所有平板电脑”预设,以便我可以将其复制到另一台机器并在那里与 HandBrakeCLI 一起使用。

选项 2 似乎更好。当我在 HandBrakeCLI 中列出可用的预设时,它没有列出我的自定义预设,这表明 GUI 版本将它们保存到与 cli 版本不同的位置。

有什么建议么?谢谢,马克斯

4

2 回答 2

8

实际上我最终弄明白了这一点:我在 Windows 7 虚拟机中尝试了 Windows 版本的 Handbrake。在 Windows 中,GUI 版本只是 CLI 的包装,不像 Linux,它们是两个完全独立的东西。(我不确定 Mac 上的情况如何)。

我首先尝试导入我从 linux 版本中保存的预设 plist 文件,但是 windows gui 无法正确解析它,或者无论如何都不满意:它似乎将其中一个布尔值视为如果它是一个变量名(即尝试做类似的事情true = "foo"):我无法在我的 plist 文件中找出导致这种情况的原因:将它与保存在 Windows 外的一个放在一边它看起来很好。

所以,我在 Windows GUI 中从头开始。界面的样式略有不同,但我能够设置我的 linux gui 中的所有选项。然后我使用这些设置进行了转换:因为 windows gui 使用 CLI 版本,您可以在转换日志中看到发送到 cli 的命令。我复制了这个,并在 linux CLI 中尝试了相同的选项集,并且效果很好。

我从没想过我会写这个作为对任何问题的答案,但答案似乎是“使用 Windows”;-) 谁会喜欢它。

于 2014-01-14T12:15:46.923 回答
3

~/.ghb/presets 将您的 GUI 预设存储为 PropertyList(它是一种 XML 文档)。您可以从此处获取设置并将它们转换为 CLI 的命令行参数。遗憾的是,CLI 不会读取 GUI 的配置文件或任何其他配置。如果您可以使用 C(++) 编写代码,那么添加该支持可能不会太难。CLI 位于 Handbrake 源代码树中的 test/test.c 中。

这是一个快速而肮脏的 Python 代码,可以帮助您入门。Plist.py 可以在这里找到http://winappdbg.sourceforge.net/blog/PList.py

#!/usr/bin/env python                                                                                                    
import sys

import PList

def translate(item):
    args = []

    if "AudioList" in item:
        args.append(("-E", item["AudioList"][0]["AudioEncoderActual"]))

    return args

def invoke(args):
    print "HandbrakeCLI " + " ".join(" ".join(arg) for arg in args)

presets = sys.argv[1]
name = sys.argv[2]

data = PList.fromstring(open(presets).read())

for item in data:
    if isinstance(item, dict):
        if 'PresetName' in item:
            if item['PresetName'] == name:
                invoke(translate(item))

祝好运并玩得开心点。

于 2014-01-09T20:40:09.923 回答