PPROLint
Built-in rules

Repeated footage

Reports clips that reuse a source range already used elsewhere in the sequence.

PropertyValue
Idno-repeated-footage
CategoryGlobal consistency
Default severityinfo
Scoperepeated-footage-pairs (computed scope)

Options

OptionTypeDefaultDescription
minOverlapFramesnumber12Source overlap shorter than this many frames is not reported.
includeAudiobooleanfalseAlso compare audio clips.
kindsstring[]["media","multicam","merged"]Source kinds compared.
ignoreExtensionsstring[]see the rule fileLower-case file extensions (stills, graphics) never compared.

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-repeated-footage.rule.json and edit it. See Change a built-in rule.

Rule file

no-repeated-footage.rule.json
{
  "formatVersion": 1,
  "id": "no-repeated-footage",
  "name": {
    "en_US": "Repeated footage",
    "de_DE": "Wiederholtes Material",
    "es_ES": "Metraje repetido",
    "fr_FR": "Métrage répété",
    "it_IT": "Metraggio ripetuto",
    "ja_JP": "繰り返し使用された素材",
    "ko_KR": "반복된 푸티지",
    "pt_BR": "Gravações repetidas",
    "ru_RU": "Повторяющийся материал",
    "zh_CN": "重复素材"
  },
  "description": {
    "en_US": "Reports clips that reuse a source range already used elsewhere in the sequence.",
    "de_DE": "Meldet Clips, die einen Quellbereich verwenden, der bereits an anderer Stelle in der Sequenz verwendet wird.",
    "es_ES": "Detecta clips que reutilizan un intervalo de origen ya usado en otra parte de la secuencia.",
    "fr_FR": "Signale les éléments qui réutilisent une plage de source déjà utilisée ailleurs dans la séquence.",
    "it_IT": "Segnala le clip che riutilizzano un intervallo di sorgente già usato altrove nella sequenza.",
    "ja_JP": "シーケンス内の別の場所で使用済みのソース範囲を再使用しているクリップを報告します。",
    "ko_KR": "시퀀스의 다른 곳에서 이미 사용한 소스 범위를 다시 사용하는 클립을 보고합니다.",
    "pt_BR": "Relata clipes que reutilizam um trecho da origem já usado em outro ponto da sequência.",
    "ru_RU": "Сообщает о клипах, повторно использующих фрагмент источника, уже использованный в другом месте эпизода.",
    "zh_CN": "报告重复使用了序列中其他位置已使用过的源范围的剪辑。"
  },
  "category": "global-consistency",
  "scope": "repeated-footage-pairs",
  "severity": "info",
  "options": {
    "minOverlapFrames": {
      "type": "number",
      "default": 12,
      "description": "Source overlap shorter than this many frames is not reported."
    },
    "includeAudio": {
      "type": "boolean",
      "default": false,
      "description": "Also compare audio clips."
    },
    "kinds": {
      "type": "string[]",
      "default": [
        "media",
        "multicam",
        "merged"
      ],
      "description": "Source kinds compared."
    },
    "ignoreExtensions": {
      "type": "string[]",
      "default": [
        "png",
        "jpg",
        "jpeg",
        "gif",
        "tif",
        "tiff",
        "psd",
        "ai",
        "svg",
        "bmp",
        "webp",
        "heic"
      ],
      "description": "Lower-case file extensions (stills, graphics) never compared."
    }
  },
  "checks": [
    {
      "condition": {
        "all": [
          {
            "field": "reuse.overlapFrames",
            "operator": "greaterThanOrEqual",
            "value": {
              "field": "options.minOverlapFrames"
            }
          },
          {
            "any": [
              {
                "field": "clip.trackType",
                "operator": "equals",
                "value": "video"
              },
              {
                "field": "options.includeAudio",
                "operator": "equals",
                "value": true
              }
            ]
          },
          {
            "field": "clip.source.kind",
            "operator": "in",
            "value": {
              "field": "options.kinds"
            }
          },
          {
            "not": {
              "field": "clip.source.extension",
              "operator": "in",
              "value": {
                "field": "options.ignoreExtensions"
              }
            }
          }
        ]
      },
      "message": {
        "en_US": "Clip \"{clip.name}\" on {clip.track} reuses {labels.duration} of source already used by \"{reuse.earlierName}\" on {reuse.earlierTrack} at {reuse.earlierTimecode}.",
        "de_DE": "Clip „{clip.name}“ auf {clip.track} verwendet erneut {labels.duration} Quellmaterial, das bereits „{reuse.earlierName}“ auf {reuse.earlierTrack} bei {reuse.earlierTimecode} verwendet.",
        "es_ES": "Clip \"{clip.name}\" en {clip.track} reutiliza {labels.duration} de un origen que ya usa \"{reuse.earlierName}\" en {reuse.earlierTrack} en {reuse.earlierTimecode}.",
        "fr_FR": "Élément « {clip.name} » sur {clip.track} réutilise {labels.duration} d'une source déjà utilisée par « {reuse.earlierName} » sur {reuse.earlierTrack} à {reuse.earlierTimecode}.",
        "it_IT": "Clip \"{clip.name}\" su {clip.track} riutilizza {labels.duration} di sorgente già usata da \"{reuse.earlierName}\" su {reuse.earlierTrack} a {reuse.earlierTimecode}.",
        "ja_JP": "クリップ「{clip.name}」({clip.track})は、{reuse.earlierTimecode}の「{reuse.earlierName}」({reuse.earlierTrack})で使用済みのソースを{labels.duration}分再使用しています。",
        "ko_KR": "{clip.track}의 클립 \"{clip.name}\"이(가) {reuse.earlierTimecode}의 {reuse.earlierTrack}의 \"{reuse.earlierName}\"에서 이미 사용한 소스를 {labels.duration} 분량 다시 사용합니다.",
        "pt_BR": "Clipe \"{clip.name}\" em {clip.track} reutiliza {labels.duration} da origem já usada por \"{reuse.earlierName}\" em {reuse.earlierTrack} em {reuse.earlierTimecode}.",
        "ru_RU": "Клип «{clip.name}» на {clip.track} повторно использует {labels.duration} источника, уже использованного клипом «{reuse.earlierName}» на {reuse.earlierTrack} в позиции {reuse.earlierTimecode}.",
        "zh_CN": "{clip.track} 上的剪辑“{clip.name}” 重复使用了 {labels.duration} 的源素材,该素材已在 {reuse.earlierTimecode} 处被 {reuse.earlierTrack} 上的“{reuse.earlierName}” 使用。"
      }
    }
  ],
  "labels": {
    "duration": {
      "field": "reuse.overlapIsSeconds",
      "values": {
        "true": {
          "en_US": "{reuse.overlapSeconds} s",
          "de_DE": "{reuse.overlapSeconds} s",
          "es_ES": "{reuse.overlapSeconds} s",
          "fr_FR": "{reuse.overlapSeconds} s",
          "it_IT": "{reuse.overlapSeconds} s",
          "ja_JP": "{reuse.overlapSeconds} s",
          "ko_KR": "{reuse.overlapSeconds} s",
          "pt_BR": "{reuse.overlapSeconds} s",
          "ru_RU": "{reuse.overlapSeconds} с",
          "zh_CN": "{reuse.overlapSeconds} s"
        },
        "false": {
          "en_US": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} frame",
            "other": "{reuse.overlapFramesRounded} frames"
          },
          "de_DE": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} Frame",
            "other": "{reuse.overlapFramesRounded} Frames"
          },
          "es_ES": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} fotograma",
            "other": "{reuse.overlapFramesRounded} fotogramas"
          },
          "fr_FR": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} image",
            "other": "{reuse.overlapFramesRounded} images"
          },
          "it_IT": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} fotogramma",
            "other": "{reuse.overlapFramesRounded} fotogrammi"
          },
          "ja_JP": "{reuse.overlapFramesRounded}フレーム",
          "ko_KR": "{reuse.overlapFramesRounded}프레임",
          "pt_BR": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} quadro",
            "other": "{reuse.overlapFramesRounded} quadros"
          },
          "ru_RU": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} кадр",
            "few": "{reuse.overlapFramesRounded} кадра",
            "many": "{reuse.overlapFramesRounded} кадров",
            "other": "{reuse.overlapFramesRounded} кадра"
          },
          "zh_CN": "{reuse.overlapFramesRounded} 帧"
        }
      }
    }
  },
  "data": {
    "projectItemId": "reuse.projectItemId",
    "overlapTicks": "reuse.overlapTicks",
    "overlapFrames": "reuse.overlapFrames",
    "minOverlapFrames": "options.minOverlapFrames",
    "earlierStart": "reuse.earlierStart"
  }
}

On this page