sticker-convert 2.7.12__py3-none-any.whl → 2.7.13__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.
- sticker_convert/converter.py +38 -18
- sticker_convert/version.py +1 -1
- {sticker_convert-2.7.12.dist-info → sticker_convert-2.7.13.dist-info}/METADATA +1 -1
- {sticker_convert-2.7.12.dist-info → sticker_convert-2.7.13.dist-info}/RECORD +8 -8
- {sticker_convert-2.7.12.dist-info → sticker_convert-2.7.13.dist-info}/LICENSE +0 -0
- {sticker_convert-2.7.12.dist-info → sticker_convert-2.7.13.dist-info}/WHEEL +0 -0
- {sticker_convert-2.7.12.dist-info → sticker_convert-2.7.13.dist-info}/entry_points.txt +0 -0
- {sticker_convert-2.7.12.dist-info → sticker_convert-2.7.13.dist-info}/top_level.txt +0 -0
sticker_convert/converter.py
CHANGED
@@ -19,8 +19,8 @@ from sticker_convert.utils.media.codec_info import CodecInfo
|
|
19
19
|
from sticker_convert.utils.media.format_verify import FormatVerify
|
20
20
|
|
21
21
|
if TYPE_CHECKING:
|
22
|
-
from av.video.frame import VideoFrame
|
23
|
-
from av.video.plane import VideoPlane
|
22
|
+
from av.video.frame import VideoFrame
|
23
|
+
from av.video.plane import VideoPlane
|
24
24
|
|
25
25
|
MSG_START_COMP = "[I] Start compressing {} -> {}"
|
26
26
|
MSG_SKIP_COMP = "[S] Compatible file found, skip compress and just copy {} -> {}"
|
@@ -264,14 +264,21 @@ class StickerConvert:
|
|
264
264
|
self.result_size = self.size
|
265
265
|
self.result_step = step_current
|
266
266
|
|
267
|
-
if
|
267
|
+
if (
|
268
|
+
step_upper - step_lower > 0
|
269
|
+
and step_current != step_lower
|
270
|
+
and self.size_max
|
271
|
+
):
|
268
272
|
if self.size <= self.size_max:
|
269
273
|
sign = "<"
|
270
274
|
step_upper = step_current
|
271
275
|
else:
|
272
276
|
sign = ">"
|
273
277
|
step_lower = step_current
|
274
|
-
step_current
|
278
|
+
if step_current == step_lower + 1:
|
279
|
+
step_current = step_lower
|
280
|
+
else:
|
281
|
+
step_current = int(rounding((step_lower + step_upper) / 2))
|
275
282
|
self.recompress(sign)
|
276
283
|
elif self.result:
|
277
284
|
return self.compress_done(self.result, self.result_step)
|
@@ -409,7 +416,7 @@ class StickerConvert:
|
|
409
416
|
|
410
417
|
if suffix in (".tgs", ".lottie", ".json"):
|
411
418
|
self._frames_import_lottie()
|
412
|
-
elif suffix in (".webp", ".apng", "png"):
|
419
|
+
elif suffix in (".webp", ".apng", ".png", ".gif"):
|
413
420
|
# ffmpeg do not support webp decoding (yet)
|
414
421
|
# ffmpeg could fail to decode apng if file is buggy
|
415
422
|
self._frames_import_pillow()
|
@@ -431,6 +438,7 @@ class StickerConvert:
|
|
431
438
|
from av.codec.context import CodecContext
|
432
439
|
from av.container.input import InputContainer
|
433
440
|
from av.video.codeccontext import VideoCodecContext
|
441
|
+
from av.video.frame import VideoFrame
|
434
442
|
|
435
443
|
# Crashes when handling some webm in yuv420p and convert to rgba
|
436
444
|
# https://github.com/PyAV-Org/PyAV/issues/1166
|
@@ -451,19 +459,31 @@ class StickerConvert:
|
|
451
459
|
|
452
460
|
for packet in container.demux(container.streams.video):
|
453
461
|
for frame in context.decode(packet):
|
454
|
-
|
455
|
-
|
456
|
-
else:
|
457
|
-
width = frame.width
|
462
|
+
width_orig = frame.width
|
463
|
+
height_orig = frame.height
|
458
464
|
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
465
|
+
# Need to pad frame to even dimension first
|
466
|
+
if width_orig % 2 == 1 or height_orig % 2 == 1:
|
467
|
+
from av.filter import Graph
|
468
|
+
|
469
|
+
width_new = width_orig + width_orig % 2
|
470
|
+
height_new = height_orig + height_orig % 2
|
471
|
+
|
472
|
+
graph = Graph()
|
473
|
+
in_src = graph.add_buffer(template=container.streams.video[0])
|
474
|
+
pad = graph.add(
|
475
|
+
"pad", f"{width_new}:{height_new}:0:0:color=#00000000"
|
476
|
+
)
|
477
|
+
in_src.link_to(pad)
|
478
|
+
sink = graph.add("buffersink")
|
479
|
+
pad.link_to(sink)
|
480
|
+
graph.configure()
|
481
|
+
|
482
|
+
graph.push(frame)
|
483
|
+
frame = cast(VideoFrame, graph.pull())
|
463
484
|
|
464
485
|
if frame.format.name == "yuv420p":
|
465
486
|
rgb_array = frame.to_ndarray(format="rgb24")
|
466
|
-
cast("np.ndarray[Any, Any]", rgb_array)
|
467
487
|
rgba_array = np.dstack(
|
468
488
|
(
|
469
489
|
rgb_array,
|
@@ -475,13 +495,13 @@ class StickerConvert:
|
|
475
495
|
# Not safe to directly call frame.to_ndarray(format="rgba")
|
476
496
|
# https://github.com/laggykiller/sticker-convert/issues/114
|
477
497
|
frame = frame.reformat(
|
478
|
-
width=width,
|
479
|
-
height=height,
|
480
498
|
format="yuva420p",
|
481
499
|
dst_colorspace=1,
|
482
500
|
)
|
483
501
|
rgba_array = yuva_to_rgba(frame)
|
484
502
|
|
503
|
+
# Remove pixels that was added to make dimensions even
|
504
|
+
rgba_array = rgba_array[0:width_orig, 0:height_orig]
|
485
505
|
self.frames_raw.append(rgba_array)
|
486
506
|
|
487
507
|
def _frames_import_lottie(self) -> None:
|
@@ -727,10 +747,10 @@ class StickerConvert:
|
|
727
747
|
if 0 in alpha:
|
728
748
|
extra_kwargs["transparency"] = 0
|
729
749
|
extra_kwargs["disposal"] = 2
|
730
|
-
im_out = [self.quantize(Image.fromarray(i)) for i in frames_processed]
|
750
|
+
im_out = [self.quantize(Image.fromarray(i)) for i in frames_processed] # type: ignore
|
731
751
|
else:
|
732
752
|
im_out = [
|
733
|
-
self.quantize(Image.fromarray(i).convert("RGB")).convert("RGB")
|
753
|
+
self.quantize(Image.fromarray(i).convert("RGB")).convert("RGB") # type: ignore
|
734
754
|
for i in frames_processed
|
735
755
|
]
|
736
756
|
|
sticker_convert/version.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: sticker-convert
|
3
|
-
Version: 2.7.
|
3
|
+
Version: 2.7.13
|
4
4
|
Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, iMessage. Written in Python.
|
5
5
|
Author-email: laggykiller <chaudominic2@gmail.com>
|
6
6
|
Maintainer-email: laggykiller <chaudominic2@gmail.com>
|
@@ -1,12 +1,12 @@
|
|
1
1
|
sticker_convert/__init__.py,sha256=iQnv6UOOA69c3soAn7ZOnAIubTIQSUxtq1Uhh8xRWvU,102
|
2
2
|
sticker_convert/__main__.py,sha256=6RJauR-SCSSTT3TU7FFB6B6PVwsCxO2xZXtmZ3jc2Is,463
|
3
3
|
sticker_convert/cli.py,sha256=kyfhvMoHq42uLZsYYLrr6b30xsNE93GVZlbGYPFjC2I,18385
|
4
|
-
sticker_convert/converter.py,sha256
|
4
|
+
sticker_convert/converter.py,sha256=XqJyHPWaZCZEbUK_-0CUYmumeUzgOS4lg7zTPH9JYA8,33821
|
5
5
|
sticker_convert/definitions.py,sha256=ZhP2ALCEud-w9ZZD4c3TDG9eHGPZyaAL7zPUsJAbjtE,2073
|
6
6
|
sticker_convert/gui.py,sha256=TqdgFbHBRYgcXWWrsfxLUJ8Zu9WeE11vYyZMX6nalik,30599
|
7
7
|
sticker_convert/job.py,sha256=J4e7dZ48t5EhM3fG-xF1BEQ10WYljx3wWamKXAJjCa8,26000
|
8
8
|
sticker_convert/job_option.py,sha256=1YVhyTfu2cWz3qpAKbdIM11jbL0CJz0ksOYAeg8v6dc,7649
|
9
|
-
sticker_convert/version.py,sha256=
|
9
|
+
sticker_convert/version.py,sha256=jOLhRKwMOcmLYOtzpH73qVOpP1okliTWPuuIgfNT8xw,47
|
10
10
|
sticker_convert/downloaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
11
|
sticker_convert/downloaders/download_base.py,sha256=5R7c8kwahAflOOYrtSQPnBVQ4T-DsprPUMP7G9wcJX4,2824
|
12
12
|
sticker_convert/downloaders/download_kakao.py,sha256=RYrebTxEjKjXAr9xw18r0dMW0dFjSqZxzi8dpaq56TY,8581
|
@@ -92,9 +92,9 @@ sticker_convert/utils/media/apple_png_normalize.py,sha256=LbrQhc7LlYX4I9ek4XJsZE
|
|
92
92
|
sticker_convert/utils/media/codec_info.py,sha256=JHHlfCLSpepYFv6TSL1XqwUJoVOpOPFxurRtduplPGY,12856
|
93
93
|
sticker_convert/utils/media/decrypt_kakao.py,sha256=4wq9ZDRnFkx1WmFZnyEogBofiLGsWQM_X69HlA36578,1947
|
94
94
|
sticker_convert/utils/media/format_verify.py,sha256=Xf94jyqk_6M9IlFGMy0wYIgQKn_yg00nD4XW0CgAbew,5732
|
95
|
-
sticker_convert-2.7.
|
96
|
-
sticker_convert-2.7.
|
97
|
-
sticker_convert-2.7.
|
98
|
-
sticker_convert-2.7.
|
99
|
-
sticker_convert-2.7.
|
100
|
-
sticker_convert-2.7.
|
95
|
+
sticker_convert-2.7.13.dist-info/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
|
96
|
+
sticker_convert-2.7.13.dist-info/METADATA,sha256=dwERdM02NVAJqK7mBwQjAaWMipbyJVr-IRIzSSKJY98,49133
|
97
|
+
sticker_convert-2.7.13.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
98
|
+
sticker_convert-2.7.13.dist-info/entry_points.txt,sha256=MNJ7XyC--ugxi5jS1nzjDLGnxCyLuaGdsVLnJhDHCqs,66
|
99
|
+
sticker_convert-2.7.13.dist-info/top_level.txt,sha256=r9vfnB0l1ZnH5pTH5RvkobnK3Ow9m0RsncaOMAtiAtk,16
|
100
|
+
sticker_convert-2.7.13.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|