typed-ffmpeg-compatible 3.3__tar.gz → 3.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. {typed_ffmpeg_compatible-3.3/src/typed_ffmpeg_compatible.egg-info → typed_ffmpeg_compatible-3.3.1}/PKG-INFO +1 -1
  2. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/__init__.py +2 -1
  3. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/_version.py +2 -2
  4. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/base.py +5 -4
  5. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/compile/compile_cli.py +2 -0
  6. typed_ffmpeg_compatible-3.3.1/src/typed_ffmpeg/streams/__init__.py +6 -0
  7. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/utils/snapshot.py +1 -1
  8. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/utils/view.py +3 -2
  9. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1/src/typed_ffmpeg_compatible.egg-info}/PKG-INFO +1 -1
  10. typed_ffmpeg_compatible-3.3/src/typed_ffmpeg/streams/__init__.py +0 -5
  11. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/LICENSE +0 -0
  12. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/MANIFEST.in +0 -0
  13. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/README.md +0 -0
  14. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/pyproject.toml +0 -0
  15. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/setup.cfg +0 -0
  16. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/common/__init__.py +0 -0
  17. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/common/cache.py +0 -0
  18. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/common/schema.py +0 -0
  19. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/common/serialize.py +0 -0
  20. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/compile/__init__.py +0 -0
  21. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/compile/compile_json.py +0 -0
  22. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/compile/compile_python.py +0 -0
  23. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/compile/context.py +0 -0
  24. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/compile/validate.py +0 -0
  25. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/dag/__init__.py +0 -0
  26. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/dag/factory.py +0 -0
  27. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/dag/global_runnable/__init__.py +0 -0
  28. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/dag/global_runnable/global_args.py +0 -0
  29. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/dag/global_runnable/runnable.py +0 -0
  30. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/dag/io/__init__.py +0 -0
  31. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/dag/io/_input.py +0 -0
  32. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/dag/io/_output.py +0 -0
  33. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/dag/io/output_args.py +0 -0
  34. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/dag/nodes.py +0 -0
  35. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/dag/schema.py +0 -0
  36. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/dag/utils.py +0 -0
  37. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/exceptions.py +0 -0
  38. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/ffprobe/__init__.py +0 -0
  39. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/ffprobe/parse.py +0 -0
  40. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/ffprobe/probe.py +0 -0
  41. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/ffprobe/schema.py +0 -0
  42. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/ffprobe/xml2json.py +0 -0
  43. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/filters.py +0 -0
  44. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/info.py +0 -0
  45. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/py.typed +0 -0
  46. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/schema.py +0 -0
  47. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/sources.py +0 -0
  48. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/streams/audio.py +0 -0
  49. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/streams/av.py +0 -0
  50. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/streams/channel_layout.py +0 -0
  51. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/streams/subtitle.py +0 -0
  52. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/streams/video.py +0 -0
  53. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/types.py +0 -0
  54. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/utils/__init__.py +0 -0
  55. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/utils/escaping.py +0 -0
  56. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/utils/forzendict.py +0 -0
  57. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/utils/lazy_eval/__init__.py +0 -0
  58. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/utils/lazy_eval/operator.py +0 -0
  59. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/utils/lazy_eval/schema.py +0 -0
  60. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/utils/run.py +0 -0
  61. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg/utils/typing.py +0 -0
  62. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg_compatible.egg-info/SOURCES.txt +0 -0
  63. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg_compatible.egg-info/dependency_links.txt +0 -0
  64. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg_compatible.egg-info/entry_points.txt +0 -0
  65. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg_compatible.egg-info/requires.txt +0 -0
  66. {typed_ffmpeg_compatible-3.3 → typed_ffmpeg_compatible-3.3.1}/src/typed_ffmpeg_compatible.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: typed-ffmpeg-compatible
3
- Version: 3.3
3
+ Version: 3.3.1
4
4
  Summary: Modern Python FFmpeg wrappers offer comprehensive support for complex filters, complete with detailed typing and documentation.
5
5
  Author-email: lucemia <lucemia@gmail.com>
6
6
  License-Expression: MIT
@@ -28,7 +28,7 @@ from .dag import Stream
28
28
  from .exceptions import FFMpegExecuteError, FFMpegTypeError, FFMpegValueError
29
29
  from .ffprobe.probe import probe, probe_obj
30
30
  from .info import get_codecs, get_decoders, get_encoders
31
- from .streams import AudioStream, AVStream, VideoStream
31
+ from .streams import AudioStream, AVStream, SubtitleStream, VideoStream
32
32
 
