Tuning ShowAnalyzer

要调整 ShowAnalyzer 的广告检测设置,请从“开始”菜单启动 Showanalyzer User Interface。然后点击 Tools → Settings。接着点击 Default Profile。
注意:目前 MCEBuddy 总是使用默认配置文件,因此请确保对广告检测设置的任何修改都在默认配置文件中进行。

在这里,您可以获取 ShowAnalyzer 用于检测商业广告的所有设置列表。如果您点击某项设置,它会在底部显示说明。您可以调整各种设置,以根据您的录制内容让广告检测变得更激进或更温和。请务必为更改的每个设置启用 Override 选项,然后点击 Save Changes 按钮。

注意:如果您发现 ShowAnalyzer 没有创建 EDL 文件,请点击顶部的 Output 选项卡,将 EDL → When 更改为 Finished 并勾选 Override 选项。

How to tweak ShowAnalyzer to 100 percent commercial detection accuracy> # 如何将 ShowAnalyzer 的广告识别准确率提升至百分之百

Ben Drawbaugh

Ben Drawbaugh

更新于 2019年7月17日周三·阅读时长 16 分钟

如果你曾经使用过任何自动跳过广告的技术,你就会知道它的准确率并不是百分之百。我们还记得我们以前的 ReplayTV 4080 遥控器上有一个按钮,专门用于在它错误地将我们最喜欢的节目的某一部分识别为广告时禁用该功能。你按下它然后倒回,虽然没有错过任何内容,但有些人觉得太麻烦了,宁愿用老方法直接跳过。与 ReplayTV 不同,当你在 HTPC 上使用 ShowAnalyzer 来检测广告时,你可以将设置调整到 100% 的准确率。直到最近,这实际上还是不可能的,因为虽然 ShowAnalyzer 长期以来一直可以调整,但一套设置能修好一个节目,却会让另一个节目变得更糟。好在最新的测试版中,你可以设置规则,允许你按频道甚至按节目调整设置。因此,虽然获得百分之百的准确率没有任何自动捷径,但尝试起来其实挺有意思的。你甚至可以与其他人分享你的特定设置,你知道的,向大家展示你有多聪明。

基础知识

为了调整设置,了解自动广告检测这一极其复杂的过程的基础知识非常重要(如果你还没有安装 ShowAnalyzer,请查看我们的如何在 Windows 7 Media Center 中自动跳过广告功能)。基本上,商业电视上的每一个节目都是一系列的时间块,它们被没有音频的长时间黑屏分隔开。因此,真正的关键是找到形成这些块的分隔符。然后,你查看这些块的不同特征,试图确定哪些是广告,哪些是节目的组成部分。分隔符通常并不难检测,因为正常情况下节目期间不会出现没有声音的长时间黑屏。但有时音频不同步或出现各种其他问题,这会打乱整个过程。检测哪些块是哪些块比寻找分隔符要容易得多,因为像电视台台标——看,它们还是有好处的——通常只在节目期间出现。但台标并不是判断一个块是否为广告的唯一方法,其他明显的迹象还有音频通道的数量和块的长度。较长的块几乎总是节目的一部分,而广告块的总长度几乎总是能被 30 秒整除(30、60、90、120、150 等)。当然,如果所有这些都是绝对的定论而不是概率,我们就无需学习如何调整这些设置了。好消息是,这些例外情况通常要么按电视台划分,要么按节目划分,现在我们可以配置配置文件并在适当的时候应用正确的设置。

我们将在这里采用两种方法。首先,我们将通过为一个经常让默认设置陷入混乱的 30 分钟喜剧创建一个示例配置文件来提供一个实际示例。这是一个很好的例子,因为它包含两个易于修复的区域。第一个是从不作为广告的初始片段,另一个是节目结束时的最后一个笑话,它通常被错误地检测为最后一段广告的一部分。然后,我们将逐一介绍每个设置的作用,以便你能够突破基础知识——特别感谢 ShowAnalyzer 的作者 Jere Jones 花时间解释这些设置的含义。

示例

首先启动 ShowAnalyzer 用户界面,然后转到 Tools 并选择 Settings。默认情况下,你将看到默认的 Global Settings,接下来让我们点击左下角的 New Profile 并为你的配置文件键入一个名称。然后点击“确定”并选择

