Lecture Recording Management

Manage university lecture recordings with scheduling, multi-camera capture, and searchable transcripts

All recipes· education-elearning· 12 minutesintermediate

Lecture Recording Management

Objective

Create a system for managing university lecture recordings, including scheduling, multi-camera capture, automatic transcription, and content searchability.

Step 1: Create Academic Terms Table

Define academic calendar.

CREATE TABLE academic_terms (
    id INTEGER PRIMARY KEY,
    term_code VARCHAR(20) NOT NULL UNIQUE,
    term_name VARCHAR(100),
    start_date DATE,
    end_date DATE,
    academic_year VARCHAR(20),
    is_current BOOLEAN DEFAULT FALSE
);

Step 2: Create Courses Table

Define course offerings.

CREATE TABLE lecture_courses (
    id INTEGER PRIMARY KEY,
    course_code VARCHAR(20) NOT NULL,
    course_name VARCHAR(200),
    department VARCHAR(100),
    term_id INTEGER NOT NULL,
    instructor_id VARCHAR(50),
    instructor_name VARCHAR(200),
    credits INTEGER,
    enrolled_students INTEGER,
    recording_enabled BOOLEAN DEFAULT TRUE,
    auto_publish BOOLEAN DEFAULT FALSE,
    retention_days INTEGER DEFAULT 365,
    FOREIGN KEY (term_id) REFERENCES academic_terms(id)
);

Step 3: Create Lecture Rooms Table

Define recording-enabled classrooms.

CREATE TABLE lecture_rooms (
    id INTEGER PRIMARY KEY,
    room_code VARCHAR(50) NOT NULL UNIQUE,
    building VARCHAR(100),
    room_number VARCHAR(20),
    capacity INTEGER,
    has_presenter_camera BOOLEAN DEFAULT TRUE,
    has_audience_camera BOOLEAN DEFAULT FALSE,
    has_document_camera BOOLEAN DEFAULT TRUE,
    has_screen_capture BOOLEAN DEFAULT TRUE,
    microphone_type VARCHAR(50),
    status VARCHAR(50) DEFAULT 'active'
);

Step 4: Create Lecture Schedule Table

Schedule recurring lectures.

CREATE TABLE lecture_schedule (
    id INTEGER PRIMARY KEY,
    course_id INTEGER NOT NULL,
    room_id INTEGER NOT NULL,
    day_of_week INTEGER,
    start_time TIME,
    end_time TIME,
    recording_preset VARCHAR(50) DEFAULT 'standard',
    is_active BOOLEAN DEFAULT TRUE,
    FOREIGN KEY (course_id) REFERENCES lecture_courses(id),
    FOREIGN KEY (room_id) REFERENCES lecture_rooms(id)
);

Step 5: Create Lecture Recordings Table

Store recorded lectures.

CREATE TABLE lecture_recordings (
    id INTEGER PRIMARY KEY,
    course_id INTEGER NOT NULL,
    room_id INTEGER NOT NULL,
    lecture_date DATE NOT NULL,
    lecture_number INTEGER,
    title VARCHAR(200),
    description TEXT,
    presenter_video VIDEO(MP4),
    screen_capture VIDEO(MP4),
    combined_video VIDEO(MP4),
    audio_only AUDIO(MP3),
    duration_seconds INTEGER,
    file_size_mb DECIMAL(10, 2),
    recording_quality VARCHAR(20),
    status VARCHAR(50) DEFAULT 'processing',
    published_at TIMESTAMP,
    view_count INTEGER DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (course_id) REFERENCES lecture_courses(id),
    FOREIGN KEY (room_id) REFERENCES lecture_rooms(id)
);

Step 6: Create Transcripts Table

Store searchable transcripts.

CREATE TABLE lecture_transcripts (
    id INTEGER PRIMARY KEY,
    recording_id INTEGER NOT NULL,
    full_transcript TEXT,
    transcript_language VARCHAR(20) DEFAULT 'en',
    word_count INTEGER,
    confidence_score DECIMAL(3, 2),
    processing_time_seconds INTEGER,
    is_reviewed BOOLEAN DEFAULT FALSE,
    reviewed_by VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (recording_id) REFERENCES lecture_recordings(id)
);

Step 7: Create Transcript Segments Table

Enable timestamp navigation.

CREATE TABLE transcript_segments (
    id INTEGER PRIMARY KEY,
    transcript_id INTEGER NOT NULL,
    segment_number INTEGER,
    start_time_seconds INTEGER,
    end_time_seconds INTEGER,
    speaker_label VARCHAR(50),
    text_content TEXT,
    confidence DECIMAL(3, 2),
    FOREIGN KEY (transcript_id) REFERENCES lecture_transcripts(id)
);

Step 8: Create Lecture Slides Table

Track presentation materials.

CREATE TABLE lecture_slides (
    id INTEGER PRIMARY KEY,
    recording_id INTEGER NOT NULL,
    slide_number INTEGER,
    timestamp_seconds INTEGER,
    slide_image IMAGE(PNG),
    slide_text TEXT,
    FOREIGN KEY (recording_id) REFERENCES lecture_recordings(id)
);

