Built-in rules
Video gaps
Reports ranges of the work area where no video clip is visible (black frames).
| Property | Value |
|---|---|
| Id | no-video-gaps |
| Category | Static |
| Default severity | warning |
| Scope | video-gaps (computed scope) |
Options
| Option | Type | Default | Description |
|---|---|---|---|
minFrames | number | 1 | Gaps shorter than this many frames are not reported. |
leading | boolean | true | Report a gap at the start of the work area. |
trailing | boolean | true | Report a gap at the end of the work area. |
Customize it
Turn the rule on or off in the panel's Rules settings. To change its options, severity or wording, open it with its cogwheel in the rule editor and save: your copy replaces the built-in rule until you revert it. You can also copy the file below into your rules folder as no-video-gaps.rule.json and edit it. See Change a built-in rule.
Rule file
{
"formatVersion": 1,
"id": "no-video-gaps",
"name": {
"en_US": "Video gaps",
"de_DE": "Videolücken",
"es_ES": "Huecos de vídeo",
"fr_FR": "Blancs vidéo",
"it_IT": "Vuoti video",
"ja_JP": "ビデオの欠落",
"ko_KR": "비디오 간격",
"pt_BR": "Lacunas de vídeo",
"ru_RU": "Пропуски видео",
"zh_CN": "视频间隙"
},
"description": {
"en_US": "Reports ranges of the work area where no video clip is visible (black frames).",
"de_DE": "Meldet Bereiche des Arbeitsbereichs, in denen kein Videoclip sichtbar ist (Schwarzbild).",
"es_ES": "Detecta intervalos del área de trabajo en los que no se ve ningún clip de vídeo (fotogramas en negro).",
"fr_FR": "Signale les plages de la zone de travail où aucun élément vidéo n'est visible (images noires).",
"it_IT": "Segnala gli intervalli dell'area di lavoro in cui nessuna clip video è visibile (fotogrammi neri).",
"ja_JP": "ワークエリア内で、表示されるビデオクリップがない範囲(黒いフレーム)を報告します。",
"ko_KR": "작업 영역에서 보이는 비디오 클립이 없는 구간(검은 프레임)을 보고합니다.",
"pt_BR": "Relata intervalos da área de trabalho em que nenhum clipe de vídeo é visível (quadros pretos).",
"ru_RU": "Сообщает об участках рабочей области, где не видно ни одного видеоклипа (черные кадры).",
"zh_CN": "报告工作区域中没有可见视频剪辑的范围(黑帧)。"
},
"category": "static",
"scope": "video-gaps",
"severity": "warning",
"options": {
"minFrames": {
"type": "number",
"default": 1,
"description": "Gaps shorter than this many frames are not reported."
},
"leading": {
"type": "boolean",
"default": true,
"description": "Report a gap at the start of the work area."
},
"trailing": {
"type": "boolean",
"default": true,
"description": "Report a gap at the end of the work area."
}
},
"checks": [
{
"condition": {
"all": [
{
"field": "gap.durationFrames",
"operator": "greaterThanOrEqual",
"value": {
"field": "options.minFrames"
}
},
{
"any": [
{
"field": "gap.kind",
"operator": "equals",
"value": "inner"
},
{
"all": [
{
"field": "gap.kind",
"operator": "equals",
"value": "leading"
},
{
"field": "options.leading",
"operator": "equals",
"value": true
}
]
},
{
"all": [
{
"field": "gap.kind",
"operator": "equals",
"value": "trailing"
},
{
"field": "options.trailing",
"operator": "equals",
"value": true
}
]
}
]
},
{
"all": [
{
"field": "gap.hasBefore",
"operator": "equals",
"value": true
},
{
"field": "gap.hasAfter",
"operator": "equals",
"value": true
}
]
}
]
},
"message": {
"en_US": "Black video for {labels.duration} ({gap.startTimecode} to {gap.endTimecode}) between \"{gap.beforeName}\" on {gap.beforeTrack} and \"{gap.afterName}\" on {gap.afterTrack}.",
"de_DE": "Schwarzbild für {labels.duration} ({gap.startTimecode} bis {gap.endTimecode}) zwischen „{gap.beforeName}“ auf {gap.beforeTrack} und „{gap.afterName}“ auf {gap.afterTrack}.",
"es_ES": "Vídeo en negro durante {labels.duration} (de {gap.startTimecode} a {gap.endTimecode}) entre \"{gap.beforeName}\" en {gap.beforeTrack} y \"{gap.afterName}\" en {gap.afterTrack}.",
"fr_FR": "Vidéo noire pendant {labels.duration} ({gap.startTimecode} à {gap.endTimecode}) entre « {gap.beforeName} » sur {gap.beforeTrack} et « {gap.afterName} » sur {gap.afterTrack}.",
"it_IT": "Video nero per {labels.duration} (da {gap.startTimecode} a {gap.endTimecode}) tra \"{gap.beforeName}\" su {gap.beforeTrack} e \"{gap.afterName}\" su {gap.afterTrack}.",
"ja_JP": "「{gap.beforeName}」({gap.beforeTrack})と「{gap.afterName}」({gap.afterTrack})の間に{labels.duration}の黒いビデオがあります({gap.startTimecode}~{gap.endTimecode})。",
"ko_KR": "{labels.duration} 동안 검은 화면({gap.startTimecode}~{gap.endTimecode}): {gap.beforeTrack}의 \"{gap.beforeName}\" 뒤, {gap.afterTrack}의 \"{gap.afterName}\" 앞.",
"pt_BR": "Vídeo preto por {labels.duration} ({gap.startTimecode} a {gap.endTimecode}) entre \"{gap.beforeName}\" em {gap.beforeTrack} e \"{gap.afterName}\" em {gap.afterTrack}.",
"ru_RU": "Черный экран в течение {labels.duration} (с {gap.startTimecode} по {gap.endTimecode}) между «{gap.beforeName}» на {gap.beforeTrack} и «{gap.afterName}» на {gap.afterTrack}.",
"zh_CN": "{labels.duration} 黑场视频({gap.startTimecode} 至 {gap.endTimecode}),位于 {gap.beforeTrack} 上的“{gap.beforeName}” 和 {gap.afterTrack} 上的“{gap.afterName}” 之间。"
}
},
{
"condition": {
"all": [
{
"field": "gap.durationFrames",
"operator": "greaterThanOrEqual",
"value": {
"field": "options.minFrames"
}
},
{
"any": [
{
"field": "gap.kind",
"operator": "equals",
"value": "inner"
},
{
"all": [
{
"field": "gap.kind",
"operator": "equals",
"value": "leading"
},
{
"field": "options.leading",
"operator": "equals",
"value": true
}
]
},
{
"all": [
{
"field": "gap.kind",
"operator": "equals",
"value": "trailing"
},
{
"field": "options.trailing",
"operator": "equals",
"value": true
}
]
}
]
},
{
"all": [
{
"field": "gap.hasBefore",
"operator": "equals",
"value": false
},
{
"field": "gap.hasAfter",
"operator": "equals",
"value": true
}
]
}
]
},
"message": {
"en_US": "Black video for {labels.duration} ({gap.startTimecode} to {gap.endTimecode}) before \"{gap.afterName}\" on {gap.afterTrack}.",
"de_DE": "Schwarzbild für {labels.duration} ({gap.startTimecode} bis {gap.endTimecode}) vor „{gap.afterName}“ auf {gap.afterTrack}.",
"es_ES": "Vídeo en negro durante {labels.duration} (de {gap.startTimecode} a {gap.endTimecode}) antes de \"{gap.afterName}\" en {gap.afterTrack}.",
"fr_FR": "Vidéo noire pendant {labels.duration} ({gap.startTimecode} à {gap.endTimecode}) avant « {gap.afterName} » sur {gap.afterTrack}.",
"it_IT": "Video nero per {labels.duration} (da {gap.startTimecode} a {gap.endTimecode}) prima di \"{gap.afterName}\" su {gap.afterTrack}.",
"ja_JP": "「{gap.afterName}」({gap.afterTrack})の前に{labels.duration}の黒いビデオがあります({gap.startTimecode}~{gap.endTimecode})。",
"ko_KR": "{labels.duration} 동안 검은 화면({gap.startTimecode}~{gap.endTimecode}): {gap.afterTrack}의 \"{gap.afterName}\" 앞.",
"pt_BR": "Vídeo preto por {labels.duration} ({gap.startTimecode} a {gap.endTimecode}) antes de \"{gap.afterName}\" em {gap.afterTrack}.",
"ru_RU": "Черный экран в течение {labels.duration} (с {gap.startTimecode} по {gap.endTimecode}) перед «{gap.afterName}» на {gap.afterTrack}.",
"zh_CN": "{labels.duration} 黑场视频({gap.startTimecode} 至 {gap.endTimecode}),位于 {gap.afterTrack} 上的“{gap.afterName}” 之前。"
}
},
{
"condition": {
"all": [
{
"field": "gap.durationFrames",
"operator": "greaterThanOrEqual",
"value": {
"field": "options.minFrames"
}
},
{
"any": [
{
"field": "gap.kind",
"operator": "equals",
"value": "inner"
},
{
"all": [
{
"field": "gap.kind",
"operator": "equals",
"value": "leading"
},
{
"field": "options.leading",
"operator": "equals",
"value": true
}
]
},
{
"all": [
{
"field": "gap.kind",
"operator": "equals",
"value": "trailing"
},
{
"field": "options.trailing",
"operator": "equals",
"value": true
}
]
}
]
},
{
"all": [
{
"field": "gap.hasBefore",
"operator": "equals",
"value": true
},
{
"field": "gap.hasAfter",
"operator": "equals",
"value": false
}
]
}
]
},
"message": {
"en_US": "Black video for {labels.duration} ({gap.startTimecode} to {gap.endTimecode}) after \"{gap.beforeName}\" on {gap.beforeTrack}.",
"de_DE": "Schwarzbild für {labels.duration} ({gap.startTimecode} bis {gap.endTimecode}) nach „{gap.beforeName}“ auf {gap.beforeTrack}.",
"es_ES": "Vídeo en negro durante {labels.duration} (de {gap.startTimecode} a {gap.endTimecode}) después de \"{gap.beforeName}\" en {gap.beforeTrack}.",
"fr_FR": "Vidéo noire pendant {labels.duration} ({gap.startTimecode} à {gap.endTimecode}) après « {gap.beforeName} » sur {gap.beforeTrack}.",
"it_IT": "Video nero per {labels.duration} (da {gap.startTimecode} a {gap.endTimecode}) dopo \"{gap.beforeName}\" su {gap.beforeTrack}.",
"ja_JP": "「{gap.beforeName}」({gap.beforeTrack})の後に{labels.duration}の黒いビデオがあります({gap.startTimecode}~{gap.endTimecode})。",
"ko_KR": "{labels.duration} 동안 검은 화면({gap.startTimecode}~{gap.endTimecode}): {gap.beforeTrack}의 \"{gap.beforeName}\" 뒤.",
"pt_BR": "Vídeo preto por {labels.duration} ({gap.startTimecode} a {gap.endTimecode}) depois de \"{gap.beforeName}\" em {gap.beforeTrack}.",
"ru_RU": "Черный экран в течение {labels.duration} (с {gap.startTimecode} по {gap.endTimecode}) после «{gap.beforeName}» на {gap.beforeTrack}.",
"zh_CN": "{labels.duration} 黑场视频({gap.startTimecode} 至 {gap.endTimecode}),位于 {gap.beforeTrack} 上的“{gap.beforeName}” 之后。"
}
},
{
"condition": {
"all": [
{
"field": "gap.durationFrames",
"operator": "greaterThanOrEqual",
"value": {
"field": "options.minFrames"
}
},
{
"any": [
{
"field": "gap.kind",
"operator": "equals",
"value": "inner"
},
{
"all": [
{
"field": "gap.kind",
"operator": "equals",
"value": "leading"
},
{
"field": "options.leading",
"operator": "equals",
"value": true
}
]
},
{
"all": [
{
"field": "gap.kind",
"operator": "equals",
"value": "trailing"
},
{
"field": "options.trailing",
"operator": "equals",
"value": true
}
]
}
]
},
{
"all": [
{
"field": "gap.hasBefore",
"operator": "equals",
"value": false
},
{
"field": "gap.hasAfter",
"operator": "equals",
"value": false
}
]
}
]
},
"message": {
"en_US": "Black video for {labels.duration} ({gap.startTimecode} to {gap.endTimecode}).",
"de_DE": "Schwarzbild für {labels.duration} ({gap.startTimecode} bis {gap.endTimecode}).",
"es_ES": "Vídeo en negro durante {labels.duration} (de {gap.startTimecode} a {gap.endTimecode}).",
"fr_FR": "Vidéo noire pendant {labels.duration} ({gap.startTimecode} à {gap.endTimecode}).",
"it_IT": "Video nero per {labels.duration} (da {gap.startTimecode} a {gap.endTimecode}).",
"ja_JP": "{labels.duration}の黒いビデオがあります({gap.startTimecode}~{gap.endTimecode})。",
"ko_KR": "{labels.duration} 동안 검은 화면({gap.startTimecode}~{gap.endTimecode}).",
"pt_BR": "Vídeo preto por {labels.duration} ({gap.startTimecode} a {gap.endTimecode}).",
"ru_RU": "Черный экран в течение {labels.duration} (с {gap.startTimecode} по {gap.endTimecode}).",
"zh_CN": "{labels.duration} 黑场视频({gap.startTimecode} 至 {gap.endTimecode})。"
}
}
],
"labels": {
"duration": {
"field": "gap.durationIsSeconds",
"values": {
"true": {
"en_US": "{gap.durationSeconds} s",
"de_DE": "{gap.durationSeconds} s",
"es_ES": "{gap.durationSeconds} s",
"fr_FR": "{gap.durationSeconds} s",
"it_IT": "{gap.durationSeconds} s",
"ja_JP": "{gap.durationSeconds} s",
"ko_KR": "{gap.durationSeconds} s",
"pt_BR": "{gap.durationSeconds} s",
"ru_RU": "{gap.durationSeconds} с",
"zh_CN": "{gap.durationSeconds} s"
},
"false": {
"en_US": {
"count": "gap.durationFramesRounded",
"one": "{gap.durationFramesRounded} frame",
"other": "{gap.durationFramesRounded} frames"
},
"de_DE": {
"count": "gap.durationFramesRounded",
"one": "{gap.durationFramesRounded} Frame",
"other": "{gap.durationFramesRounded} Frames"
},
"es_ES": {
"count": "gap.durationFramesRounded",
"one": "{gap.durationFramesRounded} fotograma",
"other": "{gap.durationFramesRounded} fotogramas"
},
"fr_FR": {
"count": "gap.durationFramesRounded",
"one": "{gap.durationFramesRounded} image",
"other": "{gap.durationFramesRounded} images"
},
"it_IT": {
"count": "gap.durationFramesRounded",
"one": "{gap.durationFramesRounded} fotogramma",
"other": "{gap.durationFramesRounded} fotogrammi"
},
"ja_JP": "{gap.durationFramesRounded}フレーム",
"ko_KR": "{gap.durationFramesRounded}프레임",
"pt_BR": {
"count": "gap.durationFramesRounded",
"one": "{gap.durationFramesRounded} quadro",
"other": "{gap.durationFramesRounded} quadros"
},
"ru_RU": {
"count": "gap.durationFramesRounded",
"one": "{gap.durationFramesRounded} кадр",
"few": "{gap.durationFramesRounded} кадра",
"many": "{gap.durationFramesRounded} кадров",
"other": "{gap.durationFramesRounded} кадра"
},
"zh_CN": "{gap.durationFramesRounded} 帧"
}
}
}
},
"data": {
"gapStart": "gap.start",
"gapEnd": "gap.end",
"gapTicks": "gap.durationTicks",
"kind": "gap.kind",
"gapFrames": "gap.durationFrames",
"minFrames": "options.minFrames"
}
}