你在左侧创建的配置文件,右侧将有包含设置的两个选项卡。如果你想覆盖默认设置,请勾选复选框然后进行调整。这里有很多选项,但大部分情况下你只需调整 Analyzer 选项卡下的少数几个。我们将从最容易理解的部分开始,向下滚动到 AutoMark 部分,然后在 Beginning 下勾选 Mark As 和 Length。由于《约会规则》(Rules of Engagement)的开头似乎总是被检测为广告,我们将自动标记开头,使其始终作为节目的一部分。首先观看节目并注意第一个广告插播前有多长时间。对于这个特定的节目,它是 100 秒,所以我们将 Mark As 设置为 Show,将 Length 设置为 100 秒,现在该块将始终被标记为节目的一部分。

现在这个节目在结尾处还有一个笑话,通常会被检测为广告。因此,我们滚动到 Smoother 部分,在 Show 下勾选 Minimum 设置旁边的 Override 框。这是属于节目的任何块的最小长度。我们观看节目并确定最后一个笑话是最短的节目片段,正好是一分钟。因此,为了安全起见,我们将 Show Minimum 设置为 59 秒。

现在我们可以点击 Save Changes,然后点击左上角的 Global Settings。我们需要设置一个规则,以便在扫描这个节目时使用我们的新profile。因此,点击 Add 按钮,并在第一个下拉菜单中选择我们刚刚创建的profile。接着,在 Condition 1 下将其设置为“If file name contains Rules of Engagement”,最后勾选 Enabled 复选框并点击保存。

现在关闭配置框,并通过 File 菜单下的 Analyze File 选项选择有问题的文。让 ShowAnalyzer 重新扫描文件并确认您的 profile 是否正常工作。如果它似乎完全没有使用您的新设置,请检查与您的录制文件同名且保存在同一目录中的日志文件,搜索 rules 并确认您的规则是否按预期生效。一旦让其正常工作,您甚至可以通过编辑或添加规则来复用该 profile 以适用于其他节目。这显然是一个简单的示例,但对于某些节目非常有效。

核心细节设置

现在,对于那些真正想要深入了解核心细节设置的人,这里将对每个设置及其调整方法进行解释。不幸的是,其中某些设置需要具备一定的 SQL 知识才能访问微调所需的必要数据。ShowAnalyzer 的发展路线图包含一个名为 SchoolHouse 的配套应用,它将为您读取这些数据并简化操作,但在我们继续等待该应用发布的同时,您可以通过反复试验来摸索这些设置,或者学习 SQL。(以下按它们在 ShowAnalyzer 中出现的顺序列出,而非按实用程度排序。)

进程 (Process)

这表示 ShowAnalyzer 可以使用的处理能力大小。idle(空闲)选项意味着它只有在没有其他程序使用 CPU 时才会使用 CPU。Above Normal(高于正常)意味着它将占用所有的 CPU 时间,这不是一个好主意。Mark As Background Task(标记为后台任务)告诉 Vista 和 Windows 7,该进程应具有最低的优先级,即使在磁盘 I/O 方面也是如此。除非这是一个专门的分析器盒子,否则请不要动这些设置。

音频 (Audio)

这些基本上没什么用,但由于分割点(divider)理应是静音的,它们可以帮助检测分割点。问题在于,什么应该被视为静音差异很大。寻找空白视频帧很容易(除了噪声之外),但音频则不同。ShowAnalyzer 的做法是绘制整个节目的音频电平图。你可能会期望得到一个钟形曲线(bell curve),其中节目的绝大部分部分是中等的,有些安静,有些响亮,但实际情况是一个在低端带有一个小突起的钟形曲线。其思路就是找到这个小突起。取底部 1% 或 2% 的部分,这些很可能是静音帧,从而也就是分割点。这就是 Histogram(直方图)和 Volume(音量)的作用所在。关于音频的底线是:除非你已经尝试了其他所有方法却均告失败,否则不要去动它,不过你大概永远也不需要去动它。

Sync error(同步错误)是指空白帧和安静点之间相差多少秒,仍被认为是相关的。如果你查看 ShowAnalyzer 数据库,发现亮度(luma)降得很低,并且音频也降得很近,但在分割表(divider table)中却没有它的条目,这可能是因为它们相差半秒。如果是这样,那么你可以增加同步误差。在 SchoolHouse 中,你将能够轻松看到音频和视频线条在不同点下降的情况。

