Files
vid-repair/rulesets/core.toml
2025-12-31 22:07:42 -05:00

171 lines
4.1 KiB
TOML

[[rule]]
id = "MOOV_ATOM_NOT_FOUND"
domain = "container.mp4"
severity = "severe"
confidence = 0.9
fix_tier = "reencode"
stop_scan = true
patterns = ["(?i)moov atom not found"]
notes = "MP4/MOV metadata is missing; file may be incomplete."
[[rule]]
id = "COULD_NOT_FIND_CODEC_PARAMS"
domain = "probe"
severity = "medium"
confidence = 0.6
fix_tier = "none"
stop_scan = false
patterns = ["(?i)could not find codec parameters"]
notes = "Insufficient probe data; consider higher analyzeduration/probesize."
[[rule]]
id = "INVALID_DATA_FOUND"
domain = "decode"
severity = "high"
confidence = 0.7
fix_tier = "reencode"
stop_scan = false
patterns = ["(?i)Invalid data found when processing input"]
notes = "Decoder encountered invalid data; may indicate corruption."
[[rule]]
id = "FILE_ENDED_PREMATURELY"
domain = "decode"
severity = "high"
confidence = 0.7
fix_tier = "reencode"
stop_scan = false
patterns = ["(?i)File ended prematurely"]
notes = "File appears truncated."
[[rule]]
id = "INVALID_NAL_UNIT_SIZE"
domain = "codec.h264"
severity = "severe"
confidence = 0.85
fix_tier = "reencode"
stop_scan = true
patterns = ["(?i)Invalid NAL unit size", "(?i)Error splitting the input into NAL units"]
notes = "H.264/HEVC bitstream corruption detected."
[[rule]]
id = "MISSING_PICTURE_ACCESS_UNIT"
domain = "codec.h264"
severity = "high"
confidence = 0.7
fix_tier = "reencode"
stop_scan = false
patterns = ["(?i)missing picture in access unit"]
notes = "Missing picture in access unit; possible corruption."
[[rule]]
id = "PPS_ID_OUT_OF_RANGE"
domain = "codec.hevc"
severity = "high"
confidence = 0.75
fix_tier = "reencode"
stop_scan = false
patterns = ["(?i)PPS id out of range", "(?i)Error parsing NAL unit"]
notes = "HEVC parameter set corruption detected."
[[rule]]
id = "SEI_TRUNCATED"
domain = "codec.h264"
severity = "low"
confidence = 0.5
fix_tier = "none"
stop_scan = false
patterns = ["(?i)SEI type .* truncated"]
notes = "SEI message truncated; often benign unless paired with decode errors."
[[rule]]
id = "NON_MONOTONOUS_DTS"
domain = "timestamp"
severity = "medium"
confidence = 0.6
fix_tier = "remux"
stop_scan = false
patterns = ["(?i)Non-monotonous DTS", "(?i)non monotonically increasing dts"]
notes = "Timestamp discontinuity detected."
[[rule]]
id = "DTS_DISCONTINUITY"
domain = "timestamp"
severity = "medium"
confidence = 0.6
fix_tier = "remux"
stop_scan = false
patterns = ["(?i)DTS discontinuity"]
notes = "Timestamp discontinuity detected."
[[rule]]
id = "PES_PACKET_SIZE_MISMATCH"
domain = "transport.ts"
severity = "medium"
confidence = 0.6
fix_tier = "remux"
stop_scan = false
patterns = ["(?i)PES packet size mismatch", "(?i)Packet corrupt"]
notes = "Transport stream corruption detected."
[[rule]]
id = "CONTINUITY_COUNTER_ERROR"
domain = "transport.ts"
severity = "low"
confidence = 0.4
fix_tier = "none"
stop_scan = false
patterns = ["(?i)continuity counter error"]
notes = "Continuity counter errors can be benign in segmented streams."
[[rule]]
id = "AAC_ADTS_HEADER_ERROR"
domain = "codec.aac"
severity = "medium"
confidence = 0.7
fix_tier = "reencode"
stop_scan = false
patterns = ["(?i)Error parsing ADTS frame header", "(?i)Error decoding AAC frame header"]
notes = "AAC bitstream errors detected."
[[rule]]
id = "MP3_HEADER_MISSING"
domain = "codec.mp3"
severity = "medium"
confidence = 0.6
fix_tier = "reencode"
stop_scan = false
patterns = ["(?i)Header missing"]
notes = "MP3 framing errors detected."
[[rule]]
id = "AC3_FRAME_SYNC_ERROR"
domain = "codec.ac3"
severity = "medium"
confidence = 0.6
fix_tier = "reencode"
stop_scan = false
patterns = ["(?i)frame sync error"]
notes = "AC-3 frame sync error detected."
[[rule]]
id = "EBML_HEADER_PARSING_FAILED"
domain = "container.mkv"
severity = "high"
confidence = 0.7
fix_tier = "reencode"
stop_scan = false
patterns = ["(?i)EBML header parsing failed"]
notes = "Matroska/WebM header parsing failed; file may be truncated."
[[rule]]
id = "FASTSTART_RECOMMENDED"
domain = "container.mp4"
severity = "low"
confidence = 0.4
fix_tier = "remux"
stop_scan = false
action = "faststart"
patterns = ["(?i)faststart"]
notes = "MP4 likely has moov atom at end; faststart remux recommended."