yta-video-opengl 0.0.20__tar.gz → 0.0.22__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 (31) hide show
  1. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/PKG-INFO +2 -1
  2. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/pyproject.toml +5 -1
  3. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/audio.py +5 -0
  4. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/complete/frame_combinator.py +1 -90
  5. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/complete/frame_generator.py +42 -1
  6. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/complete/frame_wrapper.py +13 -0
  7. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/complete/timeline.py +199 -118
  8. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/complete/track/__init__.py +14 -7
  9. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/complete/track/parts.py +99 -62
  10. yta_video_opengl-0.0.22/src/yta_video_opengl/media.py +347 -0
  11. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/reader/cache/__init__.py +9 -5
  12. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/tests.py +34 -1
  13. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/LICENSE +0 -0
  14. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/README.md +0 -0
  15. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/__init__.py +0 -0
  16. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/classes.py +0 -0
  17. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/complete/__init__.py +0 -0
  18. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/complete/track/media/__init__.py +0 -0
  19. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/complete/track/utils.py +0 -0
  20. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/nodes/__init__.py +0 -0
  21. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/nodes/audio/__init__.py +0 -0
  22. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/nodes/video/__init__.py +0 -0
  23. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/nodes/video/opengl.py +0 -0
  24. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/reader/__init__.py +0 -0
  25. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/reader/cache/audio.py +0 -0
  26. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/reader/cache/utils.py +0 -0
  27. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/reader/cache/video.py +0 -0
  28. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/t.py +0 -0
  29. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/utils.py +0 -0
  30. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/video.py +0 -0
  31. {yta_video_opengl-0.0.20 → yta_video_opengl-0.0.22}/src/yta_video_opengl/writer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: yta-video-opengl
3
- Version: 0.0.20
3
+ Version: 0.0.22
4
4
  Summary: Youtube Autonomous Video OpenGL Module
5
5
  Author: danialcala94
6
6
  Author-email: danielalcalavalera@gmail.com
@@ -10,6 +10,7 @@ Classifier: Programming Language :: Python :: 3.9
10
10
  Requires-Dist: av (>=0.0.1,<19.0.0)
11
11
  Requires-Dist: moderngl (>=0.0.1,<9.0.0)
12
12
  Requires-Dist: numpy (>=0.0.1,<9.0.0)
13
+ Requires-Dist: pillow (>=0.0.1,<99.0.0)
13
14
  Requires-Dist: quicktions (>=0.0.1,<9.0.0)
14
15
  Requires-Dist: yta_timer (>0.0.1,<1.0.0)
15
16
  Requires-Dist: yta_validation (>=0.0.1,<1.0.0)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "yta-video-opengl"
3
- version = "0.0.20"
3
+ version = "0.0.22"
4
4
  description = "Youtube Autonomous Video OpenGL Module"
5
5
  authors = [
6
6
  {name = "danialcala94",email = "danielalcalavalera@gmail.com"}
@@ -15,6 +15,10 @@ dependencies = [
15
15
  "moderngl (>=0.0.1,<9.0.0)",
16
16
  "numpy (>=0.0.1,<9.0.0)",
17
17
  "quicktions (>=0.0.1,<9.0.0)",
18
+ # I need this 'pillow' just to read an image
19
+ # and transform into a numpy array to be able
20
+ # to handle the ImageMedia
21
+ "pillow (>=0.0.1,<99.0.0)"
18
22
  ]
19
23
 
20
24
  [tool.poetry]
@@ -1,3 +1,8 @@
1
+ """
2
+ TODO: This class has not been refactored nor
3
+ tested. I need to put some love on it to make
4
+ it work and test that it is working properly.
5
+ """
1
6
  from yta_video_opengl.reader import VideoReader
2
7
  from yta_video_opengl.writer import VideoWriter
3
8
  from yta_video_opengl.t import T
@@ -201,93 +201,4 @@ class AudioFrameCombinator:
201
201
  )
202
202
  out.sample_rate = sample_rate
203
203
 