视频 (Video)

商业广告前后存在漫长的黑色分割画面,正是这一点让广告检测得以实现,但是多黑才算黑呢?这是检测分割时的主要设置,事实上 Average Maximum Luma Divider(平均最大亮度分割器)设置是广告检测的核心。默认的 70(范围是 0-256)显然是一个很好的起点,否则 ShowAnalyzer 在开箱后根本无法工作,但某些来源的黑色比其他来源更亮或更暗。基本上,ShowAnalyzer 会在节目中寻找这些黑色帧,并据此试图判断《法律与秩序》(Law & Order)中是否有新场景即将到来,或者商业广告插播是否已经开始。坏消息是,除了进行一些反复试验之外,很难确切知道该把这个参数设为什么。真正理想的情况是有一种简单的方法来查看你的录制内容的亮度(Luma)水平。如果你知道实际录制的平均值和标准差(方差),这个设置实际上会自行调整 —— variance(方差)的范围是 0 到 25。方差的一个好取值是 2,但如果有大量噪声,11 是比较安全的数值。遗憾的是,确定亮度(luma)最快的方法是在 VideoReDo 中打开录制文件,获取广告前黑色分隔符的时间码,然后使用 SQL 查看器查看历史文件,它就会告诉你亮度和偏差。所以说,这绝非易事。这是 SchoolHouse 会派上用场的另一个案例,在此之前只能靠不断试错。

分类器 (Classifier)

一旦 ShowAnalyzer 使用音频和视频设置将节目分割成多个区块,它就会使用分类器来确定哪些区块是你想要观看的节目部分,哪些是广告。这是一个加权系统,因此存在一个基准(Base)以及许多因素,包括转换(Transition)、长度(Length)和声道数(Channel Count,即音频声道)。每个区块都会根据各种因素被赋予一个评分,评分为 1 的区块是广告,而评分为 0 的区块始终是节目。

这些区块几乎永远不会真正获得完美的 0 分或 1 分,因此节目和广告通常交替出现这一事实将有助于确定哪个是哪个。因此,如果 ShowAnalyzer 难以确定某个区块是否为广告,它就会利用前一个区块的数值来进行猜测,这就是从节目到广告的转换(Transitions)。因此,节目区块评分与广告区块评分之间的差值就是转换阈值(Transition Threshold)。以默认的 0.77 节目到广告转换阈值(Show To Commercial Transition Threshold)为例。如果第三个区块的评分为 0.11,第四个区块的评分为 0.89,那么第四个区块就被标记为广告;如果评分是 0.87,则不会。如果你将节目转广告阈值设置得比广告转节目阈值更高,那么它漏掉广告的可能性就会大于跳过部分节目的可能性。

基准(Base)设置是每个区块评分的起点,通常不需要调整。就像每个影响因素一样,基准也有一个置信度(Confidence)和权重(Weight)。基本上,你从一个基准值开始,然后添加各种特征,接着它就变成了一个加权平均值。置信度在 0 到 1 的范围内,这就是我们之前讨论过的区块评分。权重则是该单一因素与其他因素相比有多重要,分值在 1 到 100 之间。

长度(Length)设置根据区块的长度来决定其成为广告的可能性。如果你有 100% 的把握认为每 30 秒的区块都是广告,那么你就会将置信度设为 1,权重设为 100。但事情并没有这么简单,因为并不是每个广告的长度都一样,而且还有那些既不属于节目也不属于广告的短区块,这取决于你的视角——伪广告的一个好例子就是《美国偶像》(American Idol)中用于发短信投票的数字。话虽如此,你可以在接下来的平滑器(Smoother)部分轻松为区块长度设置硬性的最小值和最大值。最大单体(Maximum Individual)设置是指一个区块在仍然有可能是广告的情况下所能达到的最长长度——记住,节目中大约只有 15% 的广告。匹配(Matches)设置有助于确定哪些短片段是广告或伪广告,因此一个 30 秒的片段可以被 15 整除,所以它是一个匹配项,此外默认值还有 10、20 和 25 秒。

