typed-ffmpeg-compatible 3.0.0__py3-none-any.whl → 3.0.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/common/cache/list/options.json +1694 -0
- typed_ffmpeg/compile/compile_cli.py +78 -14
- typed_ffmpeg/compile/compile_json.py +38 -0
- typed_ffmpeg/compile/compile_python.py +12 -6
- typed_ffmpeg/dag/global_runnable/runnable.py +6 -6
- typed_ffmpeg/dag/nodes.py +1 -3
- typed_ffmpeg/streams/av.py +36 -3
- {typed_ffmpeg_compatible-3.0.0.dist-info → typed_ffmpeg_compatible-3.0.1.dist-info}/METADATA +1 -1
- {typed_ffmpeg_compatible-3.0.0.dist-info → typed_ffmpeg_compatible-3.0.1.dist-info}/RECORD +12 -10
- {typed_ffmpeg_compatible-3.0.0.dist-info → typed_ffmpeg_compatible-3.0.1.dist-info}/LICENSE +0 -0
- {typed_ffmpeg_compatible-3.0.0.dist-info → typed_ffmpeg_compatible-3.0.1.dist-info}/WHEEL +0 -0
- {typed_ffmpeg_compatible-3.0.0.dist-info → typed_ffmpeg_compatible-3.0.1.dist-info}/entry_points.txt +0 -0
@@ -3,8 +3,15 @@ Compiles FFmpeg filter graphs into command-line arguments.
|
|
3
3
|
|
4
4
|
This module provides functionality to convert the internal DAG (Directed Acyclic Graph)
|
5
5
|
representation of an FFmpeg filter chain into the actual command-line arguments
|
6
|
-
that would be passed to FFmpeg. It
|
7
|
-
|
6
|
+
that would be passed to FFmpeg. It handles the following components:
|
7
|
+
|
8
|
+
1. Global Options: General FFmpeg settings like log level, overwrite flags
|
9
|
+
2. Input Files: Source media files with their specific options
|
10
|
+
3. Filter Graphs: Complex filter chains with proper stream labeling
|
11
|
+
4. Output Files: Destination files with codec and format settings
|
12
|
+
|
13
|
+
The module ensures proper ordering of arguments and handles stream mapping,
|
14
|
+
filter graph syntax, and escaping of special characters in FFmpeg commands.
|
8
15
|
"""
|
9
16
|
|
10
17
|
from __future__ import annotations
|
@@ -15,11 +22,29 @@ from ..exceptions import FFMpegValueError
|
|
15
22
|
from ..schema import Default
|
16
23
|
from ..utils.escaping import escape
|
17
24
|
from ..utils.lazy_eval.schema import LazyValue
|
25
|
+
from ..utils.run import command_line
|
18
26
|
from .context import DAGContext
|
19
27
|
from .validate import validate
|
20
28
|
|
21
29
|
|
22
|
-
def compile(stream: Stream, auto_fix: bool = True) ->
|
30
|
+
def compile(stream: Stream, auto_fix: bool = True) -> str:
|
31
|
+
"""
|
32
|
+
Compile a stream into a command-line string.
|
33
|
+
|
34
|
+
This function takes a Stream object representing an FFmpeg filter graph
|
35
|
+
and converts it into a command-line string that can be passed to FFmpeg.
|
36
|
+
|
37
|
+
Args:
|
38
|
+
stream: The Stream object to compile into a command-line string
|
39
|
+
auto_fix: Whether to automatically fix issues in the stream
|
40
|
+
|
41
|
+
Returns:
|
42
|
+
A command-line string that can be passed to FFmpeg
|
43
|
+
"""
|
44
|
+
return command_line(compile_as_list(stream, auto_fix))
|
45
|
+
|
46
|
+
|
47
|
+
def compile_as_list(stream: Stream, auto_fix: bool = True) -> list[str]:
|
23
48
|
"""
|
24
49
|
Compile a stream into a list of FFmpeg command-line arguments.
|
25
50
|
|
@@ -32,7 +57,8 @@ def compile(stream: Stream, auto_fix: bool = True) -> list[str]:
|
|
32
57
|
4. Output nodes (output files and their options)
|
33
58
|
|
34
59
|
The function validates the graph before compilation to ensure it's properly
|
35
|
-
formed. If auto_fix is enabled, it will attempt to fix common issues
|
60
|
+
formed. If auto_fix is enabled, it will attempt to fix common issues like
|
61
|
+
disconnected nodes or invalid stream mappings.
|
36
62
|
|
37
63
|
Args:
|
38
64
|
stream: The Stream object to compile into arguments
|
@@ -42,6 +68,9 @@ def compile(stream: Stream, auto_fix: bool = True) -> list[str]:
|
|
42
68
|
Returns:
|
43
69
|
A list of strings representing FFmpeg command-line arguments
|
44
70
|
|
71
|
+
Raises:
|
72
|
+
FFMpegValueError: If the stream contains invalid configurations that cannot be fixed
|
73
|
+
|
45
74
|
Example:
|
46
75
|
```python
|
47
76
|
# Create a simple video scaling filter graph
|
@@ -108,6 +137,7 @@ def get_stream_label(stream: Stream, context: DAGContext | None = None) -> str:
|
|
108
137
|
- Multi-output filters: "filterlabel#index"
|
109
138
|
|
110
139
|
Args:
|
140
|
+
stream: The stream to generate a label for
|
111
141
|
context: Optional DAG context for resolving node labels.
|
112
142
|
If not provided, a new context will be built.
|
113
143
|
|
@@ -130,8 +160,16 @@ def get_stream_label(stream: Stream, context: DAGContext | None = None) -> str:
|
|
130
160
|
case AVStream():
|
131
161
|
return f"{get_node_label(stream.node, context)}"
|
132
162
|
case VideoStream():
|
163
|
+
if stream.index is not None:
|
164
|
+
return (
|
165
|
+
f"{get_node_label(stream.node, context)}:v:{stream.index}"
|
166
|
+
)
|
133
167
|
return f"{get_node_label(stream.node, context)}:v"
|
134
168
|
case AudioStream():
|
169
|
+
if stream.index is not None:
|
170
|
+
return (
|
171
|
+
f"{get_node_label(stream.node, context)}:a:{stream.index}"
|
172
|
+
)
|
135
173
|
return f"{get_node_label(stream.node, context)}:a"
|
136
174
|
case _:
|
137
175
|
raise FFMpegValueError(
|
@@ -156,9 +194,12 @@ def get_args_filter_node(node: FilterNode, context: DAGContext) -> list[str]:
|
|
156
194
|
FFmpeg's syntax where input labels are followed by the filter name
|
157
195
|
and parameters, and then output labels.
|
158
196
|
|
197
|
+
The filter string format is:
|
198
|
+
[input_label]filter_name=param1=value1:param2=value2[output_label]
|
199
|
+
|
159
200
|
Args:
|
160
|
-
|
161
|
-
|
201
|
+
node: The FilterNode to generate arguments for
|
202
|
+
context: DAG context for resolving stream labels
|
162
203
|
|
163
204
|
Returns:
|
164
205
|
A list of strings that, when joined, form the filter string
|
@@ -207,9 +248,12 @@ def get_args_input_node(node: InputNode, context: DAGContext) -> list[str]:
|
|
207
248
|
|
208
249
|
This method creates the command-line arguments needed to specify
|
209
250
|
this input file to FFmpeg, including any input-specific options.
|
251
|
+
Options are converted to FFmpeg's command-line format, with boolean
|
252
|
+
options using -option or -nooption syntax.
|
210
253
|
|
211
254
|
Args:
|
212
|
-
|
255
|
+
node: The InputNode to generate arguments for
|
256
|
+
context: DAG context (not used for input nodes)
|
213
257
|
|
214
258
|
Returns:
|
215
259
|
A list of strings representing FFmpeg command-line arguments
|
@@ -237,11 +281,12 @@ def get_args_output_node(node: OutputNode, context: DAGContext) -> list[str]:
|
|
237
281
|
|
238
282
|
This method creates the command-line arguments needed to specify
|
239
283
|
this output file to FFmpeg, including stream mapping and output-specific
|
240
|
-
options like codecs and formats.
|
284
|
+
options like codecs and formats. It handles both direct input streams
|
285
|
+
and filter output streams appropriately.
|
241
286
|
|
242
287
|
Args:
|
243
|
-
|
244
|
-
|
288
|
+
node: The OutputNode to generate arguments for
|
289
|
+
context: DAG context for resolving stream labels
|
245
290
|
|
246
291
|
Returns:
|
247
292
|
A list of strings representing FFmpeg command-line arguments
|
@@ -278,10 +323,12 @@ def get_args_global_node(node: GlobalNode, context: DAGContext) -> list[str]:
|
|
278
323
|
|
279
324
|
This method creates the command-line arguments needed to specify
|
280
325
|
global options to FFmpeg, such as -y for overwrite or -loglevel for
|
281
|
-
controlling log output.
|
326
|
+
controlling log output. Boolean options are converted to -option or
|
327
|
+
-nooption syntax.
|
282
328
|
|
283
329
|
Args:
|
284
|
-
|
330
|
+
node: The GlobalNode to generate arguments for
|
331
|
+
context: DAG context (not used for global options)
|
285
332
|
|
286
333
|
Returns:
|
287
334
|
A list of strings representing FFmpeg command-line arguments
|
@@ -304,7 +351,22 @@ def get_args_global_node(node: GlobalNode, context: DAGContext) -> list[str]:
|
|
304
351
|
|
305
352
|
def get_args(node: Node, context: DAGContext | None = None) -> list[str]:
|
306
353
|
"""
|
307
|
-
Get the arguments for a node.
|
354
|
+
Get the FFmpeg command-line arguments for a specific node.
|
355
|
+
|
356
|
+
This function dispatches to the appropriate argument generation function
|
357
|
+
based on the node type. It handles all node types in the FFmpeg DAG:
|
358
|
+
FilterNode, InputNode, OutputNode, and GlobalNode.
|
359
|
+
|
360
|
+
Args:
|
361
|
+
node: The node to generate arguments for
|
362
|
+
context: Optional DAG context for resolving stream labels.
|
363
|
+
If not provided, a new context will be built.
|
364
|
+
|
365
|
+
Returns:
|
366
|
+
A list of strings representing FFmpeg command-line arguments
|
367
|
+
|
368
|
+
Raises:
|
369
|
+
FFMpegValueError: If the node type is not recognized
|
308
370
|
"""
|
309
371
|
|
310
372
|
context = context or DAGContext.build(node)
|
@@ -330,9 +392,11 @@ def get_node_label(node: Node, context: DAGContext) -> str:
|
|
330
392
|
filter graph notation. The label format depends on the node type:
|
331
393
|
- Input nodes: sequential numbers (0, 1, 2...)
|
332
394
|
- Filter nodes: 's' prefix followed by a number (s0, s1, s2...)
|
395
|
+
- Output nodes: 'out'
|
333
396
|
|
334
397
|
Args:
|
335
|
-
node: The node to get the label for
|
398
|
+
node: The node to get the label for
|
399
|
+
context: DAG context containing node ID mappings
|
336
400
|
|
337
401
|
Returns:
|
338
402
|
The string label for the node
|
@@ -0,0 +1,38 @@
|
|
1
|
+
from ..common.serialize import dumps, loads
|
2
|
+
from ..dag.schema import Stream
|
3
|
+
from .validate import validate
|
4
|
+
|
5
|
+
|
6
|
+
def compile(stream: Stream, auto_fix: bool = True) -> str:
|
7
|
+
"""
|
8
|
+
Compile a stream into a JSON string.
|
9
|
+
|
10
|
+
This function takes a Stream object representing an FFmpeg filter graph
|
11
|
+
and converts it into a JSON string that can be passed to FFmpeg.
|
12
|
+
|
13
|
+
Args:
|
14
|
+
stream: The Stream object to compile into a JSON string
|
15
|
+
auto_fix: Whether to automatically fix issues in the stream
|
16
|
+
|
17
|
+
Returns:
|
18
|
+
A JSON string that can be passed to FFmpeg
|
19
|
+
"""
|
20
|
+
stream = validate(stream, auto_fix=auto_fix)
|
21
|
+
|
22
|
+
return dumps(stream)
|
23
|
+
|
24
|
+
|
25
|
+
def parse(json: str) -> Stream:
|
26
|
+
"""
|
27
|
+
Parse a JSON string into a Stream object.
|
28
|
+
|
29
|
+
This function takes a JSON string that can be passed to FFmpeg
|
30
|
+
and converts it into a Stream object.
|
31
|
+
|
32
|
+
Args:
|
33
|
+
json: The JSON string to parse into a Stream object
|
34
|
+
|
35
|
+
Returns:
|
36
|
+
A Stream object
|
37
|
+
"""
|
38
|
+
return loads(json)
|
@@ -77,7 +77,10 @@ def get_input_var_name(
|
|
77
77
|
case VideoStream():
|
78
78
|
match stream.node:
|
79
79
|
case InputNode():
|
80
|
-
|
80
|
+
if stream.index is not None:
|
81
|
+
return f"{get_output_var_name(stream.node, context)}.video_stream({stream.index})"
|
82
|
+
else:
|
83
|
+
return f"{get_output_var_name(stream.node, context)}.video"
|
81
84
|
case FilterNode():
|
82
85
|
if filter_data_dict[stream.node.name].is_dynamic_output:
|
83
86
|
return f"{get_output_var_name(stream.node, context)}.video({filter_stream_typed_index(stream, context)})"
|
@@ -91,7 +94,10 @@ def get_input_var_name(
|
|
91
94
|
case AudioStream():
|
92
95
|
match stream.node:
|
93
96
|
case InputNode():
|
94
|
-
|
97
|
+
if stream.index is not None:
|
98
|
+
return f"{get_output_var_name(stream.node, context)}.audio_stream({stream.index})"
|
99
|
+
else:
|
100
|
+
return f"{get_output_var_name(stream.node, context)}.audio"
|
95
101
|
case FilterNode():
|
96
102
|
if filter_data_dict[stream.node.name].is_dynamic_output:
|
97
103
|
return f"{get_output_var_name(stream.node, context)}.audio({filter_stream_typed_index(stream, context)})"
|
@@ -191,7 +197,7 @@ def compile_fluent(code: list[str]) -> list[str]:
|
|
191
197
|
return [f"{k.strip()} = {v.strip()}" for k, v in buffer]
|
192
198
|
|
193
199
|
|
194
|
-
def compile(stream: Stream, auto_fix: bool = True, fluent: bool = True) ->
|
200
|
+
def compile(stream: Stream, auto_fix: bool = True, fluent: bool = True) -> str:
|
195
201
|
"""
|
196
202
|
Compile the python code.
|
197
203
|
|
@@ -295,10 +301,10 @@ def compile(stream: Stream, auto_fix: bool = True, fluent: bool = True) -> list[
|
|
295
301
|
if fluent:
|
296
302
|
code = compile_fluent(code)
|
297
303
|
|
298
|
-
return ["import ffmpeg", *code]
|
304
|
+
return "\n".join(["import ffmpeg", *code])
|
299
305
|
|
300
306
|
|
301
|
-
def parse(code:
|
307
|
+
def parse(code: str) -> Stream:
|
302
308
|
"""
|
303
309
|
Parse the python code.
|
304
310
|
|
@@ -312,7 +318,7 @@ def parse(code: list[str]) -> Stream:
|
|
312
318
|
The parsed stream.
|
313
319
|
"""
|
314
320
|
local_vars: dict[str, Any] = {}
|
315
|
-
exec(
|
321
|
+
exec(code, {}, local_vars)
|
316
322
|
result = local_vars["result"]
|
317
323
|
|
318
324
|
assert isinstance(result, Stream)
|
@@ -81,7 +81,7 @@ class GlobalRunable(GlobalArgs):
|
|
81
81
|
def compile(
|
82
82
|
self,
|
83
83
|
cmd: str | list[str] = "ffmpeg",
|
84
|
-
overwrite_output: bool = None,
|
84
|
+
overwrite_output: bool | None = None,
|
85
85
|
auto_fix: bool = True,
|
86
86
|
) -> list[str]:
|
87
87
|
"""
|
@@ -111,7 +111,7 @@ class GlobalRunable(GlobalArgs):
|
|
111
111
|
# Result: ['ffmpeg', '-i', 'input.mp4', 'output.mp4']
|
112
112
|
```
|
113
113
|
"""
|
114
|
-
from ...compile.compile_cli import
|
114
|
+
from ...compile.compile_cli import compile_as_list
|
115
115
|
|
116
116
|
if isinstance(cmd, str):
|
117
117
|
cmd = [cmd]
|
@@ -121,12 +121,12 @@ class GlobalRunable(GlobalArgs):
|
|
121
121
|
elif overwrite_output is False:
|
122
122
|
return self.global_args(n=True).compile(cmd, auto_fix=auto_fix)
|
123
123
|
|
124
|
-
return cmd +
|
124
|
+
return cmd + compile_as_list(self._global_node().stream(), auto_fix=auto_fix)
|
125
125
|
|
126
126
|
def compile_line(
|
127
127
|
self,
|
128
128
|
cmd: str | list[str] = "ffmpeg",
|
129
|
-
overwrite_output: bool = None,
|
129
|
+
overwrite_output: bool | None = None,
|
130
130
|
auto_fix: bool = True,
|
131
131
|
) -> str:
|
132
132
|
"""
|
@@ -165,7 +165,7 @@ class GlobalRunable(GlobalArgs):
|
|
165
165
|
pipe_stdout: bool = False,
|
166
166
|
pipe_stderr: bool = False,
|
167
167
|
quiet: bool = False,
|
168
|
-
overwrite_output: bool = None,
|
168
|
+
overwrite_output: bool | None = None,
|
169
169
|
auto_fix: bool = True,
|
170
170
|
) -> subprocess.Popen[bytes]:
|
171
171
|
"""
|
@@ -222,7 +222,7 @@ class GlobalRunable(GlobalArgs):
|
|
222
222
|
capture_stderr: bool = False,
|
223
223
|
input: bytes | None = None,
|
224
224
|
quiet: bool = False,
|
225
|
-
overwrite_output: bool = None,
|
225
|
+
overwrite_output: bool | None = None,
|
226
226
|
auto_fix: bool = True,
|
227
227
|
) -> tuple[bytes, bytes]:
|
228
228
|
"""
|
typed_ffmpeg/dag/nodes.py
CHANGED
@@ -337,9 +337,7 @@ class FilterableStream(Stream, OutputArgs):
|
|
337
337
|
)
|
338
338
|
|
339
339
|
def __post_init__(self) -> None:
|
340
|
-
if isinstance(self.node, InputNode):
|
341
|
-
assert self.index is None, "Input streams cannot have an index"
|
342
|
-
else:
|
340
|
+
if not isinstance(self.node, InputNode):
|
343
341
|
assert self.index is not None, "Filter streams must have an index"
|
344
342
|
|
345
343
|
|
typed_ffmpeg/streams/av.py
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
from ..dag.nodes import InputNode
|
2
|
-
from ..utils.typing import override
|
3
2
|
from .audio import AudioStream
|
4
3
|
from .video import VideoStream
|
5
4
|
|
@@ -12,11 +11,45 @@ class AVStream(AudioStream, VideoStream):
|
|
12
11
|
node: InputNode
|
13
12
|
|
14
13
|
@property
|
15
|
-
@override
|
16
14
|
def video(self) -> VideoStream:
|
15
|
+
"""
|
16
|
+
Get the video stream from the input node.
|
17
|
+
|
18
|
+
Returns:
|
19
|
+
VideoStream: The video stream from the input node.
|
20
|
+
"""
|
17
21
|
return VideoStream(node=self.node, index=self.index)
|
18
22
|
|
19
23
|
@property
|
20
|
-
@override
|
21
24
|
def audio(self) -> AudioStream:
|
25
|
+
"""
|
26
|
+
Get the audio stream from the input node.
|
27
|
+
|
28
|
+
Returns:
|
29
|
+
AudioStream: The audio stream from the input node.
|
30
|
+
"""
|
22
31
|
return AudioStream(node=self.node, index=self.index)
|
32
|
+
|
33
|
+
def video_stream(self, index: int) -> VideoStream:
|
34
|
+
"""
|
35
|
+
Get the video stream from the input node with a specified index.
|
36
|
+
|
37
|
+
Args:
|
38
|
+
index: The index of the video stream.
|
39
|
+
|
40
|
+
Returns:
|
41
|
+
VideoStream: The video stream from the input node.
|
42
|
+
"""
|
43
|
+
return VideoStream(node=self.node, index=index)
|
44
|
+
|
45
|
+
def audio_stream(self, index: int) -> AudioStream:
|
46
|
+
"""
|
47
|
+
Get the audio stream from the input node with a specified index.
|
48
|
+
|
49
|
+
Args:
|
50
|
+
index: The index of the audio stream.
|
51
|
+
|
52
|
+
Returns:
|
53
|
+
AudioStream: The audio stream from the input node.
|
54
|
+
"""
|
55
|
+
return AudioStream(node=self.node, index=index)
|
{typed_ffmpeg_compatible-3.0.0.dist-info → typed_ffmpeg_compatible-3.0.1.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: typed-ffmpeg-compatible
|
3
|
-
Version: 3.0.
|
3
|
+
Version: 3.0.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
|
@@ -43,24 +43,26 @@ typed_ffmpeg/common/cache/FFMpegFilterManuallyDefined/vstack.json,sha256=MMulT4N
|
|
43
43
|
typed_ffmpeg/common/cache/FFMpegFilterManuallyDefined/xmedian.json,sha256=Er7eTcYZCop6QMZT0OXC9QV6tf76mRBYXjqPIqdKDtU,212
|
44
44
|
typed_ffmpeg/common/cache/FFMpegFilterManuallyDefined/xstack.json,sha256=6Svn1w2FopoYufK0kWCJR7xZndMyTItRs63-TafWMnk,211
|
45
45
|
typed_ffmpeg/common/cache/list/filters.json,sha256=s5-tRP3Jrun2nlj5nV_StPozuC5y3cNcb_xCc4OSulg,2390250
|
46
|
+
typed_ffmpeg/common/cache/list/options.json,sha256=bmODg-h8ZI90IWICSW44CllVkPRnUs6nJ4pOOQ__cqw,40453
|
46
47
|
typed_ffmpeg/common/cache.py,sha256=j0JvfX7jewLpdJWxgo7Pwze0BkUJdYGHX2uGR8BZ-9M,1386
|
47
48
|
typed_ffmpeg/common/schema.py,sha256=qM8yfMX9UU3EAQSNsTrr-SAmyqKx8eQCXTtu3RJWkEk,19673
|
48
49
|
typed_ffmpeg/common/serialize.py,sha256=dLim0DBP5CdJ1JiMV9xEmmh1XMSIhBOWs61EopAL15s,7719
|
49
50
|
typed_ffmpeg/compile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
50
|
-
typed_ffmpeg/compile/compile_cli.py,sha256=
|
51
|
-
typed_ffmpeg/compile/
|
51
|
+
typed_ffmpeg/compile/compile_cli.py,sha256=qwcBtl4-ha7rYAY6dWoM12ngbP8i6QzqwtrQrL3mqC0,14826
|
52
|
+
typed_ffmpeg/compile/compile_json.py,sha256=YCiTyfAnUVSbFr7BiQpmJYs13K5sa-xo77Iih33mb6I,992
|
53
|
+
typed_ffmpeg/compile/compile_python.py,sha256=rsoF4spI3cq6uMHU3iN-j8QByj2yE5pEqjatWCaf0D4,11522
|
52
54
|
typed_ffmpeg/compile/context.py,sha256=macQ3HhEJ73j_WbWYtU9GCQCzcB_KQGAPimcuU-WOac,10946
|
53
55
|
typed_ffmpeg/compile/validate.py,sha256=QsWksdvlRwWw6hnatFo-ABakms1qDXRbEmvMQGRLrD8,9579
|
54
56
|
typed_ffmpeg/dag/__init__.py,sha256=qAApSNqjbZ1DtUaV5bSku9RwG7MpMPa1HJO764cSBt4,849
|
55
57
|
typed_ffmpeg/dag/factory.py,sha256=2IMVKP_2UaTrlGXBg8YDx5KXBqhpScJiJQ87PRrppzY,3147
|
56
58
|
typed_ffmpeg/dag/global_runnable/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
57
59
|
typed_ffmpeg/dag/global_runnable/global_args.py,sha256=ehLtx4v-XxqkmODhpE_gik0r79hs4Sa8TJnRsH9Fj1o,8043
|
58
|
-
typed_ffmpeg/dag/global_runnable/runnable.py,sha256=
|
60
|
+
typed_ffmpeg/dag/global_runnable/runnable.py,sha256=0QGBm3ghM4LFT4H9km9-h_N0w5BR3kTaESRapb-qTv0,11098
|
59
61
|
typed_ffmpeg/dag/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
60
62
|
typed_ffmpeg/dag/io/_input.py,sha256=KRLTSQPEfmgPcPEAJdeWRHZhNsClaJCB9Ac6czMOrmE,7214
|
61
63
|
typed_ffmpeg/dag/io/_output.py,sha256=_no6ffAOABznbLNTki8CYr7pvr4Sa0LweRfn38-cszs,12470
|
62
64
|
typed_ffmpeg/dag/io/output_args.py,sha256=SThIhZh9PXs2m6Fz5JsSy8oS-Te7GM_oz7HRuZo0-eI,13901
|
63
|
-
typed_ffmpeg/dag/nodes.py,sha256=
|
65
|
+
typed_ffmpeg/dag/nodes.py,sha256=lfHChT8JqRs3UUDWtgrWnnXn845HXSD5S1QmHpIUT4U,20526
|
64
66
|
typed_ffmpeg/dag/schema.py,sha256=dSq0o8e9qFazyd55k2yXcxbjoKZJEtqeROd91w1O3Wo,5728
|
65
67
|
typed_ffmpeg/dag/utils.py,sha256=hydh7_kjpOCw8WEGhXMxIXR4Ek-3DeoOt6esInuK2Xw,1941
|
66
68
|
typed_ffmpeg/exceptions.py,sha256=D4SID6WOwkjVV8O8mAjrEDHWn-8BRDnK_jteaDof1SY,2474
|
@@ -72,7 +74,7 @@ typed_ffmpeg/schema.py,sha256=KVtmyGeJutjFot70r6Nj8W8WBqwvfg2-rSgjdhPVh-o,1615
|
|
72
74
|
typed_ffmpeg/sources.py,sha256=ASt0l8FMW82X-70qw72167xpyBY7tQQClVuhy8r0HfU,86026
|
73
75
|
typed_ffmpeg/streams/__init__.py,sha256=Nt9uWpcVI1sQLl5Qt_kBCBcWOGZA1vczCQ0qvFbSko0,141
|
74
76
|
typed_ffmpeg/streams/audio.py,sha256=2oNRhb5UetWtlPG3NW73AjUZoFPl303yMv-6W1sGWt0,259054
|
75
|
-
typed_ffmpeg/streams/av.py,sha256=
|
77
|
+
typed_ffmpeg/streams/av.py,sha256=Nu6M7uV4aMNQf_kxADZuBdpDwFx_B7Z7x0p5j32n9iA,1500
|
76
78
|
typed_ffmpeg/streams/channel_layout.py,sha256=hGagaoc1tnWS8K1yiITp4f_92qq5e7C_zB15bHOL0DI,1162
|
77
79
|
typed_ffmpeg/streams/video.py,sha256=cQwHfew75YO_dbZjmpUYd-nXt1JHN0M7suFKKe5UH5s,453576
|
78
80
|
typed_ffmpeg/types.py,sha256=ly3zLtg7KxRa_jsDDrFPAxRZRjTQdWVpiQzOD9NdrFM,4137
|
@@ -86,8 +88,8 @@ typed_ffmpeg/utils/run.py,sha256=mSoAdcvD-InldqkRgWNc8iXKgJJoEMAOE4PL2gVmtqw,217
|
|
86
88
|
typed_ffmpeg/utils/snapshot.py,sha256=mKILRm6qiQV2egaD-70MSUEl-DFoLD5w_v9GZIequI4,2181
|
87
89
|
typed_ffmpeg/utils/typing.py,sha256=DBQn_gCF8C_DTwsfMHeCgfnNUROwAjlIcHrQ7lNDOoE,1187
|
88
90
|
typed_ffmpeg/utils/view.py,sha256=QCSlQoQkRBI-T0sWjiywGgM9DlKd8Te3CB2ZYX-pEVU,3413
|
89
|
-
typed_ffmpeg_compatible-3.0.
|
90
|
-
typed_ffmpeg_compatible-3.0.
|
91
|
-
typed_ffmpeg_compatible-3.0.
|
92
|
-
typed_ffmpeg_compatible-3.0.
|
93
|
-
typed_ffmpeg_compatible-3.0.
|
91
|
+
typed_ffmpeg_compatible-3.0.1.dist-info/LICENSE,sha256=8Aaya5i_09Cou2i3QMxTwz6uHGzi_fGA4uhkco07-A4,1066
|
92
|
+
typed_ffmpeg_compatible-3.0.1.dist-info/METADATA,sha256=LfhzfDCrQibFfmOQwWYOh1oPPbkA8LBPkJjvQW_Vmag,7249
|
93
|
+
typed_ffmpeg_compatible-3.0.1.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
94
|
+
typed_ffmpeg_compatible-3.0.1.dist-info/entry_points.txt,sha256=KfZmNsM16GT_lF1otASIN6E3i6xXHXoB1gMeEdlptjA,44
|
95
|
+
typed_ffmpeg_compatible-3.0.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{typed_ffmpeg_compatible-3.0.0.dist-info → typed_ffmpeg_compatible-3.0.1.dist-info}/entry_points.txt
RENAMED
File without changes
|