Step 9: Insert Sample Data

Add academic structure.

INSERT INTO academic_terms (id, term_code, term_name, start_date, end_date, academic_year, is_current) VALUES
    (1, 'FALL2023', 'Fall 2023', '2023-09-01', '2023-12-15', '2023-2024', FALSE),
    (2, 'SPR2024', 'Spring 2024', '2024-01-15', '2024-05-15', '2023-2024', TRUE),
    (3, 'SUM2024', 'Summer 2024', '2024-06-01', '2024-08-15', '2023-2024', FALSE);

INSERT INTO lecture_rooms (id, room_code, building, room_number, capacity, has_presenter_camera, has_audience_camera, has_document_camera, has_screen_capture, microphone_type) VALUES
    (1, 'SCI-101', 'Science Building', '101', 150, TRUE, TRUE, TRUE, TRUE, 'ceiling_array'),
    (2, 'SCI-205', 'Science Building', '205', 80, TRUE, FALSE, TRUE, TRUE, 'lapel'),
    (3, 'ENG-301', 'Engineering Hall', '301', 200, TRUE, TRUE, TRUE, TRUE, 'ceiling_array'),
    (4, 'LIB-AUDIT', 'Library', 'Auditorium', 500, TRUE, TRUE, TRUE, TRUE, 'wireless_handheld'),
    (5, 'ART-110', 'Arts Center', '110', 60, TRUE, FALSE, FALSE, TRUE, 'desk');

INSERT INTO lecture_courses (id, course_code, course_name, department, term_id, instructor_id, instructor_name, credits, enrolled_students, recording_enabled) VALUES
    (1, 'CS101', 'Introduction to Computer Science', 'Computer Science', 2, 'PROF-001', 'Dr. Alice Chen', 4, 145, TRUE),
    (2, 'MATH201', 'Calculus II', 'Mathematics', 2, 'PROF-002', 'Dr. Robert Brown', 4, 78, TRUE),
    (3, 'PHYS101', 'Physics I', 'Physics', 2, 'PROF-003', 'Dr. Emily Wilson', 4, 120, TRUE),
    (4, 'BIO150', 'Introduction to Biology', 'Biology', 2, 'PROF-004', 'Dr. Michael Lee', 3, 95, TRUE),
    (5, 'ENG102', 'English Composition', 'English', 2, 'PROF-005', 'Dr. Sarah Davis', 3, 55, TRUE);

Step 10: Insert Lecture Schedule

Add class times.

INSERT INTO lecture_schedule (id, course_id, room_id, day_of_week, start_time, end_time, recording_preset) VALUES
    (1, 1, 1, 1, '09:00:00', '10:30:00', 'standard'),
    (2, 1, 1, 3, '09:00:00', '10:30:00', 'standard'),
    (3, 2, 2, 2, '11:00:00', '12:30:00', 'document_focus'),
    (4, 2, 2, 4, '11:00:00', '12:30:00', 'document_focus'),
    (5, 3, 3, 1, '14:00:00', '15:30:00', 'standard'),
    (6, 3, 3, 3, '14:00:00', '15:30:00', 'standard'),
    (7, 4, 1, 2, '09:00:00', '10:30:00', 'standard'),
    (8, 5, 5, 1, '13:00:00', '14:30:00', 'presenter_focus');

Step 11: Insert Lecture Recordings

Add recorded lectures.

INSERT INTO lecture_recordings (id, course_id, room_id, lecture_date, lecture_number, title, description, duration_seconds, file_size_mb, recording_quality, status, published_at, view_count) VALUES
    (1, 1, 1, '2024-01-15', 1, 'Course Introduction', 'Welcome and syllabus overview', 5400, 1250.5, '1080p', 'published', '2024-01-15 12:00:00', 142),
    (2, 1, 1, '2024-01-17', 2, 'Variables and Data Types', 'Introduction to programming concepts', 5280, 1180.2, '1080p', 'published', '2024-01-17 12:00:00', 138),
    (3, 1, 1, '2024-01-22', 3, 'Control Structures', 'If statements and loops', 5350, 1210.8, '1080p', 'published', '2024-01-22 12:00:00', 135),
    (4, 2, 2, '2024-01-16', 1, 'Review of Calculus I', 'Fundamental concepts review', 5400, 1150.3, '1080p', 'published', '2024-01-16 14:00:00', 75),
    (5, 2, 2, '2024-01-18', 2, 'Integration Techniques', 'Advanced integration methods', 5320, 1125.6, '1080p', 'published', '2024-01-18 14:00:00', 72),
    (6, 3, 3, '2024-01-15', 1, 'Mechanics Introduction', 'Newton laws overview', 5400, 1320.4, '1080p', 'published', '2024-01-15 17:00:00', 118),
    (7, 3, 3, '2024-01-17', 2, 'Motion in One Dimension', 'Velocity and acceleration', 5280, 1285.2, '1080p', 'processing', NULL, 0),
    (8, 4, 1, '2024-01-16', 1, 'The Cell', 'Cell structure and function', 5400, 1180.8, '1080p', 'published', '2024-01-16 12:00:00', 92);

