# Subframe video edits (/docs/rules/no-subframe-video-edits)

Reports clip edges and sequence in/out points that are not on a frame boundary.



{/* Generated by scripts/generate-docs.ts. Do not edit. */}

| Property         | Value                     |
| :--------------- | :------------------------ |
| Id               | `no-subframe-video-edits` |
| Category         | Static                    |
| Default severity | warning                   |
| Scope            | `clip`                    |

## Options [#options]

| Option         | Type      | Default | Description                                                          |
| :------------- | :-------- | :------ | :------------------------------------------------------------------- |
| `includeAudio` | `boolean` | `false` | Also check audio clip edges, which Premiere lets sit between frames. |

## Customize it [#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-subframe-video-edits.rule.json` and edit it. See [Change a built-in rule](/docs/editor/saving#change-a-built-in-rule).

## Rule file [#rule-file]

```json title="no-subframe-video-edits.rule.json"
{
  "formatVersion": 1,
  "id": "no-subframe-video-edits",
  "name": {
    "en_US": "Subframe video edits",
    "de_DE": "Videoschnitte zwischen Frames",
    "es_ES": "Ediciones de vídeo entre fotogramas",
    "fr_FR": "Montages vidéo entre deux images",
    "it_IT": "Modifiche video tra fotogrammi",
    "ja_JP": "サブフレームのビデオ編集",
    "ko_KR": "서브프레임 비디오 편집",
    "pt_BR": "Edições de vídeo entre quadros",
    "ru_RU": "Монтаж между кадрами",
    "zh_CN": "子帧视频编辑"
  },
  "description": {
    "en_US": "Reports clip edges and sequence in/out points that are not on a frame boundary.",
    "de_DE": "Meldet Clipkanten und In-/Out-Points der Sequenz, die nicht auf einer Framegrenze liegen.",
    "es_ES": "Detecta bordes de clips y puntos de entrada/salida de la secuencia que no coinciden con un límite de fotograma.",
    "fr_FR": "Signale les bords d'éléments et les points d'entrée et de sortie de séquence qui ne tombent pas sur une limite d'image.",
    "it_IT": "Segnala i bordi delle clip e i punti di attacco/stacco della sequenza non allineati a un fotogramma.",
    "ja_JP": "フレームの境界上にないクリップの端とシーケンスのイン／アウトポイントを報告します。",
    "ko_KR": "프레임 경계에 맞지 않는 클립 가장자리와 시퀀스 시작/종료 지점을 보고합니다.",
    "pt_BR": "Relata bordas de clipes e pontos de entrada/saída da sequência que não estão no limite de um quadro.",
    "ru_RU": "Сообщает о границах клипов и точках входа и выхода эпизода, не совпадающих с границей кадра.",
    "zh_CN": "报告未对齐帧边界的剪辑边缘和序列入点/出点。"
  },
  "category": "static",
  "scope": "clip",
  "severity": "warning",
  "options": {
    "includeAudio": {
      "type": "boolean",
      "default": false,
      "description": "Also check audio clip edges, which Premiere lets sit between frames."
    }
  },
  "checks": [
    {
      "condition": {
        "all": [
          {
            "any": [
              {
                "field": "clip.trackType",
                "operator": "equals",
                "value": "video"
              },
              {
                "field": "options.includeAudio",
                "operator": "equals",
                "value": true
              }
            ]
          },
          {
            "field": "clip.startFrameOffset",
            "operator": "greaterThan",
            "value": 0
          },
          {
            "field": "clip.endFrameOffset",
            "operator": "greaterThan",
            "value": 0
          }
        ]
      },
      "message": {
        "en_US": "Clip \"{clip.name}\" on {clip.track} starts and ends between two frames.",
        "de_DE": "Clip „{clip.name}“ auf {clip.track} beginnt und endet zwischen zwei Frames.",
        "es_ES": "Clip \"{clip.name}\" en {clip.track} empieza y termina entre dos fotogramas.",
        "fr_FR": "Élément « {clip.name} » sur {clip.track} commence et se termine entre deux images.",
        "it_IT": "Clip \"{clip.name}\" su {clip.track} inizia e termina tra due fotogrammi.",
        "ja_JP": "クリップ「{clip.name}」（{clip.track}）の開始位置と終了位置がフレームの間にあります。",
        "ko_KR": "{clip.track}의 클립 \"{clip.name}\"이(가) 두 프레임 사이에서 시작하고 끝납니다.",
        "pt_BR": "Clipe \"{clip.name}\" em {clip.track} começa e termina entre dois quadros.",
        "ru_RU": "Клип «{clip.name}» на {clip.track} начинается и заканчивается между двумя кадрами.",
        "zh_CN": "{clip.track} 上的剪辑“{clip.name}” 的开头和结尾均位于两帧之间。"
      },
      "data": {
        "startOffsetTicks": "clip.startFrameOffset",
        "endOffsetTicks": "clip.endFrameOffset"
      }
    },
    {
      "condition": {
        "all": [
          {
            "any": [
              {
                "field": "clip.trackType",
                "operator": "equals",
                "value": "video"
              },
              {
                "field": "options.includeAudio",
                "operator": "equals",
                "value": true
              }
            ]
          },
          {
            "field": "clip.startFrameOffset",
            "operator": "greaterThan",
            "value": 0
          },
          {
            "field": "clip.endFrameOffset",
            "operator": "equals",
            "value": 0
          }
        ]
      },
      "message": {
        "en_US": "Clip \"{clip.name}\" on {clip.track} starts between two frames.",
        "de_DE": "Clip „{clip.name}“ auf {clip.track} beginnt zwischen zwei Frames.",
        "es_ES": "Clip \"{clip.name}\" en {clip.track} empieza entre dos fotogramas.",
        "fr_FR": "Élément « {clip.name} » sur {clip.track} commence entre deux images.",
        "it_IT": "Clip \"{clip.name}\" su {clip.track} inizia tra due fotogrammi.",
        "ja_JP": "クリップ「{clip.name}」（{clip.track}）の開始位置がフレームの間にあります。",
        "ko_KR": "{clip.track}의 클립 \"{clip.name}\"이(가) 두 프레임 사이에서 시작합니다.",
        "pt_BR": "Clipe \"{clip.name}\" em {clip.track} começa entre dois quadros.",
        "ru_RU": "Клип «{clip.name}» на {clip.track} начинается между двумя кадрами.",
        "zh_CN": "{clip.track} 上的剪辑“{clip.name}” 的开头位于两帧之间。"
      },
      "data": {
        "startOffsetTicks": "clip.startFrameOffset",
        "endOffsetTicks": "clip.endFrameOffset"
      }
    },
    {
      "condition": {
        "all": [
          {
            "any": [
              {
                "field": "clip.trackType",
                "operator": "equals",
                "value": "video"
              },
              {
                "field": "options.includeAudio",
                "operator": "equals",
                "value": true
              }
            ]
          },
          {
            "field": "clip.startFrameOffset",
            "operator": "equals",
            "value": 0
          },
          {
            "field": "clip.endFrameOffset",
            "operator": "greaterThan",
            "value": 0
          }
        ]
      },
      "message": {
        "en_US": "Clip \"{clip.name}\" on {clip.track} ends between two frames.",
        "de_DE": "Clip „{clip.name}“ auf {clip.track} endet zwischen zwei Frames.",
        "es_ES": "Clip \"{clip.name}\" en {clip.track} termina entre dos fotogramas.",
        "fr_FR": "Élément « {clip.name} » sur {clip.track} se termine entre deux images.",
        "it_IT": "Clip \"{clip.name}\" su {clip.track} termina tra due fotogrammi.",
        "ja_JP": "クリップ「{clip.name}」（{clip.track}）の終了位置がフレームの間にあります。",
        "ko_KR": "{clip.track}의 클립 \"{clip.name}\"이(가) 두 프레임 사이에서 끝납니다.",
        "pt_BR": "Clipe \"{clip.name}\" em {clip.track} termina entre dois quadros.",
        "ru_RU": "Клип «{clip.name}» на {clip.track} заканчивается между двумя кадрами.",
        "zh_CN": "{clip.track} 上的剪辑“{clip.name}” 的结尾位于两帧之间。"
      },
      "data": {
        "startOffsetTicks": "clip.startFrameOffset",
        "endOffsetTicks": "clip.endFrameOffset"
      }
    },
    {
      "scope": "sequence",
      "condition": {
        "field": "sequence.inPointFrameOffset",
        "operator": "greaterThan",
        "value": 0
      },
      "message": {
        "en_US": "Sequence in point is between two frames.",
        "de_DE": "Der In-Point der Sequenz liegt zwischen zwei Frames.",
        "es_ES": "El punto de entrada de la secuencia está entre dos fotogramas.",
        "fr_FR": "Le point d'entrée de la séquence se trouve entre deux images.",
        "it_IT": "Il punto di attacco della sequenza è tra due fotogrammi.",
        "ja_JP": "シーケンスのインポイントがフレームの間にあります。",
        "ko_KR": "시퀀스 시작 지점이 두 프레임 사이에 있습니다.",
        "pt_BR": "O ponto de entrada da sequência está entre dois quadros.",
        "ru_RU": "Точка входа эпизода находится между двумя кадрами.",
        "zh_CN": "序列入点位于两帧之间。"
      },
      "location": "sequence.inPoint",
      "data": {
        "point": {
          "literal": "in"
        },
        "offsetTicks": "sequence.inPointFrameOffset"
      }
    },
    {
      "scope": "sequence",
      "condition": {
        "field": "sequence.outPointFrameOffset",
        "operator": "greaterThan",
        "value": 0
      },
      "message": {
        "en_US": "Sequence out point is between two frames.",
        "de_DE": "Der Out-Point der Sequenz liegt zwischen zwei Frames.",
        "es_ES": "El punto de salida de la secuencia está entre dos fotogramas.",
        "fr_FR": "Le point de sortie de la séquence se trouve entre deux images.",
        "it_IT": "Il punto di stacco della sequenza è tra due fotogrammi.",
        "ja_JP": "シーケンスのアウトポイントがフレームの間にあります。",
        "ko_KR": "시퀀스 종료 지점이 두 프레임 사이에 있습니다.",
        "pt_BR": "O ponto de saída da sequência está entre dois quadros.",
        "ru_RU": "Точка выхода эпизода находится между двумя кадрами.",
        "zh_CN": "序列出点位于两帧之间。"
      },
      "location": "sequence.outPoint",
      "data": {
        "point": {
          "literal": "out"
        },
        "offsetTicks": "sequence.outPointFrameOffset"
      }
    }
  ],
  "matching": "all",
  "data": {
    "frameDuration": "sequence.frameDuration"
  }
}
```
