typed-ffmpeg-compatible 3.2.1__tar.gz → 3.2.2__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 (64) hide show
  1. {typed_ffmpeg_compatible-3.2.1/src/typed_ffmpeg_compatible.egg-info → typed_ffmpeg_compatible-3.2.2}/PKG-INFO +1 -1
  2. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/pyproject.toml +3 -0
  3. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/_version.py +2 -2
  4. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/compile/compile_cli.py +15 -31
  5. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/ffprobe/parse.py +1 -1
  6. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/ffprobe/schema.py +5 -5
  7. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2/src/typed_ffmpeg_compatible.egg-info}/PKG-INFO +1 -1
  8. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg_compatible.egg-info/SOURCES.txt +1 -0
  9. typed_ffmpeg_compatible-3.2.2/src/typed_ffmpeg_compatible.egg-info/entry_points.txt +2 -0
  10. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/LICENSE +0 -0
  11. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/MANIFEST.in +0 -0
  12. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/README.md +0 -0
  13. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/setup.cfg +0 -0
  14. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/__init__.py +0 -0
  15. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/base.py +0 -0
  16. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/common/__init__.py +0 -0
  17. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/common/cache.py +0 -0
  18. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/common/schema.py +0 -0
  19. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/common/serialize.py +0 -0
  20. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/compile/__init__.py +0 -0
  21. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/compile/compile_json.py +0 -0
  22. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/compile/compile_python.py +0 -0
  23. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/compile/context.py +0 -0
  24. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/compile/validate.py +0 -0
  25. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/dag/__init__.py +0 -0
  26. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/dag/factory.py +0 -0
  27. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/dag/global_runnable/__init__.py +0 -0
  28. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/dag/global_runnable/global_args.py +0 -0
  29. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/dag/global_runnable/runnable.py +0 -0
  30. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/dag/io/__init__.py +0 -0
  31. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/dag/io/_input.py +0 -0
  32. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/dag/io/_output.py +0 -0
  33. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/dag/io/output_args.py +0 -0
  34. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/dag/nodes.py +0 -0
  35. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/dag/schema.py +0 -0
  36. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/dag/utils.py +0 -0
  37. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/exceptions.py +0 -0
  38. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/ffprobe/__init__.py +0 -0
  39. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/ffprobe/probe.py +0 -0
  40. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/ffprobe/xml2json.py +0 -0
  41. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/filters.py +0 -0
  42. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/info.py +0 -0
  43. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/py.typed +0 -0
  44. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/schema.py +0 -0
  45. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/sources.py +0 -0
  46. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/streams/__init__.py +0 -0
  47. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/streams/audio.py +0 -0
  48. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/streams/av.py +0 -0
  49. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/streams/channel_layout.py +0 -0
  50. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/streams/video.py +0 -0
  51. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/types.py +0 -0
  52. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/utils/__init__.py +0 -0
  53. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/utils/escaping.py +0 -0
  54. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/utils/forzendict.py +0 -0
  55. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/utils/lazy_eval/__init__.py +0 -0
  56. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/utils/lazy_eval/operator.py +0 -0
  57. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/utils/lazy_eval/schema.py +0 -0
  58. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/utils/run.py +0 -0
  59. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/utils/snapshot.py +0 -0
  60. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/utils/typing.py +0 -0
  61. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg/utils/view.py +0 -0
  62. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg_compatible.egg-info/dependency_links.txt +0 -0
  63. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/src/typed_ffmpeg_compatible.egg-info/requires.txt +0 -0
  64. {typed_ffmpeg_compatible-3.2.1 → typed_ffmpeg_compatible-3.2.2}/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.2.1
3
+ Version: 3.2.2
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
@@ -32,6 +32,9 @@ classifiers = [
32
32
  "Topic :: Software Development :: Libraries :: Application Frameworks",
33
33
  ]
34
34
 
35
+ [project.scripts]
36
+ scripts = "scripts.main:app"
37
+
35
38
  [project.urls]
36
39
  Homepage = "https://livingbio.github.io/typed-ffmpeg/"
