typed-ffmpeg-compatible 2.5.0__py3-none-any.whl → 2.6.1__py3-none-any.whl
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.
- typed_ffmpeg/__init__.py +4 -0
- typed_ffmpeg/base.py +24 -5
- typed_ffmpeg/common/schema.py +25 -9
- typed_ffmpeg/common/serialize.py +9 -4
- typed_ffmpeg/dag/__init__.py +8 -1
- typed_ffmpeg/dag/context.py +7 -2
- typed_ffmpeg/dag/factory.py +29 -9
- typed_ffmpeg/dag/global_runnable/global_args.py +1 -2
- typed_ffmpeg/dag/global_runnable/runnable.py +9 -3
- typed_ffmpeg/dag/io/_input.py +3 -1
- typed_ffmpeg/dag/io/_output.py +3 -1
- typed_ffmpeg/dag/io/output_args.py +7 -4
- typed_ffmpeg/dag/nodes.py +59 -29
- typed_ffmpeg/dag/schema.py +3 -3
- typed_ffmpeg/dag/validate.py +26 -8
- typed_ffmpeg/exceptions.py +1 -1
- typed_ffmpeg/filters.py +304 -72
- typed_ffmpeg/info.py +167 -0
- typed_ffmpeg/probe.py +9 -2
- typed_ffmpeg/schema.py +0 -1
- typed_ffmpeg/streams/audio.py +697 -214
- typed_ffmpeg/streams/video.py +1400 -401
- typed_ffmpeg/utils/escaping.py +6 -5
- typed_ffmpeg/utils/run.py +1 -1
- typed_ffmpeg/utils/snapshot.py +10 -6
- typed_ffmpeg/utils/view.py +7 -2
- {typed_ffmpeg_compatible-2.5.0.dist-info → typed_ffmpeg_compatible-2.6.1.dist-info}/METADATA +1 -1
- typed_ffmpeg_compatible-2.6.1.dist-info/RECORD +46 -0
- typed_ffmpeg_compatible-2.5.0.dist-info/RECORD +0 -45
- {typed_ffmpeg_compatible-2.5.0.dist-info → typed_ffmpeg_compatible-2.6.1.dist-info}/LICENSE +0 -0
- {typed_ffmpeg_compatible-2.5.0.dist-info → typed_ffmpeg_compatible-2.6.1.dist-info}/WHEEL +0 -0
- {typed_ffmpeg_compatible-2.5.0.dist-info → typed_ffmpeg_compatible-2.6.1.dist-info}/entry_points.txt +0 -0
typed_ffmpeg/utils/escaping.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
from
|
1
|
+
from collections.abc import Iterable
|
2
|
+
from typing import Any
|
2
3
|
|
3
4
|
|
4
5
|
def escape(text: str | int | float, chars: str = "\\'=:") -> str:
|
@@ -39,11 +40,11 @@ def convert_kwargs_to_cmd_line_args(kwargs: dict[str, Any]) -> list[str]:
|
|
39
40
|
v = kwargs[k]
|
40
41
|
if isinstance(v, Iterable) and not isinstance(v, str):
|
41
42
|
for value in v:
|
42
|
-
args.append("-{}"
|
43
|
+
args.append(f"-{k}")
|
43
44
|
if value is not None:
|
44
|
-
args.append("{}"
|
45
|
+
args.append(f"{value}")
|
45
46
|
continue
|
46
|
-
args.append("-{}"
|
47
|
+
args.append(f"-{k}")
|
47
48
|
if v is not None:
|
48
|
-
args.append("{}"
|
49
|
+
args.append(f"{v}")
|
49
50
|
return args
|
typed_ffmpeg/utils/run.py
CHANGED
@@ -19,7 +19,7 @@ def command_line(args: list[str]) -> str:
|
|
19
19
|
|
20
20
|
# Filter_Node_Option_Type
|
21
21
|
def ignore_default(
|
22
|
-
kwargs: dict[str, str | int | float | bool | Default]
|
22
|
+
kwargs: dict[str, str | int | float | bool | Default],
|
23
23
|
) -> tuple[tuple[str, str | int | float | bool | LazyValue], ...]:
|
24
24
|
"""
|
25
25
|
Convert the values of the dictionary to strings.
|
typed_ffmpeg/utils/snapshot.py
CHANGED
@@ -1,12 +1,18 @@
|
|
1
|
+
from dataclasses import asdict
|
1
2
|
from typing import Optional
|
2
3
|
|
3
|
-
from syrupy.extensions.
|
4
|
-
from syrupy.types import
|
4
|
+
from syrupy.extensions.json import JSONSnapshotExtension
|
5
|
+
from syrupy.types import (
|
6
|
+
PropertyFilter,
|
7
|
+
PropertyMatcher,
|
8
|
+
SerializableData,
|
9
|
+
SerializedData,
|
10
|
+
)
|
5
11
|
|
6
12
|
from ..dag.schema import Stream
|
7
13
|
|
8
14
|
|
9
|
-
class DAGSnapshotExtenstion(
|
15
|
+
class DAGSnapshotExtenstion(JSONSnapshotExtension):
|
10
16
|
"""
|
11
17
|
A snapshot extension for the DAG. This extension is used to serialize and match the DAG.
|
12
18
|
"""
|
@@ -20,7 +26,5 @@ class DAGSnapshotExtenstion(PNGImageSnapshotExtension):
|
|
20
26
|
matcher: Optional["PropertyMatcher"] = None,
|
21
27
|
) -> "SerializedData":
|
22
28
|
stream = Stream(node=data)
|
23
|
-
graph_path = stream.view()
|
24
29
|
|
25
|
-
|
26
|
-
return super().serialize(ifile.read())
|
30
|
+
return super().serialize(asdict(stream))
|
typed_ffmpeg/utils/view.py
CHANGED
@@ -35,7 +35,8 @@ def view(node: Node, format: Literal["png", "svg", "dot"]) -> str:
|
|
35
35
|
import graphviz # type: ignore
|
36
36
|
except ImportError:
|
37
37
|
raise ImportError(
|
38
|
-
"failed to import graphviz; please make sure graphviz is installed (e.g. "
|
38
|
+
"failed to import graphviz; please make sure graphviz is installed (e.g. "
|
39
|
+
"`pip install graphviz`)"
|
39
40
|
)
|
40
41
|
|
41
42
|
graph = graphviz.Digraph(format=format)
|
@@ -59,6 +60,10 @@ def view(node: Node, format: Literal["png", "svg", "dot"]) -> str:
|
|
59
60
|
|
60
61
|
for node in context.all_nodes:
|
61
62
|
for idx, stream in enumerate(node.inputs):
|
62
|
-
graph.edge(
|
63
|
+
graph.edge(
|
64
|
+
stream.node.hex,
|
65
|
+
node.hex,
|
66
|
+
label=f"{'*' if stream.index is None else stream.index} => {idx}",
|
67
|
+
)
|
63
68
|
|
64
69
|
return graph.render(engine="dot")
|
{typed_ffmpeg_compatible-2.5.0.dist-info → typed_ffmpeg_compatible-2.6.1.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: typed-ffmpeg-compatible
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.6.1
|
4
4
|
Summary: Modern Python FFmpeg wrappers offer comprehensive support for complex filters, complete with detailed typing and documentation.
|
5
5
|
Home-page: https://livingbio.github.io/typed-ffmpeg/
|
6
6
|
License: MIT
|
@@ -0,0 +1,46 @@
|
|
1
|
+
typed_ffmpeg/__init__.py,sha256=122K8EWO5F-1re6YjI_VrTo8tlGGkNbT9Dqlppt5bUI,711
|
2
|
+
typed_ffmpeg/base.py,sha256=77X6z6GPMYyYkJqzYUHJKqPeToQ0ZsA8TQMVXCm7dDA,3248
|
3
|
+
typed_ffmpeg/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
|
+
typed_ffmpeg/common/schema.py,sha256=tGgb13tfiHOEXpOEmjlh92Gg8o4G4b9bzFgiTpupGO8,9724
|
5
|
+
typed_ffmpeg/common/serialize.py,sha256=J-NuMzPoy_qDl9UStVeMnjYVLK-QOUjz5cz4xStPIc4,3471
|
6
|
+
typed_ffmpeg/dag/__init__.py,sha256=RXOgd2Gx0w0bzvnqX9TpFpi5SbTtgh0DQAmCZnYMx_o,315
|
7
|
+
typed_ffmpeg/dag/compile.py,sha256=891eELZB_LeD6RSwRYFjBrcQmd7uvfFiOaQyp5LCUwU,1565
|
8
|
+
typed_ffmpeg/dag/context.py,sha256=a0UWq1yMBznCTapO_FHlelHVdzBGf2juUKoSRKN0jUI,5863
|
9
|
+
typed_ffmpeg/dag/factory.py,sha256=KT50pifjKUXymDM8DvAE1OJYRBahoAmRQ-VGD0L7irA,1561
|
10
|
+
typed_ffmpeg/dag/global_runnable/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
|
+
typed_ffmpeg/dag/global_runnable/global_args.py,sha256=YvYEp7gYquzRhhbBHptq7hq3r210VZtyTZNECIWd0Vc,7571
|
12
|
+
typed_ffmpeg/dag/global_runnable/runnable.py,sha256=PW36CSlwSqKuIPOVD4XfRb9hhwsAdv4wFMNxq8Da83U,5371
|
13
|
+
typed_ffmpeg/dag/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
|
+
typed_ffmpeg/dag/io/_input.py,sha256=O4YJ253W75Ez9lHb1oNCyqt5HmHcAsCIqdN8jZKijmc,7176
|
15
|
+
typed_ffmpeg/dag/io/_output.py,sha256=xayZijYpQzt26xkbCeuC7Z0EICDaArZIW69U1E4Hu8I,12432
|
16
|
+
typed_ffmpeg/dag/io/output_args.py,sha256=SThIhZh9PXs2m6Fz5JsSy8oS-Te7GM_oz7HRuZo0-eI,13901
|
17
|
+
typed_ffmpeg/dag/nodes.py,sha256=ua0wZDcu60nscs5V0CDTCoZbw9uyrYC7vkZrewNVqsU,14778
|
18
|
+
typed_ffmpeg/dag/schema.py,sha256=rkzf9OavVj_pP8dVqVI8wAMaCUe0Q1s5B1MLN35a5Dk,5913
|
19
|
+
typed_ffmpeg/dag/utils.py,sha256=ooGrCOnsvRjjUMhC4JSCc3T2FRL1JLz0CeVSiE9f1hI,1141
|
20
|
+
typed_ffmpeg/dag/validate.py,sha256=hsKzWIKngZWAZCEzU-G0drSfAJyOQd9WXx0c7m0vLLg,5973
|
21
|
+
typed_ffmpeg/exceptions.py,sha256=rNF4bGWDds9P9gzzATEmPMHprXx1Rm4QVtFyIq3pqNc,944
|
22
|
+
typed_ffmpeg/filters.py,sha256=_lBpGZgPHK3KgGVrw-TCdQEsBRuEXVIgwggYNGd80MU,110076
|
23
|
+
typed_ffmpeg/info.py,sha256=-5ME5u16foXWDSdO-1hNw_4twH_5gtkENdiswg4fMAk,4790
|
24
|
+
typed_ffmpeg/probe.py,sha256=iIMKIdlvudCnnJLVKwzQxCOhGlgSqtnCeSgY8mEiHoE,1449
|
25
|
+
typed_ffmpeg/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
26
|
+
typed_ffmpeg/schema.py,sha256=Bb1It8tVVmPcGl2QkhIqSMdsL4ZnwkdBy-5UjS5SEvQ,533
|
27
|
+
typed_ffmpeg/streams/__init__.py,sha256=Nt9uWpcVI1sQLl5Qt_kBCBcWOGZA1vczCQ0qvFbSko0,141
|
28
|
+
typed_ffmpeg/streams/audio.py,sha256=2oNRhb5UetWtlPG3NW73AjUZoFPl303yMv-6W1sGWt0,259054
|
29
|
+
typed_ffmpeg/streams/av.py,sha256=SWcy8Q9hk36ZZJ4WosG08NR-r1f2IzOgZ4tsAZ7nX18,544
|
30
|
+
typed_ffmpeg/streams/channel_layout.py,sha256=ocRb1HM9QgAH4xL0liVs-lXq0WaZyRu1agWz4CaLssU,662
|
31
|
+
typed_ffmpeg/streams/video.py,sha256=cQwHfew75YO_dbZjmpUYd-nXt1JHN0M7suFKKe5UH5s,453576
|
32
|
+
typed_ffmpeg/types.py,sha256=ly3zLtg7KxRa_jsDDrFPAxRZRjTQdWVpiQzOD9NdrFM,4137
|
33
|
+
typed_ffmpeg/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
34
|
+
typed_ffmpeg/utils/escaping.py,sha256=OfX0K2InUuAye7t8DcS6ebCNvRatxy1F4ieBLRfOea4,1203
|
35
|
+
typed_ffmpeg/utils/lazy_eval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
36
|
+
typed_ffmpeg/utils/lazy_eval/operator.py,sha256=AFUUdse1M5QvyO6i78xO3e3hxG2lwITSmgywsQbDWNs,2787
|
37
|
+
typed_ffmpeg/utils/lazy_eval/schema.py,sha256=JCiwxNElHzeSm5ehfgpwgV1fNbZ7cuQzs2u605zEw5Q,4840
|
38
|
+
typed_ffmpeg/utils/run.py,sha256=9fKUFOS6mD4hDm751zVADS31N4yY6dTeoKPy1LImauI,710
|
39
|
+
typed_ffmpeg/utils/snapshot.py,sha256=TLhjMPVzOpWSqoToNy_heWCv3-Hnbk6hK_BuRKAhf0U,773
|
40
|
+
typed_ffmpeg/utils/typing.py,sha256=sx4IN38NGQxgMs5GOtPouM02TcHINxvTreXPUbAbGRc,316
|
41
|
+
typed_ffmpeg/utils/view.py,sha256=RhKqKgRQ3mRaXtnV77yUk40HKgiGZikB4T8IL92I3v4,1780
|
42
|
+
typed_ffmpeg_compatible-2.6.1.dist-info/LICENSE,sha256=8Aaya5i_09Cou2i3QMxTwz6uHGzi_fGA4uhkco07-A4,1066
|
43
|
+
typed_ffmpeg_compatible-2.6.1.dist-info/METADATA,sha256=2n8lmjQpXl8iwWw95GFvYgHXWS8a75qda4YHoqR6FOI,7249
|
44
|
+
typed_ffmpeg_compatible-2.6.1.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
45
|
+
typed_ffmpeg_compatible-2.6.1.dist-info/entry_points.txt,sha256=KfZmNsM16GT_lF1otASIN6E3i6xXHXoB1gMeEdlptjA,44
|
46
|
+
typed_ffmpeg_compatible-2.6.1.dist-info/RECORD,,
|
@@ -1,45 +0,0 @@
|
|
1
|
-
typed_ffmpeg/__init__.py,sha256=WnVr15iPyHWL5ZXtAKah50Jf-rR4QEA8qisBWhMY3KI,596
|
2
|
-
typed_ffmpeg/base.py,sha256=aa0-lPC_P_P61nnQRK0VR9a-b-XhNCPJUdtYWkQA6yE,3169
|
3
|
-
typed_ffmpeg/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
|
-
typed_ffmpeg/common/schema.py,sha256=9oiURyju0YDYPdhg0afrSQ1nOyAK-0v1xSkA6S7Psok,9460
|
5
|
-
typed_ffmpeg/common/serialize.py,sha256=LGBQm6-yNpktJKoHOg7tP7sgo75K54TSe1wGDF2NgZ4,3431
|
6
|
-
typed_ffmpeg/dag/__init__.py,sha256=EGMFaOLWrQRQdy8EJUJbaGLxv0w_H7Z9p6kXwbuXMwI,286
|
7
|
-
typed_ffmpeg/dag/compile.py,sha256=891eELZB_LeD6RSwRYFjBrcQmd7uvfFiOaQyp5LCUwU,1565
|
8
|
-
typed_ffmpeg/dag/context.py,sha256=BPd_sjumfibcu3YHdzRLLC6Vyf3K8_hewEfhBPWumWI,5804
|
9
|
-
typed_ffmpeg/dag/factory.py,sha256=uQQZmRp1wvpDKYIriBEZHu-gehEjLxxjWf6uZTnQNXI,1231
|
10
|
-
typed_ffmpeg/dag/global_runnable/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
|
-
typed_ffmpeg/dag/global_runnable/global_args.py,sha256=-IBuJgOoXO0JqU_P7NRyIUZv2Vpr-vodVTQ92XSwQVo,7579
|
12
|
-
typed_ffmpeg/dag/global_runnable/runnable.py,sha256=3rXAOeg6wKEekdm-g19WG5lG5igxuMLZ1JOiwSogIf8,5289
|
13
|
-
typed_ffmpeg/dag/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
|
-
typed_ffmpeg/dag/io/_input.py,sha256=xz5MWVmQJNd2ryFoDNy094hIfj2RCngIxu12AwPwnUU,7162
|
15
|
-
typed_ffmpeg/dag/io/_output.py,sha256=OCY7XxEdEOfvVqjEsXq5SWPt02Kkx8GkYphIWiAkLts,12415
|
16
|
-
typed_ffmpeg/dag/io/output_args.py,sha256=tilJd5xssVahZP88J8A2urZ3PHJG80Lj6kv1QS8WZzE,13875
|
17
|
-
typed_ffmpeg/dag/nodes.py,sha256=hdgwepV3U-GU2rHCgWor2pYuNyCJcCL2mJtuOWgSGuw,14449
|
18
|
-
typed_ffmpeg/dag/schema.py,sha256=WfY6gJtjnOxJV-Z5hdBcrKUYzpbHv4dT7mYs0Zv9lS0,5926
|
19
|
-
typed_ffmpeg/dag/utils.py,sha256=ooGrCOnsvRjjUMhC4JSCc3T2FRL1JLz0CeVSiE9f1hI,1141
|
20
|
-
typed_ffmpeg/dag/validate.py,sha256=smkTzh4ex6Omqcm5iUWeKX5-B8c4e0oTTVOGWSl9i5I,5786
|
21
|
-
typed_ffmpeg/exceptions.py,sha256=Zz-lKGildItY9a3dD1NHqx5b1U9hO6splbtA8JGce0U,968
|
22
|
-
typed_ffmpeg/filters.py,sha256=OEIG8nWGMHBenm5EJmng6nHYCL-_t5KVun5quF4GhLE,107702
|
23
|
-
typed_ffmpeg/probe.py,sha256=srLG1HIK4V4bX3GdgETiLrkc7LJuTAoG7B36L6htteQ,1408
|
24
|
-
typed_ffmpeg/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
25
|
-
typed_ffmpeg/schema.py,sha256=5ITK1t7g_OLZRyuN69DI920wERsxZZxrV3mV57tql7A,534
|
26
|
-
typed_ffmpeg/streams/__init__.py,sha256=Nt9uWpcVI1sQLl5Qt_kBCBcWOGZA1vczCQ0qvFbSko0,141
|
27
|
-
typed_ffmpeg/streams/audio.py,sha256=OsPnRyFgvVxLmlxDJgRLwM5aLNTUbuFRcpjG4U1Gr4M,252785
|
28
|
-
typed_ffmpeg/streams/av.py,sha256=SWcy8Q9hk36ZZJ4WosG08NR-r1f2IzOgZ4tsAZ7nX18,544
|
29
|
-
typed_ffmpeg/streams/channel_layout.py,sha256=ocRb1HM9QgAH4xL0liVs-lXq0WaZyRu1agWz4CaLssU,662
|
30
|
-
typed_ffmpeg/streams/video.py,sha256=jfHWVt72O1ZgS6uuFPA3GWgByvx5tr1EVa9p6wPKP9o,440022
|
31
|
-
typed_ffmpeg/types.py,sha256=ly3zLtg7KxRa_jsDDrFPAxRZRjTQdWVpiQzOD9NdrFM,4137
|
32
|
-
typed_ffmpeg/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
|
-
typed_ffmpeg/utils/escaping.py,sha256=zGwBMq9DDqy1HCfa8jof_Kx9pwz1iB7MfrPByUXTd6Y,1208
|
34
|
-
typed_ffmpeg/utils/lazy_eval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
35
|
-
typed_ffmpeg/utils/lazy_eval/operator.py,sha256=AFUUdse1M5QvyO6i78xO3e3hxG2lwITSmgywsQbDWNs,2787
|
36
|
-
typed_ffmpeg/utils/lazy_eval/schema.py,sha256=JCiwxNElHzeSm5ehfgpwgV1fNbZ7cuQzs2u605zEw5Q,4840
|
37
|
-
typed_ffmpeg/utils/run.py,sha256=OotkfIFCU9KD_SzhigCtUeqqvcEWlFiMUsBcxms1k3M,709
|
38
|
-
typed_ffmpeg/utils/snapshot.py,sha256=OTEH0Eyzam_r1i5oIC0nKD3hGpVmq4aV5TB2qd5hKuM,813
|
39
|
-
typed_ffmpeg/utils/typing.py,sha256=sx4IN38NGQxgMs5GOtPouM02TcHINxvTreXPUbAbGRc,316
|
40
|
-
typed_ffmpeg/utils/view.py,sha256=rS8gC_uwlUs9Y5UQFj1ur2NjVbZXkZGdGHND0btJpuM,1705
|
41
|
-
typed_ffmpeg_compatible-2.5.0.dist-info/LICENSE,sha256=8Aaya5i_09Cou2i3QMxTwz6uHGzi_fGA4uhkco07-A4,1066
|
42
|
-
typed_ffmpeg_compatible-2.5.0.dist-info/METADATA,sha256=bhXG9rmI7iIzYn0yRU6JVeP1k3FTxHsa_AznmKgSe9E,7249
|
43
|
-
typed_ffmpeg_compatible-2.5.0.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
44
|
-
typed_ffmpeg_compatible-2.5.0.dist-info/entry_points.txt,sha256=KfZmNsM16GT_lF1otASIN6E3i6xXHXoB1gMeEdlptjA,44
|
45
|
-
typed_ffmpeg_compatible-2.5.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{typed_ffmpeg_compatible-2.5.0.dist-info → typed_ffmpeg_compatible-2.6.1.dist-info}/entry_points.txt
RENAMED
File without changes
|