204
- return out
205
-
206
- # TODO: This method below has been refactored
207
- # to the 'sum_tracks_frames', so delete it
208
- # when the one above is working well
209
- def mix_audio_frames_by_index(
210
- tracks_frames,
211
- sample_rate: int,
212
- layout = 'stereo',
213
- ):
214
- """
215
- Combine all the columns of the given
216
- matrix of audio frames 'tracks_frames'.
217
- The rows are the different tracks and
218
- the columns are the frame at that 't'
219
- moment of each of those tracks.
220
-
221
- The 'tracks_frames' matrix needs to be
222
- pre-processed to have only 1 single
223
- frame to combine, so we concatenate
224
- all the frames if more than 1 per
225
- column.
226
- """
227
- # TODO: Please, improve and clean all this
228
- # code is so sh*tty, and make utils to
229
- # combine and those things, not here...
230
- # Also the formats, make them dynamic and
231
- # based on the output that is defined here
232
- # in the Timeline class.
233
- mixed_frames = []
234
-
235
- # Iterate by columns (each row is a track)
236
- for frames_at_index in zip(*tracks_frames):
237
- arrays = []
238
- for f in frames_at_index:
239
- # Resample to output expected values
240
- # TODO: This must be dynamic depending
241
- # on the track values
242
- resampler = AudioResampler(format = 'fltp', layout = 'stereo', rate = sample_rate)
243
- arr = resampler.resample(f)
244
-
245
- arr = f.to_ndarray()
246
-
247
- # TODO: This below must change depending
248
- # on the expected output, for us and now
249
- # it is float32, fltp, stereo, 44_100
250
- # Same format
251
- if arr.dtype == np.int16:
252
- arr = arr.astype(np.float32) / 32768.0
253
-
254
- # Same layout (number of channels)
255
- if arr.shape[0] == 1:
256
- return np.repeat(arr, 2, axis = 0)
257
- # elif arr.dtype == np.float32:
258
- # # Ya está en [-1,1], no lo toques
259
- # pass
260
-
261
- arrays.append(arr)
262
-
263
- # Alinear longitudes
264
- max_len = max(a.shape[1] for a in arrays)
265
- stacked = []
266
- for a in arrays:
267
- buf = np.zeros((a.shape[0], max_len), dtype = np.float32)
268
- buf[:, :a.shape[1]] = a
269
- stacked.append(buf)
270
-
271
- # Mezcla
272
- mix = np.sum(stacked, axis = 0) / len(stacked)
273
- #mix = np.sum(stacked, axis = 0)
274
-
275
- # Limitar al rango [-1,1]
276
- mix = np.clip(mix, -1.0, 1.0)
277
-
278
- # Crear frame de salida
279
- # TODO: What about the 'format' if they
280
- # are all different (?)
281
- out = AudioFrame.from_ndarray(mix, format = 'fltp', layout = layout)
282
- out.sample_rate = sample_rate
283
- # TODO: This will be written later when
284
- # encoding
285
- # out.pts = frames_at_index[0].pts
286
- # out.time_base = frames_at_index[0].time_base
287
-
288
- print(mix.min(), mix.max())
289
-
290
- mixed_frames.append(out)
291
-
292
- return mixed_frames
293
-
204
+ return out
@@ -28,6 +28,9 @@ class _FrameGenerator:
28
28
  Class to generate frames as numpy arrays.
29
29
  """
30
30
 
31
+ # TODO: I have some library doing this with
32
+ # colors and numpy frames, so please refactor
33
+
31
34
  def full_black(
32
35
  self,
33
36
  size: tuple[int, int] = (1920, 1080),
@@ -57,8 +60,27 @@ class _FrameGenerator:
57
60
  """
58
61
  # TODO: I think 'ones' only work if dtype
59
62
  # is int
60
- return np.ones(
63
+ return np.full(
64
+ shape = (size[1], size[0], 3),
65
+ fill_value = (255, 255, 255),
66
+ dtype = dtype
67
+ )
68
+
69
+ def full_red(
70
+ self,
71
+ size: tuple[int, int] = (1920, 1080),
72
+ dtype: np.dtype = np.uint8
73
+ ):
74
+ """
75
+ Get a numpy array that represents a full
76
+ red frame of the given 'size' and with
77
+ the given 'dtype'.
78
+ """
79
+ # TODO: I think 'ones' only work if dtype
80
+ # is int
81
+ return np.full(
61
82
  shape = (size[1], size[0], 3),
83
+ fill_value = (255, 0, 0),
62
84
  dtype = dtype
63
85
  )
64
86
 
@@ -115,6 +137,25 @@ class _BackgroundFrameGenerator:
115
137
  time_base = time_base
116
138
  )
117
139
 
140
+ def full_red(
141
+ self,
142
+ size: tuple[int, int] = (1920, 1080),
143
+ dtype: np.dtype = np.uint8,
144
+ format: str = 'rgb24',
145
+ pts: Union[int, None] = None,
146
+ time_base: Union['Fraction', None] = None
147
+ ) -> VideoFrame:
148
+ """
149
+ Get a video frame that is completely red
150
+ and of the given 'size'.
151
+ """
152
+ return numpy_to_video_frame(
153
+ frame = self._frame_generator.full_red(size, dtype),
154
+ format = format,
155
+ pts = pts,
156
+ time_base = time_base
157
+ )
158
+
118
159
  class VideoFrameGenerator:
119
160
  """
120
161
  Class to wrap the functionality related to
@@ -5,6 +5,12 @@ from typing import Union
5
5
 
6
6
 
7
7
  IS_FROM_EMPTY_PART_METADATA = 'is_from_empty_part'
8
+ """
9
+ Metadata key to indicate if the frame
10
+ has been generated by an empty part
11
+ and should be ignored when trying to
12
+ combine with others.
13
+ """
8
14
 
9
15
  class _FrameWrappedBase:
10
16
  """
@@ -35,7 +41,14 @@ class _FrameWrappedBase:
35
41
  ParameterValidator.validate_mandatory_dict('metadata', metadata)
36
42
 
37
43
  self._frame: Union[VideoFrame, AudioFrame] = frame
44
+ """
45
+ The VideoFrame or AudioFrame pyav instance.
46
+ """
38
47
  self.metadata: dict = metadata or {}
48
+ """
49
+ The metadata we want to include with the
50
+ frame.
51
+ """
39
52
 
40
53
  def __getattr__(
41
54
  self,