edl-schema.json 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. {
  2. "$schema": "http://json-schema.org/draft-07/schema#",
  3. "$id": "claude-mods.ffmpeg-ops.edl-schema/v1",
  4. "title": "Edit Decision List",
  5. "description": "The contract between shot selection and cut-from-edl.py. The edit is this file: reviewable (rationale written down), rerunnable (regenerate output any time), diffable (versions are git history). Times are seconds from the start of each source file.",
  6. "type": "object",
  7. "required": ["scenes"],
  8. "properties": {
  9. "title": {
  10. "type": "string",
  11. "description": "Human title for the edit"
  12. },
  13. "output": {
  14. "type": "string",
  15. "description": "Default output path, relative to this file (cut-from-edl.py -o overrides)"
  16. },
  17. "source_notes": {
  18. "type": "string",
  19. "description": "Anything the next reader needs about the footage (takes layout, which re-shoots exist, transcript locations)"
  20. },
  21. "scenes": {
  22. "type": "array",
  23. "minItems": 1,
  24. "items": {
  25. "type": "object",
  26. "required": ["clips"],
  27. "properties": {
  28. "scene": {
  29. "type": ["integer", "string"],
  30. "description": "Scene number or id"
  31. },
  32. "title": {
  33. "type": "string"
  34. },
  35. "candidate_takes": {
  36. "type": "array",
  37. "items": { "type": "string" },
  38. "description": "Takes that were considered — documentation of the search space"
  39. },
  40. "selection_rationale": {
  41. "type": "string",
  42. "description": "WHY these clips won. Write it down; this is what makes the EDL reviewable. E.g. 'C003 is the cleanest complete take: zero ums, clean ending; C017 disqualified - 5.8s dead pause mid-sentence.'"
  43. },
  44. "clips": {
  45. "type": "array",
  46. "minItems": 1,
  47. "items": {
  48. "type": "object",
  49. "required": ["file", "start", "end"],
  50. "properties": {
  51. "file": {
  52. "type": "string",
  53. "description": "Source path, relative to this EDL file (or absolute)"
  54. },
  55. "start": {
  56. "type": "number",
  57. "minimum": 0,
  58. "description": "In-point, seconds. Should sit in silence — verify with detect-segments.py --silence"
  59. },
  60. "end": {
  61. "type": "number",
  62. "exclusiveMinimum": 0,
  63. "description": "Out-point, seconds (absolute in the source, not a duration). Must be > start"
  64. },
  65. "first_words": {
  66. "type": "string",
  67. "description": "First words spoken in this range — a human-checkable anchor against the transcript"
  68. },
  69. "note": {
  70. "type": "string"
  71. }
  72. }
  73. }
  74. }
  75. }
  76. }
  77. }
  78. }
  79. }