video_transcoding.transcoding package¶
Submodules¶
video_transcoding.transcoding.analysis module¶
- class video_transcoding.transcoding.analysis.FFProbeHLSAnalyzer(info: ProbeInfo)¶
Bases:
AnalyzerAnalyzer for multi-variant HLS results.
- analyze() List[Meta]¶
- get_bitrate(track: Dict[str, Any]) int¶
- get_duration(track: Dict[str, Any]) TS¶
- class video_transcoding.transcoding.analysis.MKVPlaylistAnalyzer(info: ProbeInfo)¶
Bases:
AnalyzerAnalyzer for HLS playlist with .mkv fragments.
- get_duration(track: Dict[str, Any]) TS¶
Augment track duration with a value from container.
This is legit if media contains only a single stream.
- class video_transcoding.transcoding.analysis.MKVSegmentAnalyzer(info: ProbeInfo)¶
Bases:
MKVPlaylistAnalyzerAnalyzer for audio/video segments in .NUT container.
- get_bitrate(track: Dict[str, Any]) int¶
- class video_transcoding.transcoding.analysis.SourceAnalyzer(info: MediaInfo)¶
Bases:
AnalyzerUniversal source media analyzer.
- class video_transcoding.transcoding.analysis.VideoResultAnalyzer(info: ProbeInfo)¶
Bases:
AnalyzerAnalyzer for multi-stream video segments in MPEGTS container.
video_transcoding.transcoding.codecs module¶
- class video_transcoding.transcoding.codecs.AudioCodec(codec: str = None, bitrate: int = 0, rate: float = None, channels: int = None)¶
Bases:
AudioCodec- channels: int = None¶
- rate: float = None¶
- class video_transcoding.transcoding.codecs.Copy(codec: str = None, bitrate: Optional[int] = None, kind: fffw.graph.meta.StreamType = <factory>)¶
Bases:
Copy- bitrate: int | None = None¶
- class video_transcoding.transcoding.codecs.VideoCodec(codec: str = None, bitrate: int = 0, force_key_frames: str = None, constant_rate_factor: int = None, preset: str = None, max_rate: int = None, buf_size: int = None, profile: str = None, gop: int = None, rate: float = None, pix_fmt: str = None)¶
Bases:
VideoCodec- buf_size: int = None¶
- constant_rate_factor: int = None¶
- force_key_frames: str = None¶
- gop: int = None¶
- max_rate: int = None¶
- pix_fmt: str = None¶
- preset: str = None¶
- profile: str = None¶
- rate: float = None¶
video_transcoding.transcoding.extract module¶
- class video_transcoding.transcoding.extract.Extractor(*args: Any, **kwargs: Any)¶
Bases:
LoggerMixin,ABC- ffprobe(uri: str, timeout: float = 60.0, **kwargs: Any) ProbeInfo¶
- mediainfo(uri: str) MediaInfo¶
- class video_transcoding.transcoding.extract.HLSExtractor(*args: Any, **kwargs: Any)¶
Bases:
ExtractorExtracts metadata from HLS results.
- class video_transcoding.transcoding.extract.MKVExtractor(*args: Any, **kwargs: Any)¶
Bases:
Extractor,ABCSupports analyzing media from playlists with .mkv segments.
- ffprobe(uri: str, timeout: float = 60.0, **kwargs: Any) ProbeInfo¶
- class video_transcoding.transcoding.extract.SourceExtractor(*args: Any, **kwargs: Any)¶
Bases:
Extractor
- class video_transcoding.transcoding.extract.SplitExtractor(video_playlist: str, audio_file: str)¶
Bases:
MKVExtractorExtracts source metadata from video and audio HLS playlists.
- class video_transcoding.transcoding.extract.VideoResultExtractor(*args: Any, **kwargs: Any)¶
Bases:
MKVExtractorExtracts metadata from video segment transcoding results.
- class video_transcoding.transcoding.extract.VideoSegmentExtractor(*args: Any, **kwargs: Any)¶
Bases:
MKVExtractorExtracts metadata from video segments
video_transcoding.transcoding.ffprobe module¶
- class video_transcoding.transcoding.ffprobe.FFProbe(input: str = None, loglevel: str = None, show_streams: bool = False, show_format: bool = False, output_format: str = None, allowed_extensions: str | None = None)¶
Bases:
FFProbeExtends ffprobe wrapper with new arguments and output filtering.
- handle_stderr(line: str) str¶
- handle_stdout(line: str) str¶
- allowed_extensions: str | None = None¶
video_transcoding.transcoding.inputs module¶
- class video_transcoding.transcoding.inputs.Input(streams: Tuple[fffw.encoding.inputs.Stream, ...] = <factory>, hardware: str = None, device: str = None, output_format: str = None, fast_seek: Union[fffw.graph.meta.TS, float, int] = None, duration: Union[fffw.graph.meta.TS, float, int] = None, input_file: str = None, slow_seek: Union[fffw.graph.meta.TS, float, int] = None, allowed_extensions: str = None)¶
Bases:
Input- allowed_extensions: str = None¶
video_transcoding.transcoding.metadata module¶
- class video_transcoding.transcoding.metadata.Metadata(uri: str, videos: List[fffw.graph.meta.VideoMeta], audios: List[fffw.graph.meta.AudioMeta])¶
Bases:
object- property audio: AudioMeta¶
- audios: List[AudioMeta]¶
- property streams: List[Stream]¶
- uri: str¶
- property video: VideoMeta¶
- videos: List[VideoMeta]¶
- video_transcoding.transcoding.metadata.audio_meta_from_native(data: dict) AudioMeta¶
- video_transcoding.transcoding.metadata.get_meta_kwargs(data: dict) dict¶
- video_transcoding.transcoding.metadata.scene_from_native(data: dict) Scene¶
- video_transcoding.transcoding.metadata.video_meta_from_native(data: dict) VideoMeta¶
video_transcoding.transcoding.outputs module¶
- class video_transcoding.transcoding.outputs.FileOutput(codecs: List[fffw.encoding.outputs.Codec] = <factory>, no_video: Optional[bool] = None, no_audio: Optional[bool] = None, format: str = None, output_file: str = None, copyts: bool = False, avoid_negative_ts: str = None, method: Optional[str] = None, muxdelay: Optional[str] = None)¶
Bases:
Output- method: str | None = None¶
- muxdelay: str | None = None¶
- class video_transcoding.transcoding.outputs.HLSOutput(codecs: List[fffw.encoding.outputs.Codec] = <factory>, no_video: Optional[bool] = None, no_audio: Optional[bool] = None, format: str = None, output_file: str = None, copyts: bool = False, avoid_negative_ts: str = None, hls_time: Optional[float] = 2, hls_playlist_type: Optional[str] = None, var_stream_map: Optional[str] = None, hls_segment_filename: Optional[str] = None, master_pl_name: Optional[str] = None, muxdelay: Optional[str] = None, reset_timestamps: Optional[int] = 0)¶
Bases:
Output- hls_playlist_type: str | None = None¶
- hls_segment_filename: str | None = None¶
- hls_time: float | None = 2¶
- master_pl_name: str | None = None¶
- muxdelay: str | None = None¶
- reset_timestamps: int | None = 0¶
- var_stream_map: str | None = None¶
- class video_transcoding.transcoding.outputs.Output(codecs: List[fffw.encoding.outputs.Codec] = <factory>, no_video: Optional[bool] = None, no_audio: Optional[bool] = None, format: str = None, output_file: str = None, copyts: bool = False, avoid_negative_ts: str = None)¶
Bases:
Output- avoid_negative_ts: str = None¶
- copyts: bool = False¶
- class video_transcoding.transcoding.outputs.SegmentOutput(codecs: ~typing.List[~fffw.encoding.outputs.Codec] = <factory>, no_video: bool | None = None, no_audio: bool | None = None, format: str = None, output_file: str = None, copyts: bool = False, avoid_negative_ts: str = None, segment_format: str | None = None, segment_list: str | None = None, segment_list_type: str | None = None, segment_time: float | None = None)¶
Bases:
OutputSegment muxer
- segment_format: str | None = None¶
- segment_list: str | None = None¶
- segment_list_type: str | None = None¶
- segment_time: float | None = None¶
video_transcoding.transcoding.profiles module¶
- class video_transcoding.transcoding.profiles.AudioCondition(min_sample_rate: int = 0, min_bitrate: int = 0)¶
Bases:
objectCondition for source audio stream for video profile selection
- is_valid(meta: AudioMeta) bool¶
- Parameters:
meta – source video stream metadata
- Returns:
True if source stream satisfies condition.
- min_bitrate: int = 0¶
- min_sample_rate: int = 0¶
- class video_transcoding.transcoding.profiles.AudioProfile(condition: AudioCondition, audio: List[str])¶
Bases:
objectAudio transcoding profile.
- audio: List[str]¶
- condition: AudioCondition¶
- class video_transcoding.transcoding.profiles.AudioTrack(id: str, codec: str, bitrate: int, channels: int, sample_rate: int)¶
Bases:
objectSettings for a single audio stream in resulting media file
- classmethod from_native(data: Dict[str, Any]) AudioTrack¶
- bitrate: int¶
- channels: int¶
- codec: str¶
- id: str¶
- sample_rate: int¶
- class video_transcoding.transcoding.profiles.Container(segment_duration: float | None = None)¶
Bases:
objectOutput file format
- segment_duration: float | None = None¶
- class video_transcoding.transcoding.profiles.Preset(video_profiles: List[VideoProfile], audio_profiles: List[AudioProfile], video: List[VideoTrack], audio: List[AudioTrack])¶
Bases:
objectA set of video and audio profiles to select from.
- audio: List[AudioTrack]¶
- audio_profiles: List[AudioProfile]¶
- video: List[VideoTrack]¶
- video_profiles: List[VideoProfile]¶
- class video_transcoding.transcoding.profiles.Profile(video: List[VideoTrack], audio: List[AudioTrack], container: Container)¶
Bases:
objectSelected transcoding profile containing a number of audio and video streams.
- audio: List[AudioTrack]¶
- video: List[VideoTrack]¶
- class video_transcoding.transcoding.profiles.VideoCondition(min_width: int = 0, min_height: int = 0, min_bitrate: int = 0, min_frame_rate: float = 0.0, min_dar: float = 0.0, max_dar: float = 0.0)¶
Bases:
objectCondition for source video stream for video profile selection
- is_valid(meta: VideoMeta) bool¶
- Parameters:
meta – source video stream metadata
- Returns:
True if source stream satisfies condition.
- max_dar: float = 0.0¶
- min_bitrate: int = 0¶
- min_dar: float = 0.0¶
- min_frame_rate: float = 0.0¶
- min_height: int = 0¶
- min_width: int = 0¶
- class video_transcoding.transcoding.profiles.VideoProfile(condition: VideoCondition, segment_duration: float, video: List[str])¶
Bases:
objectVideo transcoding profile.
- condition: VideoCondition¶
- segment_duration: float¶
- video: List[str]¶
- class video_transcoding.transcoding.profiles.VideoTrack(id: str, codec: str, constant_rate_factor: int, preset: str, max_rate: int, buf_size: int, profile: str, pix_fmt: str, width: int, height: int, frame_rate: float, gop_size: int, force_key_frames: str)¶
Bases:
objectSettings for a single video stream in resulting media file
- classmethod from_native(data: Dict[str, Any]) VideoTrack¶
- buf_size: int¶
- codec: str¶
- constant_rate_factor: int¶
- force_key_frames: str¶
- frame_rate: float¶
- gop_size: int¶
- height: int¶
- id: str¶
- max_rate: int¶
- pix_fmt: str¶
- preset: str¶
- profile: str¶
- width: int¶
video_transcoding.transcoding.transcoder module¶
- class video_transcoding.transcoding.transcoder.Processor(src: str, dst: str, *, profile: Profile, meta: Metadata)¶
Bases:
LoggerMixin,ABCA single processing step abstract class.
- abstract get_result_metadata(uri: str) Metadata¶
Get result metadata.
- Parameters:
uri – analyzed media
- Returns:
metadata object with video and audio stream
- static run(ff: FFMPEG) None¶
Starts ffmpeg process and captures errors from it’s logs
- requires_audio: bool = True¶
- requires_video: bool = True¶
- class video_transcoding.transcoding.transcoder.Segmentor(*, video_source: str, audio_source: str, dst: str, profile: Profile, meta: Metadata)¶
Bases:
ProcessorResult segmentation logic.
- get_output_kwargs(codecs_list: List[Codec]) Dict[str, Any]¶
- get_result_metadata(uri: str) Metadata¶
Get result metadata.
- Parameters:
uri – analyzed media
- Returns:
metadata object with video and audio stream
- static get_var_stream_map(codecs_list: List[Codec]) str¶
- prepare_audio_codecs() List[AudioCodec]¶
- prepare_output(codecs_list: List[Codec]) Output¶
- class video_transcoding.transcoding.transcoder.Splitter(src: str, dst: str, *, profile: Profile, meta: Metadata, source_video_playlist: str, source_video_chunk: str, source_audio: str)¶
Bases:
ProcessorSource splitting logic.
- get_audio_output_kwargs(codecs_list: List[Codec]) Dict[str, Any]¶
- get_result_metadata(uri: str) Metadata¶
Get result metadata.
- Parameters:
uri – analyzed media
- Returns:
metadata object with video and audio stream
- get_video_output_kwargs(codecs_list: List[Codec]) Dict[str, Any]¶
- prepare_audio_output(codecs_list: List[Codec]) Output¶
- prepare_video_output(codecs_list: List[Codec]) Output¶
- class video_transcoding.transcoding.transcoder.Transcoder(src: str, dst: str, *, profile: Profile, meta: Metadata)¶
Bases:
ProcessorSource transcoding logic.
- get_result_metadata(uri: str) Metadata¶
Get result metadata.
- Parameters:
uri – analyzed media
- Returns:
metadata object with video and audio stream
- prepare_ffmpeg(src: Metadata) FFMPEG¶
Prepares ffmpeg command for a given source :param src: input file metadata :return: ffmpeg wrapper
- prepare_output(video_codecs: List[VideoCodec]) Output¶
- prepare_video_codecs() List[VideoCodec]¶
- scale_and_encode(source: Input, video_codecs: List[VideoCodec], dst: Output) SIMD¶
- requires_audio: bool = False¶
video_transcoding.transcoding.workspace module¶
- class video_transcoding.transcoding.workspace.Collection(*parts: str)¶
Bases:
ResourceDirectory in a workspace
- collection(*parts: str) Collection¶
- property trailing_slash: str¶
- class video_transcoding.transcoding.workspace.File(*parts: str)¶
Bases:
ResourceFile in a workspace.
- property trailing_slash: str¶
- class video_transcoding.transcoding.workspace.FileSystemWorkspace(base: str)¶
Bases:
Workspace- create_collection(c: Collection) None¶
- delete_collection(c: Collection) None¶
- class video_transcoding.transcoding.workspace.Resource(*parts: str)¶
Bases:
ABCDirectory or file in a workspace.
- property basename: str¶
- property parent: Collection | None¶
- property path: str¶
- abstract property trailing_slash: str¶
- class video_transcoding.transcoding.workspace.WebDAVWorkspace(base: str)¶
Bases:
Workspace- create_collection(c: Collection) None¶
- delete_collection(c: Collection) None¶
- class video_transcoding.transcoding.workspace.Workspace(uri: ParseResult)¶
Bases:
LoggerMixin,ABC- abstract create_collection(c: Collection) None¶
- abstract delete_collection(c: Collection) None¶
- ensure_collection(path: str) Collection¶
Ensures that a directory with relative path exists.
- Returns:
complete uri for a directory.