Step 12: Insert Transcripts

Add lecture transcripts.

INSERT INTO lecture_transcripts (id, recording_id, full_transcript, transcript_language, word_count, confidence_score, is_reviewed) VALUES
    (1, 1, 'Welcome to CS101 Introduction to Computer Science. I am Dr. Alice Chen and I will be your instructor this semester...', 'en', 4250, 0.94, TRUE),
    (2, 2, 'Today we will discuss variables and data types. A variable is a named storage location in memory...', 'en', 4180, 0.92, TRUE),
    (3, 3, 'Control structures allow us to control the flow of program execution. The if statement...', 'en', 4320, 0.93, FALSE),
    (4, 4, 'Let us begin with a review of the fundamental concepts from Calculus I. Remember that...', 'en', 4150, 0.91, TRUE),
    (5, 6, 'Physics is the study of matter and energy. Newton first laws state that an object at rest...', 'en', 4280, 0.95, TRUE);

INSERT INTO transcript_segments (id, transcript_id, segment_number, start_time_seconds, end_time_seconds, speaker_label, text_content, confidence) VALUES
    (1, 1, 1, 0, 30, 'Instructor', 'Welcome to CS101 Introduction to Computer Science.', 0.96),
    (2, 1, 2, 30, 60, 'Instructor', 'I am Dr. Alice Chen and I will be your instructor this semester.', 0.94),
    (3, 1, 3, 60, 120, 'Instructor', 'Let me start by going over the syllabus and course expectations.', 0.93),
    (4, 1, 4, 120, 180, 'Instructor', 'This course will cover programming fundamentals using Python.', 0.95),
    (5, 2, 1, 0, 45, 'Instructor', 'Today we will discuss variables and data types.', 0.94),
    (6, 2, 2, 45, 90, 'Instructor', 'A variable is a named storage location in memory.', 0.92);

Step 13: Course Recording Overview

View all recordings.

SELECT
    lc.course_code,
    lc.course_name,
    lc.instructor_name,
    COUNT(lr.id) as total_recordings,
    SUM(lr.duration_seconds) / 3600 as total_hours,
    SUM(lr.view_count) as total_views,
    COUNT(CASE WHEN lr.status = 'published' THEN 1 END) as published
FROM lecture_courses lc
LEFT JOIN lecture_recordings lr ON lc.id = lr.course_id
WHERE lc.term_id = 2
GROUP BY lc.id, lc.course_code, lc.course_name, lc.instructor_name
ORDER BY total_recordings DESC;

Step 14: Search Transcripts

Find content in lectures.

SELECT
    lc.course_code,
    lr.lecture_number,
    lr.title,
    lr.lecture_date,
    ts.start_time_seconds,
    ts.text_content
FROM transcript_segments ts
INNER JOIN lecture_transcripts lt ON ts.transcript_id = lt.id
INNER JOIN lecture_recordings lr ON lt.recording_id = lr.id
INNER JOIN lecture_courses lc ON lr.course_id = lc.id
WHERE ts.text_content LIKE '%variable%'
ORDER BY lr.lecture_date, ts.start_time_seconds;

Step 15: Room Utilization Report

Analyze recording room usage.

SELECT
    rm.room_code,
    rm.building,
    rm.capacity,
    COUNT(DISTINCT lr.id) as recordings_count,
    SUM(lr.duration_seconds) / 3600 as total_hours,
    AVG(lr.file_size_mb) as avg_file_size_mb
FROM lecture_rooms rm
LEFT JOIN lecture_recordings lr ON rm.id = lr.room_id
    AND lr.lecture_date >= '2024-01-01'
GROUP BY rm.id, rm.room_code, rm.building, rm.capacity
ORDER BY recordings_count DESC;

Cleanup (Optional)

DROP TABLE IF EXISTS lecture_slides;
DROP TABLE IF EXISTS transcript_segments;
DROP TABLE IF EXISTS lecture_transcripts;
DROP TABLE IF EXISTS lecture_recordings;
DROP TABLE IF EXISTS lecture_schedule;
DROP TABLE IF EXISTS lecture_rooms;
DROP TABLE IF EXISTS lecture_courses;
DROP TABLE IF EXISTS academic_terms;

Expected Outcomes

  • Courses organized by term
  • Recordings captured automatically
  • Transcripts searchable
  • Slides synchronized
  • Usage tracked

Key Concepts Learned

  • Academic scheduling
  • Multi-source recording
  • Transcript segmentation
  • Content searchability
  • Room utilization

Tags

sqlintermediatevideoaudioeducationlecturesuniversity

Run this on your own machine

Install SynapCores Community Edition free, paste the SQL or Cypher above into the bundled web UI, and watch it run.

Download Free CE