33
33
  __all__ = [
34
34
  "sources",
@@ -46,6 +46,7 @@ __all__ = [
46
46
  "AudioStream",
47
47
  "VideoStream",
48
48
  "AVStream",
49
+ "SubtitleStream",
49
50
  "vfilter",
50
51
  "afilter",
51
52
  "filter_multi_output",
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '3.3'
21
- __version_tuple__ = version_tuple = (3, 3)
20
+ __version__ = version = '3.3.1'
21
+ __version_tuple__ = version_tuple = (3, 3, 1)
@@ -137,7 +137,7 @@ def filter_multi_output(
137
137
  *streams: FilterableStream,
138
138
  name: str,
139
139
  input_typings: tuple[StreamType, ...] = (),
140
- output_tyings: tuple[StreamType, ...] = (),
140
+ output_typings: tuple[StreamType, ...] = (),
141
141
  **kwargs: Any,
142
142
  ) -> FilterNode:
143
143
  """
@@ -151,7 +151,7 @@ def filter_multi_output(
151
151
  *streams: One or more input streams to apply the filter to
152
152
  name: The FFmpeg filter name (e.g., 'split', 'channelsplit', etc.)
153
153
  input_typings: The expected types of the input streams
154
- output_tyings: The expected types of each output stream
154
+ output_typings: The expected types of each output stream
155
155
  **kwargs: Filter-specific parameters as keyword arguments
156
156
 
157
157
  Returns:
@@ -162,7 +162,7 @@ def filter_multi_output(
162
162
  ```python
163
163
  # Split a video into two identical streams
164
164
  split_node = ffmpeg.filter_multi_output(
165
- stream, name="split", output_tyings=(StreamType.video, StreamType.video)
165
+ stream, name="split", output_typings=(StreamType.video, StreamType.video)
166
166
  )
167
167
  stream1 = split_node.video(0)
168
168
  stream2 = split_node.video(1)
@@ -172,12 +172,13 @@ def filter_multi_output(
172
172
  This function is for custom filters not implemented in typed-ffmpeg.
173
173
  Use the built-in filters from the filters module when available.
174
174
  """
175
+
175
176
  return FilterNode(
176
177
  name=name,
177
178
  kwargs=FrozenDict(kwargs),
178
179
  inputs=streams,
179
180
  input_typings=input_typings,
180
- output_typings=output_tyings,
181
+ output_typings=output_typings,
181
182
  )
182
183
 
183
184
 
@@ -682,6 +682,8 @@ def get_stream_label(stream: Stream, context: DAGContext | None = None) -> str:
682
682
  if len(stream.node.output_typings) > 1:
683
683
  return f"{get_node_label(stream.node, context)}#{stream.index}"
684
684
  return f"{get_node_label(stream.node, context)}"
685
+ case OutputNode():
686
+ return f"{get_node_label(stream.node, context)}"
685
687
  case _:
686
688
  raise FFMpegValueError(
687
689
  f"Unknown node type: {stream.node.__class__.__name__}"
@@ -0,0 +1,6 @@
1
+ from .audio import AudioStream
2
+ from .av import AVStream
3
+ from .subtitle import SubtitleStream
4
+ from .video import VideoStream
5
+
6
+ __all__ = ["AudioStream", "VideoStream", "AVStream", "SubtitleStream"]
@@ -21,7 +21,7 @@ from syrupy.types import (
21
21
  from ..dag.schema import Stream
22
22
 
23
23
 
24
- class DAGSnapshotExtenstion(JSONSnapshotExtension):
24
+ class DAGSnapshotExtension(JSONSnapshotExtension):
25
25
  """
26
26
  A snapshot extension for serializing and testing FFmpeg DAG structures.
27
27
 
@@ -10,6 +10,7 @@ from __future__ import annotations
10
10
 
11
11
  from typing import Literal
12
12
 
13
+ from ..compile.compile_cli import get_args, get_stream_label
13
14
  from ..compile.context import DAGContext
14
15
  from ..dag.nodes import FilterNode, InputNode, OutputNode
15
16
  from ..dag.schema import Node
@@ -92,7 +93,7 @@ def view(node: Node, format: Literal["png", "svg", "dot"]) -> str:
92
93
  color = _get_node_color(node)
93
94
  graph.node(
94
95
  name=node.hex,
95
- label=node.repr(),
96
+ label=" ".join(get_args(node, context)),
96
97
  shape="box",
97
98
  style="filled",
98
99
  fillcolor=color,
@@ -105,7 +106,7 @@ def view(node: Node, format: Literal["png", "svg", "dot"]) -> str:
105
106
  graph.edge(
106
107
  stream.node.hex,
107
108
  node.hex,
108
- label=f"{'*' if stream.index is None else stream.index} => {idx}",
109
+ label=f"{get_stream_label(stream, context)} -> {idx}",
109
110
  )
110
111
 
111
112
  return graph.render(engine="dot")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: typed-ffmpeg-compatible
3
- Version: 3.3
3
+ Version: 3.3.1
4
4
  Summary: Modern Python FFmpeg wrappers offer comprehensive support for complex filters, complete with detailed typing and documentation.
5
5
  Author-email: lucemia <lucemia@gmail.com>
6
6
  License-Expression: MIT
@@ -1,5 +0,0 @@
1
- from .audio import AudioStream
2
- from .av import AVStream
3
- from .video import VideoStream
4
-
5
- __all__ = ["AudioStream", "VideoStream", "AVStream"]