@@ -22,19 +22,30 @@
22 22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
from video_processor.integrators.plan_generator import PlanGenerator
23 23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
from video_processor.models import (
24 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ActionItem,
25 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyPoint,
26 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ProcessingStats,
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ProgressCallback,
27 28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VideoManifest,
28 29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VideoMetadata,
29 30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)
30 31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
from video_processor.output_structure import create_video_output_dirs, write_video_manifest
31 32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
from video_processor.providers.manager import ProviderManager
32 33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
from video_processor.utils.export import export_all_formats
33 34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
34 35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
logger = logging.getLogger(__name__)
35 36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _notify(cb: Optional[ProgressCallback], method: str, *args, **kwargs) -> None:
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ """Safely invoke a callback method, logging any errors."""
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if cb is None:
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ try:
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ getattr(cb, method)(*args, **kwargs)
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ except Exception as e:
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ logger.warning(f"Progress callback {method} failed: {e}")
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36 47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
def process_single_video(
38 49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
input_path: str | Path,
39 50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
output_dir: str | Path,
40 51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
provider_manager: Optional[ProviderManager] = None,
@@ -43,10 +54,12 @@
43 54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sampling_rate: float = 0.5,
44 55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
change_threshold: float = 0.15,
45 56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
periodic_capture_seconds: float = 30.0,
46 57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
use_gpu: bool = False,
47 58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
title: Optional[str] = None,
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ progress_callback: Optional[ProgressCallback] = None,
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ speaker_hints: Optional[list[str]] = None,
48 61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
) -> VideoManifest:
49 62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"""
50 63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Full pipeline: frames -> audio -> transcription -> diagrams -> KG -> report -> export.
51 64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
52 65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Returns a populated VideoManifest.
@@ -76,12 +89,15 @@
76 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"Extract key points",
77 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"Generate report",
78 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"Export formats",
79 92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
]
80 93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar = tqdm(steps, desc="Pipeline", unit="step", position=0)
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ total_steps = len(steps)
81 96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
82 97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# --- Step 1: Extract frames ---
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_start", steps[0], 1, total_steps)
83 99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pm.usage.start_step("Frame extraction")
84 100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.set_description("Pipeline: extracting frames")
85 101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
existing_frames = sorted(dirs["frames"].glob("frame_*.jpg"))
86 102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
people_removed = 0
87 103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if existing_frames:
@@ -101,12 +117,14 @@
101 117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Filter out people/webcam frames before saving
102 118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
frames, people_removed = filter_people_frames(frames)
103 119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
frame_paths = save_frames(frames, dirs["frames"], "frame")
104 120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
logger.info(f"Saved {len(frames)} content frames ({people_removed} people frames filtered)")
105 121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.update(1)
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_complete", steps[0], 1, total_steps)
106 123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
107 124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# --- Step 2: Extract audio ---
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_start", steps[1], 2, total_steps)
108 126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pm.usage.start_step("Audio extraction")
109 127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.set_description("Pipeline: extracting audio")
110 128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
audio_path = dirs["root"] / "audio" / f"{video_name}.wav"
111 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
audio_extractor = AudioExtractor()
112 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if audio_path.exists():
@@ -114,12 +132,14 @@
114 132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else:
115 133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
logger.info("Extracting audio...")
116 134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
audio_path = audio_extractor.extract_audio(input_path, output_path=audio_path)
117 135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
audio_props = audio_extractor.get_audio_properties(audio_path)
118 136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.update(1)
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_complete", steps[1], 2, total_steps)
119 138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
120 139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# --- Step 3: Transcribe ---
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_start", steps[2], 3, total_steps)
121 141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pm.usage.start_step("Transcription")
122 142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.set_description("Pipeline: transcribing audio")
123 143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
transcript_json = dirs["transcript"] / "transcript.json"
124 144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if transcript_json.exists():
125 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
logger.info("Resuming: found transcript on disk, skipping transcription")
@@ -126,11 +146,11 @@
126 146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
transcript_data = json.loads(transcript_json.read_text())
127 147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
transcript_text = transcript_data.get("text", "")
128 148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
segments = transcript_data.get("segments", [])
129 149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else:
130 150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
logger.info("Transcribing audio...")
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- transcription = pm.transcribe_audio(audio_path)
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ transcription = pm.transcribe_audio(audio_path, speaker_hints=speaker_hints)
132 152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
transcript_text = transcription.get("text", "")
133 153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
segments = transcription.get("segments", [])
134 154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
135 155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Save transcript files
136 156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
transcript_data = {
@@ -156,12 +176,14 @@
156 176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
srt_lines.append(f"{_format_srt_time(start)} --> {_format_srt_time(end)}")
157 177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
srt_lines.append(seg.get("text", "").strip())
158 178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
srt_lines.append("")
159 179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
transcript_srt.write_text("\n".join(srt_lines))
160 180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.update(1)
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_complete", steps[2], 3, total_steps)
161 182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
162 183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# --- Step 4: Diagram extraction ---
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_start", steps[3], 4, total_steps)
163 185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pm.usage.start_step("Visual analysis")
164 186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.set_description("Pipeline: analyzing visuals")
165 187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diagrams = []
166 188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
screen_captures = []
167 189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
existing_diagrams = (
@@ -188,12 +210,14 @@
188 210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
subset = [frame_paths[int(i * step)] for i in range(max_frames)]
189 211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diagrams, screen_captures = analyzer.process_frames(
190 212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
subset, diagrams_dir=dirs["diagrams"], captures_dir=dirs["captures"]
191 213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)
192 214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.update(1)
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_complete", steps[3], 4, total_steps)
193 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
194 217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# --- Step 5: Knowledge graph ---
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_start", steps[4], 5, total_steps)
195 219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pm.usage.start_step("Knowledge graph")
196 220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.set_description("Pipeline: building knowledge graph")
197 221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
kg_db_path = dirs["results"] / "knowledge_graph.db"
198 222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
kg_json_path = dirs["results"] / "knowledge_graph.json"
199 223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Generate a stable source ID from the input path
@@ -222,12 +246,14 @@
222 246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diagram_dicts = [d.model_dump() for d in diagrams]
223 247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
kg.process_diagrams(diagram_dicts)
224 248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Export JSON copy alongside the SQLite db
225 249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
kg.save(kg_json_path)
226 250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.update(1)
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_complete", steps[4], 5, total_steps)
227 252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
228 253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# --- Step 6: Extract key points & action items ---
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_start", steps[5], 6, total_steps)
229 255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pm.usage.start_step("Key points & actions")
230 256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.set_description("Pipeline: extracting key points")
231 257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
kp_path = dirs["results"] / "key_points.json"
232 258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ai_path = dirs["results"] / "action_items.json"
233 259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if kp_path.exists() and ai_path.exists():
@@ -239,12 +265,14 @@
239 265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
action_items = _extract_action_items(pm, transcript_text)
240 266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
241 267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
kp_path.write_text(json.dumps([kp.model_dump() for kp in key_points], indent=2))
242 268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ai_path.write_text(json.dumps([ai.model_dump() for ai in action_items], indent=2))
243 269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.update(1)
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_complete", steps[5], 6, total_steps)
244 271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
245 272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# --- Step 7: Generate markdown report ---
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_start", steps[6], 7, total_steps)
246 274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pm.usage.start_step("Report generation")
247 275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.set_description("Pipeline: generating report")
248 276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
md_path = dirs["results"] / "analysis.md"
249 277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if md_path.exists():
250 278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
logger.info("Resuming: found analysis report on disk, skipping generation")
@@ -258,10 +286,11 @@
258 286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
knowledge_graph=kg.to_dict(),
259 287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
video_title=title,
260 288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
output_path=md_path,
261 289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)
262 290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.update(1)
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_complete", steps[6], 7, total_steps)
263 292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
264 293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# --- Build manifest ---
265 294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
elapsed = time.time() - start_time
266 295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest = VideoManifest(
267 296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
video=VideoMetadata(
@@ -293,16 +322,18 @@
293 322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
screen_captures=screen_captures,
294 323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
frame_paths=[f"frames/{Path(p).name}" for p in frame_paths],
295 324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)
296 325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
297 326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# --- Step 8: Export all formats ---
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_start", steps[7], 8, total_steps)
298 328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pm.usage.start_step("Export formats")
299 329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.set_description("Pipeline: exporting formats")
300 330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest = export_all_formats(output_dir, manifest)
301 331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
302 332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pm.usage.end_step()
303 333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.update(1)
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _notify(progress_callback, "on_step_complete", steps[7], 8, total_steps)
304 335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.set_description("Pipeline: complete")
305 336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pipeline_bar.close()
306 337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
307 338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Write manifest
308 339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
write_video_manifest(manifest, output_dir)
309 340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
310 341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
A DDED video_processor/utils/callbacks.py