容差(Tolerance)是指在考虑长度时方程中应包含多少妥协空间。每秒有 29.9 帧,因此没有任何帧数能正好给出 30 秒。因此,这个设置决定了所有其他长度设置所具有的容差范围。默认值为 1,你在这里要使用的最小值为 0.5。如果你将其设置得高达 5 秒,几乎所有内容都会被设为广告,所以这个参数要谨慎使用。事实上,这不是你通常需要调整的参数,但它在处理某些特定问题时确实很方便。

声道数(Channel Count)是指音频声道的数量。如果节目是 5.1 声道的,而某些区块是立体声的,那么该区块是广告的置信度为 0.99,因为节目切换音频轨道数量的几率非常低。如果节目是立体声的而某个区块是 5.1 声道的,情况也是如此。

平滑器 (Smoother)

在这里,你可以轻松设置广告的最大和最小长度以及节目区块的最小长度。默认值相当不错,因为通常没有比 60 秒更短或比 5 分钟更长的广告插播。节目设置可能会根据你观看的节目进行调整,但 29 秒是一个很好的起点。由于有了配置文件(profiles),这是一个非常实用的设置,这也是我们在上面的示例中使用它的原因。

台标检测 (Logo Detection)

我们都讨厌它们,但电视台台标是现实存在的一部分,好消息是它们有助于确定哪些区块是广告,哪些不是。但除了电视台台标之外,屏幕上的滚动字幕和其他杂物也会有所帮助或干扰。

边框(Border)设置(上、下、左、右)是寻找台标时被忽略的屏幕百分比。如果电视台喜欢在屏幕上滚动播放字幕(想想 ESPN),这就会派上用场。如果滚动字幕妨碍了台标检测,你可以调高这个数值,ShowAnalyzer 就会忽略滚动字幕并找到台标。这也有助于加快分析文件的速度,因为 ShowAnalyzer 不需要检查这些部分。有些台标只在节目播出期间出现在屏幕上,而另一些则只在广告期间出现。有时甚至根本没有任何台标。

最小和最大检查间隔(Minimum and Maximum Check Spacing)决定了 ShowAnalyzer 停止解码帧并检查台标的频率。增加最大和最小设置会加快处理过程,但会增加错过并不总是显示在屏幕上的台标几率。由于台标不会一直显示在屏幕上,丢失台标宽容时间(Missing Logo Forgiveness Time)是指台标在被认为节目没有台标之前可以消失多长时间。你希望将其保持在短于广告长度(即 15 秒)的范围内。

Missing Logo Search Time(缺失台标搜索时间)是指 ShowAnalyzer 在检测到一个台标后,继续搜索该台标的时长,超过这个时间后它就会认为之前找到的台标已经没用了。通常情况下,你将其设置为不超过一个商业广告的时长即可,这样它就不会仅仅因为在播广告就开始搜索——搜索意味着更高的处理能力和磁盘 IO 消耗,因此如果设置不当,这确实会大大延长分析节目的时间。

三种类型台标的Confidence(置信度)和Weight(权重)的分配方式与我们在长度部分的操作完全相同,这意味着它们当然会被计入区块的总得分中。因此,如果你有一个电视网,它在节目播出期间总是(我们指的是绝对总是)显示台标,而在广告期间从不显示,那么你可以调高 Show Logo(节目台标)和 No Logo(无台标)的置信度,从而获得好得多的效果。

AutoMark

这允许你手动将第一段或最后一段设置为广告或节目的一部分。比方说,如果你想让 ShowAnalyzer 永远不要将节目的前 30 秒标记为广告(这样它就不会在你有机会禁用 AutoSkip 之前飞快地跳过),你可以将 Mark As(标记为)设置为 Beginning of Show(节目开始),并将 Length(长度)设置为 30。或者,如果你通常会多录制每个节目 3 分钟,你可能想将 End as Commercial(将结尾设为广告)以及 Length(长度)设置为 180。这实际上比 Smoother(平滑器)更有用,并且也包含在上面的示例中。

结论

正如你已经发现的那样,自动检测广告并不是一件容易的事,虽然通过微调来实现 100% 的准确率并不适合胆小的人;但由于 ShowAnalyzer 中的新配置文件功能,这在技术上是完全可能的。虽然许多这些设置在 SchoolHouse 发布之前并不是非常有用,但像 AutoMark 和 Smoother 这样的其他设置在纠正特定的检测问题时却非常简单且有效。


如果你正在使用 Comskip,请参阅此主题。

感謝你提供的這個