halib 0.2.15__tar.gz → 0.2.17__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 (56) hide show
  1. {halib-0.2.15 → halib-0.2.17}/PKG-INFO +2 -2
  2. {halib-0.2.15 → halib-0.2.17}/README.md +1 -1
  3. {halib-0.2.15 → halib-0.2.17}/halib/filetype/videofile.py +28 -1
  4. {halib-0.2.15 → halib-0.2.17}/halib.egg-info/PKG-INFO +2 -2
  5. {halib-0.2.15 → halib-0.2.17}/setup.py +1 -1
  6. {halib-0.2.15 → halib-0.2.17}/.gitignore +0 -0
  7. {halib-0.2.15 → halib-0.2.17}/GDriveFolder.txt +0 -0
  8. {halib-0.2.15 → halib-0.2.17}/LICENSE.txt +0 -0
  9. {halib-0.2.15 → halib-0.2.17}/MANIFEST.in +0 -0
  10. {halib-0.2.15 → halib-0.2.17}/halib/__init__.py +0 -0
  11. {halib-0.2.15 → halib-0.2.17}/halib/common/__init__.py +0 -0
  12. {halib-0.2.15 → halib-0.2.17}/halib/common/common.py +0 -0
  13. {halib-0.2.15 → halib-0.2.17}/halib/common/rich_color.py +0 -0
  14. {halib-0.2.15 → halib-0.2.17}/halib/exp/__init__.py +0 -0
  15. {halib-0.2.15 → halib-0.2.17}/halib/exp/core/__init__.py +0 -0
  16. {halib-0.2.15 → halib-0.2.17}/halib/exp/core/base_config.py +0 -0
  17. {halib-0.2.15 → halib-0.2.17}/halib/exp/core/base_exp.py +0 -0
  18. {halib-0.2.15 → halib-0.2.17}/halib/exp/core/param_gen.py +0 -0
  19. {halib-0.2.15 → halib-0.2.17}/halib/exp/core/wandb_op.py +0 -0
  20. {halib-0.2.15 → halib-0.2.17}/halib/exp/data/__init__.py +0 -0
  21. {halib-0.2.15 → halib-0.2.17}/halib/exp/data/dataclass_util.py +0 -0
  22. {halib-0.2.15 → halib-0.2.17}/halib/exp/data/dataset.py +0 -0
  23. {halib-0.2.15 → halib-0.2.17}/halib/exp/data/torchloader.py +0 -0
  24. {halib-0.2.15 → halib-0.2.17}/halib/exp/perf/__init__.py +0 -0
  25. {halib-0.2.15 → halib-0.2.17}/halib/exp/perf/flop_calc.py +0 -0
  26. {halib-0.2.15 → halib-0.2.17}/halib/exp/perf/gpu_mon.py +0 -0
  27. {halib-0.2.15 → halib-0.2.17}/halib/exp/perf/perfcalc.py +0 -0
  28. {halib-0.2.15 → halib-0.2.17}/halib/exp/perf/perfmetrics.py +0 -0
  29. {halib-0.2.15 → halib-0.2.17}/halib/exp/perf/perftb.py +0 -0
  30. {halib-0.2.15 → halib-0.2.17}/halib/exp/perf/profiler.py +0 -0
  31. {halib-0.2.15 → halib-0.2.17}/halib/exp/viz/__init__.py +0 -0
  32. {halib-0.2.15 → halib-0.2.17}/halib/exp/viz/plot.py +0 -0
  33. {halib-0.2.15 → halib-0.2.17}/halib/filetype/__init__.py +0 -0
  34. {halib-0.2.15 → halib-0.2.17}/halib/filetype/csvfile.py +0 -0
  35. {halib-0.2.15 → halib-0.2.17}/halib/filetype/ipynb.py +0 -0
  36. {halib-0.2.15 → halib-0.2.17}/halib/filetype/jsonfile.py +0 -0
  37. {halib-0.2.15 → halib-0.2.17}/halib/filetype/textfile.py +0 -0
  38. {halib-0.2.15 → halib-0.2.17}/halib/filetype/yamlfile.py +0 -0
  39. {halib-0.2.15 → halib-0.2.17}/halib/online/__init__.py +0 -0
  40. {halib-0.2.15 → halib-0.2.17}/halib/online/gdrive.py +0 -0
  41. {halib-0.2.15 → halib-0.2.17}/halib/online/gdrive_mkdir.py +0 -0
  42. {halib-0.2.15 → halib-0.2.17}/halib/online/projectmake.py +0 -0
  43. {halib-0.2.15 → halib-0.2.17}/halib/online/tele_noti.py +0 -0
  44. {halib-0.2.15 → halib-0.2.17}/halib/system/__init__.py +0 -0
  45. {halib-0.2.15 → halib-0.2.17}/halib/system/_list_pc.csv +0 -0
  46. {halib-0.2.15 → halib-0.2.17}/halib/system/cmd.py +0 -0
  47. {halib-0.2.15 → halib-0.2.17}/halib/system/filesys.py +0 -0
  48. {halib-0.2.15 → halib-0.2.17}/halib/system/path.py +0 -0
  49. {halib-0.2.15 → halib-0.2.17}/halib/utils/__init__.py +0 -0
  50. {halib-0.2.15 → halib-0.2.17}/halib/utils/dict.py +0 -0
  51. {halib-0.2.15 → halib-0.2.17}/halib/utils/list.py +0 -0
  52. {halib-0.2.15 → halib-0.2.17}/halib.egg-info/SOURCES.txt +0 -0
  53. {halib-0.2.15 → halib-0.2.17}/halib.egg-info/dependency_links.txt +0 -0
  54. {halib-0.2.15 → halib-0.2.17}/halib.egg-info/requires.txt +0 -0
  55. {halib-0.2.15 → halib-0.2.17}/halib.egg-info/top_level.txt +0 -0
  56. {halib-0.2.15 → halib-0.2.17}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: halib