37
40
  Repository = "https://github.com/livingbio/typed-ffmpeg"
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '3.2.1'
21
- __version_tuple__ = version_tuple = (3, 2, 1)
20
+ __version__ = version = '3.2.2'
21
+ __version_tuple__ = version_tuple = (3, 2, 2)
@@ -317,37 +317,21 @@ def parse_global(
317
317
  For tokens like ['-y', '-loglevel', 'quiet', '-i', 'input.mp4']:
318
318
  Returns ({'y': True, 'loglevel': 'quiet'}, ['-i', 'input.mp4'])
319
319
  """
320
- global_params: dict[str, str | bool] = {}
321
- remaining_tokens = tokens.copy()
322
-
323
- # Process tokens until we hit an input file marker (-i)
324
- while remaining_tokens and remaining_tokens[0] != "-i":
325
- if remaining_tokens[0].startswith("-"):
326
- option_name = remaining_tokens[0][1:]
327
- assert option_name in ffmpeg_options, (
328
- f"Unknown global option: {option_name}"
329
- )
330
- option = ffmpeg_options[option_name]
331
-
332
- if not option.is_global_option:
333
- continue
334
-
335
- if len(remaining_tokens) > 1 and not remaining_tokens[1].startswith("-"):
336
- # Option with value
337
- global_params[option_name] = remaining_tokens[1]
338
- remaining_tokens = remaining_tokens[2:]
320
+ options = parse_options(tokens[: tokens.index("-i")])
321
+ remaining_tokens = tokens[tokens.index("-i") :]
322
+ parameters: dict[str, str | bool] = {}
323
+
324
+ for key, value in options.items():
325
+ assert key in ffmpeg_options, f"Unknown option: {key}"
326
+ option = ffmpeg_options[key]
327
+
328
+ if option.is_global_option:
329
+ # Process only recognized global options
330
+ if value[-1] is None:
331
+ parameters[key] = True
339
332
  else:
340
- # Boolean option
341
- if option_name.startswith("no"):
342
- global_params[option_name[2:]] = False
343
- else:
344
- global_params[option_name] = True
345
- remaining_tokens = remaining_tokens[1:]
346
- else:
347
- # Skip non-option tokens
348
- remaining_tokens = remaining_tokens[1:]
349
-
350
- return global_params, remaining_tokens
333
+ parameters[key] = value[-1]
334
+ return parameters, remaining_tokens
351
335
 
352
336
 
353
337
  def parse(cli: str) -> Stream:
@@ -356,7 +340,7 @@ def parse(cli: str) -> Stream:
356
340
  ffmpeg_filters = get_filter_dict()
357
341
 
358
342
  tokens = shlex.split(cli)
359
- assert tokens[0] == "ffmpeg"
343
+ assert tokens[0].lower().split(".")[0] == "ffmpeg"
360
344
  tokens = tokens[1:]
361
345
 
362
346
  # Parse global options first
@@ -72,7 +72,6 @@ def _parse_obj_from_dict(data: Any, cls: type[T]) -> T | None:
72
72
  Returns:
73
73
  The parsed dataclass instance
74
74
  """
75
-
76
75
  if data is None:
77
76
  return None
78
77
 
@@ -104,6 +103,7 @@ def _parse_obj_from_dict(data: Any, cls: type[T]) -> T | None:
104
103
  continue
105
104
  item_type = tuple_args[0]
106
105
  value = data.get(field_name, [])
106
+ # NOTE: if the value is a single item, convert it to a list (xml's issue)
107
107
  if not isinstance(value, list):
108
108
  value = [value]
109
109
  kwargs[field_name] = tuple(
@@ -26,15 +26,15 @@ class packetsType:
26
26
 
27
27
  @dataclass(kw_only=True, frozen=True)
28
28
  class framesType:
29
- frame: Optional["frameType"] = None
30
- subtitle: Optional["subtitleType"] = None
29
+ frame: tuple["frameType", ...] | None = None
30
+ subtitle: tuple["subtitleType", ...] | None = None
31
31
 
32
32
 
33
33
  @dataclass(kw_only=True, frozen=True)
34
34
  class packetsAndFramesType:
35
- packet: Optional["packetType"] = None
36
- frame: Optional["frameType"] = None
37
- subtitle: Optional["subtitleType"] = None
35
+ packet: tuple["packetType", ...] | None = None
36
+ frame: tuple["frameType", ...] | None = None
37
+ subtitle: tuple["subtitleType", ...] | None = None
38
38
 
39
39
 
40
40
  @dataclass(kw_only=True, frozen=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: typed-ffmpeg-compatible
3
- Version: 3.2.1
3
+ Version: 3.2.2
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
@@ -57,5 +57,6 @@ src/typed_ffmpeg/utils/lazy_eval/schema.py
57
57
  src/typed_ffmpeg_compatible.egg-info/PKG-INFO
58
58
  src/typed_ffmpeg_compatible.egg-info/SOURCES.txt
59
59
  src/typed_ffmpeg_compatible.egg-info/dependency_links.txt
60
+ src/typed_ffmpeg_compatible.egg-info/entry_points.txt
60
61
  src/typed_ffmpeg_compatible.egg-info/requires.txt
61
62
  src/typed_ffmpeg_compatible.egg-info/top_level.txt
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ scripts = scripts.main:app