chunker ui redo
This commit is contained in:
@@ -28,7 +28,13 @@ class Chunker:
|
||||
chunk_duration: Duration of each chunk in seconds (default: 10.0)
|
||||
"""
|
||||
|
||||
def __init__(self, file_path: str, chunk_duration: float = 10.0):
|
||||
def __init__(
|
||||
self,
|
||||
file_path: str,
|
||||
chunk_duration: float = 10.0,
|
||||
start_time: float | None = None,
|
||||
end_time: float | None = None,
|
||||
):
|
||||
if not os.path.isfile(file_path):
|
||||
raise ChunkReadError(f"File not found: {file_path}")
|
||||
if chunk_duration <= 0:
|
||||
@@ -37,7 +43,16 @@ class Chunker:
|
||||
self.file_path = file_path
|
||||
self.chunk_duration = chunk_duration
|
||||
self.file_size = os.path.getsize(file_path)
|
||||
self.source_duration = self._probe_duration()
|
||||
full_duration = self._probe_duration()
|
||||
|
||||
# Apply time range
|
||||
self.range_start = max(start_time or 0.0, 0.0)
|
||||
self.range_end = min(end_time or full_duration, full_duration)
|
||||
if self.range_start >= self.range_end:
|
||||
raise ValueError(
|
||||
f"Invalid range: start={self.range_start} >= end={self.range_end}"
|
||||
)
|
||||
self.source_duration = self.range_end - self.range_start
|
||||
|
||||
def _probe_duration(self) -> float:
|
||||
"""Get source file duration via FFmpeg probe."""
|
||||
@@ -71,9 +86,9 @@ class Chunker:
|
||||
"""
|
||||
total = self.expected_chunks
|
||||
for sequence in range(total):
|
||||
start_time = sequence * self.chunk_duration
|
||||
start_time = self.range_start + sequence * self.chunk_duration
|
||||
end_time = min(
|
||||
start_time + self.chunk_duration, self.source_duration
|
||||
start_time + self.chunk_duration, self.range_end
|
||||
)
|
||||
duration = end_time - start_time
|
||||
|
||||
|
||||
Reference in New Issue
Block a user