3
- Version: 0.2.15
3
+ Version: 0.2.17
4
4
  Summary: Small library for common tasks
5
5
  Author: Hoang Van Ha
6
6
  Author-email: hoangvanhauit@gmail.com
@@ -54,7 +54,7 @@ Dynamic: summary
54
54
 
55
55
  # Helper package for coding and automation
56
56
 
57
- **Version 0.2.15**
57
+ **Version 0.2.17**
58
58
  + update `exp.perf.profiler`: add `enabled` flag to enable/disable profiling dynamically, also add `measure` context manager to simplify measuring code blocks.
59
59
 
60
60
  **Version 0.2.13**
@@ -1,6 +1,6 @@
1
1
  # Helper package for coding and automation
2
2
 
3
- **Version 0.2.15**
3
+ **Version 0.2.17**
4
4
  + update `exp.perf.profiler`: add `enabled` flag to enable/disable profiling dynamically, also add `measure` context manager to simplify measuring code blocks.
5
5
 
6
6
  **Version 0.2.13**
@@ -96,6 +96,34 @@ class VideoUtils:
96
96
  return dfmk["video_meta"].copy()
97
97
 
98
98
 
99
+ # -----------------------------
100
+ # FFmpeg Horizontal Stack
101
+ # -----------------------------
102
+ @staticmethod
103
+ def hstack(video_files, output_file):
104
+ """Horizontally stack multiple videos using FFmpeg."""
105
+ tmp_file = "video_list.txt"
106
+ try:
107
+ with open(tmp_file, "w") as f:
108
+ for video in video_files:
109
+ f.write(f"file '{video}'\n")
110
+
111
+ ffmpeg_cmd = (
112
+ f"ffmpeg -f concat -safe 0 -i {tmp_file} "
113
+ f'-filter_complex "[0:v][1:v][2:v]hstack=inputs={len(video_files)}[v]" '
114
+ f'-map "[v]" -c:v libx264 -preset fast -crf 22 {output_file}'
115
+ )
116
+
117
+ os.system(ffmpeg_cmd)
118
+ print(f"[INFO] Video stacked successfully: {output_file}")
119
+
120
+ except Exception as e:
121
+ print(f"[ERROR] Video stacking failed: {e}")
122
+ finally:
123
+ if os.path.exists(tmp_file):
124
+ os.remove(tmp_file)
125
+
126
+
99
127
  class VideoResolution(Enum):
100
128
  VR480p = "720x480"
101
129
  VR576p = "1280x720"
@@ -146,7 +174,6 @@ def trim_video(source, destination, start_time, end_time):
146
174
 
147
175
  progress_bar = None
148
176
 
149
-
150
177
  def on_progress(bytes_done, total_bytes):
151
178
  global progress_bar
152
179
  if progress_bar is None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: halib
3
- Version: 0.2.15
3
+ Version: 0.2.17
4
4
  Summary: Small library for common tasks
5
5
  Author: Hoang Van Ha
6
6
  Author-email: hoangvanhauit@gmail.com
@@ -54,7 +54,7 @@ Dynamic: summary
54
54
 
55
55
  # Helper package for coding and automation
56
56
 
57
- **Version 0.2.15**
57
+ **Version 0.2.17**
58
58
  + update `exp.perf.profiler`: add `enabled` flag to enable/disable profiling dynamically, also add `measure` context manager to simplify measuring code blocks.
59
59
 
60
60
  **Version 0.2.13**
@@ -8,7 +8,7 @@ with open("requirements.txt") as f:
8
8
 
9
9
  setuptools.setup(
10
10
  name="halib",
11
- version="0.2.15",
11
+ version="0.2.17",
12
12
  author="Hoang Van Ha",
13
13
  author_email="hoangvanhauit@gmail.com",
14
14
  description="Small library for common tasks",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes