MCPcopy Create free account
hub / github.com/Breakthrough/PySceneDetect / __init__

Method __init__

scenedetect/common.py:209–260  ·  view source on GitHub ↗

Arguments: timecode: A frame number (`int`), number of seconds (`float`), timecode string in the form `'HH:MM:SS'` or `'HH:MM:SS.nnn'`, or a `Timecode`. fps: The framerate to use for distance between frames and to calculate frame numbers.

(
        self,
        timecode: "TimecodeLike",
        fps: "float | FrameTimecode | Fraction | None" = None,
    )

Source from the content-addressed store, hash-verified

207 """
208
209 def __init__(
210 self,
211 timecode: "TimecodeLike",
212 fps: "float | FrameTimecode | Fraction | None" = None,
213 ):
214 """
215 Arguments:
216 timecode: A frame number (`int`), number of seconds (`float`), timecode string in
217 the form `'HH:MM:SS'` or `'HH:MM:SS.nnn'`, or a `Timecode`.
218 fps: The framerate to use for distance between frames and to calculate frame numbers.
219 For a VFR video, this may just be the average framerate.
220 Raises:
221 TypeError: Thrown if either `timecode` or `fps` are unsupported types.
222 ValueError: Thrown when specifying a negative timecode or framerate.
223 """
224 self._time: _FrameNumber | _Seconds | Timecode
225 """Internal time representation."""
226 self._rate: Fraction | None = None
227 """Rate at which time passes between frames, measured in frames/sec."""
228
229 # Copy constructor.
230 if isinstance(timecode, FrameTimecode):
231 self._time = timecode._time
232 self._rate = timecode._rate if fps is None else self._ensure_fractional(fps)
233 return
234
235 # Ensure args are consistent with API.
236 if fps is None:
237 raise TypeError("fps is a required argument.")
238 self._rate = self._ensure_fractional(fps)
239
240 # Timecode with a time base.
241 if isinstance(timecode, Timecode):
242 self._time = timecode
243 return
244
245 # Process the timecode value, storing it as an exact number of frames only if required.
246 if isinstance(timecode, str) and timecode.isdigit():
247 timecode = int(timecode)
248
249 if isinstance(timecode, str):
250 self._time = _Seconds(self._timecode_to_seconds(timecode))
251 elif isinstance(timecode, float):
252 if timecode < 0.0:
253 raise ValueError("Timecode frame number must be positive and greater than zero.")
254 self._time = _Seconds(timecode)
255 else:
256 # Only `int` remains: `Timecode`/`FrameTimecode` returned earlier and `str`/`float`
257 # were just handled above.
258 if timecode < 0:
259 raise ValueError("Timecode frame number must be positive and greater than zero.")
260 self._time = _FrameNumber(timecode)
261
262 @property
263 def frame_num(self) -> int:

Callers

nothing calls this directly

Calls 4

_ensure_fractionalMethod · 0.95
_timecode_to_secondsMethod · 0.95
_SecondsClass · 0.85
_FrameNumberClass · 0.85

Tested by

no test coverage detected