talks-reducer 0.5.0__py3-none-any.whl → 0.5.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.
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.5.0"
5
+ __version__ = "0.5.1"
talks_reducer/cli.py CHANGED
@@ -18,7 +18,7 @@ try:
18
18
  except Exception: # pragma: no cover - fallback if metadata file missing
19
19
  _about_version = ""
20
20
  from .ffmpeg import FFmpegNotFoundError
21
- from .models import ProcessingOptions
21
+ from .models import ProcessingOptions, default_temp_folder
22
22
  from .pipeline import speed_up_video
23
23
  from .progress import TqdmProgressReporter
24
24
 
@@ -55,7 +55,7 @@ def _build_parser() -> argparse.ArgumentParser:
55
55
  parser.add_argument(
56
56
  "--temp_folder",
57
57
  type=str,
58
- default="TEMP",
58
+ default=str(default_temp_folder()),
59
59
  help="The file path of the temporary working folder.",
60
60
  )
61
61
  parser.add_argument(
talks_reducer/ffmpeg.py CHANGED
@@ -52,6 +52,9 @@ def find_ffmpeg() -> Optional[str]:
52
52
  "C:\\ProgramData\\chocolatey\\bin\\ffmpeg.exe",
53
53
  "C:\\Program Files\\ffmpeg\\bin\\ffmpeg.exe",
54
54
  "C:\\ffmpeg\\bin\\ffmpeg.exe",
55
+ "/usr/local/bin/ffmpeg",
56
+ "/opt/homebrew/bin/ffmpeg",
57
+ "/usr/bin/ffmpeg",
55
58
  "ffmpeg",
56
59
  ]
57
60
 
@@ -92,6 +95,9 @@ def find_ffprobe() -> Optional[str]:
92
95
  "C:\\ProgramData\\chocolatey\\bin\\ffprobe.exe",
93
96
  "C:\\Program Files\\ffmpeg\\bin\\ffprobe.exe",
94
97
  "C:\\ffmpeg\\bin\\ffprobe.exe",
98
+ "/usr/local/bin/ffprobe",
99
+ "/opt/homebrew/bin/ffprobe",
100
+ "/usr/bin/ffprobe",
95
101
  "ffprobe",
96
102
  ]
97
103
 
talks_reducer/gui.py CHANGED
@@ -20,7 +20,7 @@ try:
20
20
  from .cli import gather_input_files
21
21
  from .cli import main as cli_main
22
22
  from .ffmpeg import FFmpegNotFoundError
23
- from .models import ProcessingOptions
23
+ from .models import ProcessingOptions, default_temp_folder
24
24
  from .pipeline import speed_up_video
25
25
  from .progress import ProgressHandle, SignalProgressReporter
26
26
  except ImportError: # pragma: no cover - handled at runtime
@@ -34,7 +34,7 @@ except ImportError: # pragma: no cover - handled at runtime
34
34
  from talks_reducer.cli import gather_input_files
35
35
  from talks_reducer.cli import main as cli_main
36
36
  from talks_reducer.ffmpeg import FFmpegNotFoundError
37
- from talks_reducer.models import ProcessingOptions
37
+ from talks_reducer.models import ProcessingOptions, default_temp_folder
38
38
  from talks_reducer.pipeline import speed_up_video
39
39
  from talks_reducer.progress import ProgressHandle, SignalProgressReporter
40
40
 
@@ -480,7 +480,7 @@ class TalksReducerGUI:
480
480
  self.advanced_frame, "Output file", self.output_var, row=0, browse=True
481
481
  )
482
482
 
483
- self.temp_var = self.tk.StringVar(value="TEMP")
483
+ self.temp_var = self.tk.StringVar(value=str(default_temp_folder()))
484
484
  self._add_entry(
485
485
  self.advanced_frame, "Temp folder", self.temp_var, row=1, browse=True
486
486
  )
talks_reducer/models.py CHANGED
@@ -2,11 +2,36 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from dataclasses import dataclass
5
+ import os
6
+ import sys
7
+ import tempfile
8
+ from dataclasses import dataclass, field
6
9
  from pathlib import Path
7
10
  from typing import Optional
8
11
 
9
12
 
13
+ def default_temp_folder() -> Path:
14
+ """Return an OS-appropriate default temporary workspace directory."""
15
+
16
+ if sys.platform == "darwin":
17
+ base = Path.home() / "Library" / "Application Support" / "talks-reducer"
18
+ elif sys.platform == "win32":
19
+ appdata = os.environ.get("LOCALAPPDATA") or os.environ.get("APPDATA")
20
+ base = (
21
+ Path(appdata)
22
+ if appdata
23
+ else Path.home() / "AppData" / "Local" / "talks-reducer"
24
+ )
25
+ else:
26
+ xdg_runtime = os.environ.get("XDG_RUNTIME_DIR")
27
+ if xdg_runtime:
28
+ base = Path(xdg_runtime) / "talks-reducer"
29
+ else:
30
+ base = Path(tempfile.gettempdir()) / "talks-reducer"
31
+
32
+ return base / "temp"
33
+
34
+
10
35
  @dataclass(frozen=True)
11
36
  class ProcessingOptions:
12
37
  """Configuration values controlling how the talks reducer processes media.
@@ -24,7 +49,7 @@ class ProcessingOptions:
24
49
  sounded_speed: float = 1.0
25
50
  frame_spreadage: int = 2
26
51
  audio_fade_envelope_size: int = 400
27
- temp_folder: Path = Path("TEMP")
52
+ temp_folder: Path = field(default_factory=default_temp_folder)
28
53
  small: bool = False
29
54
 
30
55
 
talks_reducer/pipeline.py CHANGED
@@ -46,7 +46,7 @@ def _input_to_output_filename(filename: Path, small: bool = False) -> Path:
46
46
 
47
47
  def _create_path(path: Path) -> None:
48
48
  try:
49
- path.mkdir()
49
+ path.mkdir(parents=True, exist_ok=True)
50
50
  except OSError as exc: # pragma: no cover - defensive logging
51
51
  raise AssertionError(
52
52
  "Creation of the directory failed. (The TEMP folder may already exist. Delete or rename it, and try again.)"
talks_reducer/server.py CHANGED
@@ -296,6 +296,7 @@ def build_interface() -> gr.Blocks:
296
296
  inputs=[file_input, small_checkbox],
297
297
  outputs=[video_output, log_output, summary_output, download_output],
298
298
  queue=True,
299
+ api_name="process_video",
299
300
  )
300
301
 
301
302
  demo.queue(default_concurrency_limit=1)
@@ -0,0 +1,102 @@
1
+ """Command-line helper for sending videos to the Talks Reducer server."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ import shutil
7
+ from pathlib import Path
8
+ from typing import Optional, Sequence, Tuple
9
+
10
+ from gradio_client import Client
11
+ from gradio_client import file as gradio_file
12
+
13
+
14
+ def send_video(
15
+ input_path: Path,
16
+ output_path: Optional[Path],
17
+ server_url: str,
18
+ small: bool = False,
19
+ ) -> Tuple[Path, str, str]:
20
+ """Upload *input_path* to the Gradio server and download the processed video."""
21
+
22
+ if not input_path.exists():
23
+ raise FileNotFoundError(f"Input file does not exist: {input_path}")
24
+
25
+ client = Client(server_url)
26
+ prediction = client.predict(
27
+ gradio_file(str(input_path)),
28
+ bool(small),
29
+ api_name="/process_video",
30
+ )
31
+
32
+ try:
33
+ _, log_text, summary, download_path = prediction
34
+ except (TypeError, ValueError) as exc: # pragma: no cover - defensive
35
+ raise RuntimeError("Unexpected response from server") from exc
36
+
37
+ if not download_path:
38
+ raise RuntimeError("Server did not return a processed file")
39
+
40
+ download_source = Path(str(download_path))
41
+ if output_path is None:
42
+ destination = Path.cwd() / download_source.name
43
+ else:
44
+ destination = output_path
45
+ if destination.is_dir():
46
+ destination = destination / download_source.name
47
+
48
+ destination.parent.mkdir(parents=True, exist_ok=True)
49
+ if download_source.resolve() != destination.resolve():
50
+ shutil.copy2(download_source, destination)
51
+
52
+ return destination, summary, log_text
53
+
54
+
55
+ def _build_parser() -> argparse.ArgumentParser:
56
+ parser = argparse.ArgumentParser(
57
+ description="Send a video to a running talks-reducer server and download the result.",
58
+ )
59
+ parser.add_argument("input", type=Path, help="Path to the video file to upload.")
60
+ parser.add_argument(
61
+ "--server",
62
+ default="http://127.0.0.1:9005/",
63
+ help="Base URL for the talks-reducer server (default: http://127.0.0.1:9005/).",
64
+ )
65
+ parser.add_argument(
66
+ "--output",
67
+ type=Path,
68
+ default=None,
69
+ help="Where to store the processed video. Defaults to the working directory.",
70
+ )
71
+ parser.add_argument(
72
+ "--small",
73
+ action="store_true",
74
+ help="Toggle the 'Small video' preset before processing.",
75
+ )
76
+ parser.add_argument(
77
+ "--print-log",
78
+ action="store_true",
79
+ help="Print the server log after processing completes.",
80
+ )
81
+ return parser
82
+
83
+
84
+ def main(argv: Optional[Sequence[str]] = None) -> None:
85
+ parser = _build_parser()
86
+ args = parser.parse_args(argv)
87
+
88
+ destination, summary, log_text = send_video(
89
+ input_path=args.input.expanduser(),
90
+ output_path=args.output.expanduser() if args.output else None,
91
+ server_url=args.server,
92
+ small=args.small,
93
+ )
94
+
95
+ print(summary)
96
+ print(f"Saved processed video to {destination}")
97
+ if args.print_log:
98
+ print("\nServer log:\n" + log_text)
99
+
100
+
101
+ if __name__ == "__main__": # pragma: no cover
102
+ main()
@@ -1,93 +1,119 @@
1
- Metadata-Version: 2.4
2
- Name: talks-reducer
3
- Version: 0.5.0
4
- Summary: CLI for speeding up long-form talks by removing silence
5
- Author: Talks Reducer Maintainers
6
- License-Expression: MIT
7
- Requires-Python: >=3.9
8
- Description-Content-Type: text/markdown
9
- License-File: LICENSE
10
- Requires-Dist: audiotsm>=0.1.2
11
- Requires-Dist: scipy>=1.10.0
12
- Requires-Dist: numpy>=1.22.0
13
- Requires-Dist: tqdm>=4.65.0
14
- Requires-Dist: tkinterdnd2>=0.3.0
15
- Requires-Dist: Pillow>=9.0.0
16
- Requires-Dist: imageio-ffmpeg>=0.4.8
17
- Requires-Dist: gradio>=4.0.0
18
- Provides-Extra: dev
19
- Requires-Dist: build>=1.0.0; extra == "dev"
20
- Requires-Dist: twine>=4.0.0; extra == "dev"
21
- Requires-Dist: pytest>=7.0.0; extra == "dev"
22
- Requires-Dist: black>=23.0.0; extra == "dev"
23
- Requires-Dist: isort>=5.12.0; extra == "dev"
24
- Requires-Dist: bump-my-version>=0.5.0; extra == "dev"
25
- Requires-Dist: pyinstaller>=6.4.0; extra == "dev"
26
- Dynamic: license-file
27
-
28
- # Talks Reducer
29
- Talks Reducer shortens long-form presentations by removing silent gaps and optionally re-encoding them to smaller files. The
30
- project was renamed from **jumpcutter** to emphasize its focus on conference talks and screencasts.
31
-
32
- ![Main demo](docs/assets/screencast-main.gif)
33
-
34
- ## Example
35
- - 1h 37m, 571 MB — Original OBS video recording
36
- - 1h 19m, 751 MB — Talks Reducer
37
- - 1h 19m, 171 MB — Talks Reducer `--small`
38
-
39
- ## Changelog
40
-
41
- See [CHANGELOG.md](CHANGELOG.md).
42
-
43
- ## Install GUI (Windows, macOS)
44
- Go to the [releases page](https://github.com/popstas/talks-reducer/releases) and download the appropriate artifact:
45
-
46
- - **Windows** — `talks-reducer-windows-0.4.0.zip`
47
- - **macOS** — `talks-reducer.app.zip` (but it doesn't work for me)
48
-
49
- When extracted on Windows the bundled `talks-reducer.exe` behaves like the
50
- `python talks_reducer/gui.py` entry point: double-clicking it launches the GUI
51
- and passing a video file path (for example via *Open with…* or drag-and-drop
52
- onto the executable) automatically queues that recording for processing.
53
-
54
- ## Install CLI (Linux, Windows, macOS)
55
- ```
56
- pip install talks-reducer
57
- ```
58
-
59
- **Note:** FFmpeg is now bundled automatically with the package, so you don't need to install it separately. You you need, don't know actually.
60
-
61
- The `--small` preset applies a 720p video scale and 128 kbps audio bitrate, making it useful for sharing talks over constrained
62
- connections. Without `--small`, the script aims to preserve original quality while removing silence.
63
-
64
- Example CLI usage:
65
-
66
- ```sh
67
- talks-reducer --small input.mp4
68
- ```
69
-
70
- ### Speech detection
71
-
72
- Talks Reducer now relies on its built-in volume thresholding to detect speech. Adjust `--silent_threshold` if you need to fine-tune when segments count as silence. Dropping the optional Silero VAD integration keeps the install lightweight and avoids pulling in PyTorch.
73
-
74
- When CUDA-capable hardware is available the pipeline leans on GPU encoders to keep export times low, but it still runs great on
75
- CPUs.
76
-
77
- ## Simple web server
78
-
79
- Prefer a lightweight browser interface? Launch the Gradio-powered simple mode with:
80
-
81
- ```sh
82
- talks-reducer server
83
- ```
84
-
85
- This opens a local web page featuring a drag-and-drop upload zone, a **Small video** checkbox that mirrors the CLI preset, a live
86
- progress indicator, and automatic previews of the processed output. Once the job completes you can inspect the resulting compression
87
- ratio and download the rendered video directly from the page.
88
-
89
- ## Contributing
90
- See `CONTRIBUTION.md` for development setup details and guidance on sharing improvements.
91
-
92
- ## License
93
- Talks Reducer is released under the MIT License. See `LICENSE` for the full text.
1
+ Metadata-Version: 2.4
2
+ Name: talks-reducer
3
+ Version: 0.5.1
4
+ Summary: CLI for speeding up long-form talks by removing silence
5
+ Author: Talks Reducer Maintainers
6
+ License-Expression: MIT
7
+ Requires-Python: >=3.9
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENSE
10
+ Requires-Dist: audiotsm>=0.1.2
11
+ Requires-Dist: scipy>=1.10.0
12
+ Requires-Dist: numpy>=1.22.0
13
+ Requires-Dist: tqdm>=4.65.0
14
+ Requires-Dist: tkinterdnd2>=0.3.0
15
+ Requires-Dist: Pillow>=9.0.0
16
+ Requires-Dist: imageio-ffmpeg>=0.4.8
17
+ Requires-Dist: gradio>=4.0.0
18
+ Provides-Extra: dev
19
+ Requires-Dist: build>=1.0.0; extra == "dev"
20
+ Requires-Dist: twine>=4.0.0; extra == "dev"
21
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
22
+ Requires-Dist: black>=23.0.0; extra == "dev"
23
+ Requires-Dist: isort>=5.12.0; extra == "dev"
24
+ Requires-Dist: bump-my-version>=0.5.0; extra == "dev"
25
+ Requires-Dist: pyinstaller>=6.4.0; extra == "dev"
26
+ Dynamic: license-file
27
+
28
+ # Talks Reducer
29
+ Talks Reducer shortens long-form presentations by removing silent gaps and optionally re-encoding them to smaller files. The
30
+ project was renamed from **jumpcutter** to emphasize its focus on conference talks and screencasts.
31
+
32
+ ![Main demo](docs/assets/screencast-main.gif)
33
+
34
+ ## Example
35
+ - 1h 37m, 571 MB — Original OBS video recording
36
+ - 1h 19m, 751 MB — Talks Reducer
37
+ - 1h 19m, 171 MB — Talks Reducer `--small`
38
+
39
+ ## Changelog
40
+
41
+ See [CHANGELOG.md](CHANGELOG.md).
42
+
43
+ ## Install GUI (Windows, macOS)
44
+ Go to the [releases page](https://github.com/popstas/talks-reducer/releases) and download the appropriate artifact:
45
+
46
+ - **Windows** — `talks-reducer-windows-0.4.0.zip`
47
+ - **macOS** — `talks-reducer.app.zip`
48
+
49
+ > **Troubleshooting:** If launching the bundle (or running `python talks_reducer/gui.py`) prints `macOS 26 (2600) or later required, have instead 16 (1600)!`, make sure you're using a Python build that ships a modern Tk. The stock [python.org 3.13.5 installer](https://www.python.org/downloads/release/python-3135/) includes Tk 8.6 and has been verified to work.
50
+
51
+ When extracted on Windows the bundled `talks-reducer.exe` behaves like the
52
+ `python talks_reducer/gui.py` entry point: double-clicking it launches the GUI
53
+ and passing a video file path (for example via *Open with…* or drag-and-drop
54
+ onto the executable) automatically queues that recording for processing.
55
+
56
+ ## Install CLI (Linux, Windows, macOS)
57
+ ```
58
+ pip install talks-reducer
59
+ ```
60
+
61
+ **Note:** FFmpeg is now bundled automatically with the package, so you don't need to install it separately. You you need, don't know actually.
62
+
63
+ The `--small` preset applies a 720p video scale and 128 kbps audio bitrate, making it useful for sharing talks over constrained
64
+ connections. Without `--small`, the script aims to preserve original quality while removing silence.
65
+
66
+ Example CLI usage:
67
+
68
+ ```sh
69
+ talks-reducer --small input.mp4
70
+ ```
71
+
72
+ ### Speech detection
73
+
74
+ Talks Reducer now relies on its built-in volume thresholding to detect speech. Adjust `--silent_threshold` if you need to fine-tune when segments count as silence. Dropping the optional Silero VAD integration keeps the install lightweight and avoids pulling in PyTorch.
75
+
76
+ When CUDA-capable hardware is available the pipeline leans on GPU encoders to keep export times low, but it still runs great on
77
+ CPUs.
78
+
79
+ ## Simple web server
80
+
81
+ Prefer a lightweight browser interface? Launch the Gradio-powered simple mode with:
82
+
83
+ ```sh
84
+ talks-reducer server
85
+ ```
86
+
87
+ This opens a local web page featuring a drag-and-drop upload zone, a **Small video** checkbox that mirrors the CLI preset, a live
88
+ progress indicator, and automatic previews of the processed output. Once the job completes you can inspect the resulting compression
89
+ ratio and download the rendered video directly from the page.
90
+
91
+ ### Uploading and retrieving a processed video
92
+
93
+ 1. Open the printed `http://localhost:<port>` address (the default port is `9005`).
94
+ 2. Drag a video onto the **Video file** drop zone or click to browse and select one from disk.
95
+ 3. (Optional) Enable **Small video** before the upload finishes to apply the 720p/128 kbps preset.
96
+ 4. Wait for the progress bar and log to report completion—the interface queues work automatically after the file arrives.
97
+ 5. Watch the processed preview in the **Processed video** player and click **Download processed file** to save the result locally.
98
+
99
+ Need to change where the server listens? Run `talks-reducer server --host 0.0.0.0 --port 7860` (or any other port) to bind to a
100
+ different address.
101
+
102
+ ### Automating uploads from the command line
103
+
104
+ Prefer to script uploads instead of using the browser UI? Start the server and use the bundled helper to submit a job and save
105
+ the processed video locally:
106
+
107
+ ```sh
108
+ python -m talks_reducer.service_client --server http://127.0.0.1:9005/ --input demo.mp4 --output output/demo_processed.mp4
109
+ ```
110
+
111
+ The helper wraps the Gradio API exposed by `server.py`, waits for processing to complete, then copies the rendered file to the
112
+ path you provide. Pass `--small` to mirror the **Small video** checkbox or `--print-log` to stream the server log after the
113
+ download finishes.
114
+
115
+ ## Contributing
116
+ See `CONTRIBUTION.md` for development setup details and guidance on sharing improvements.
117
+
118
+ ## License
119
+ Talks Reducer is released under the MIT License. See `LICENSE` for the full text.
@@ -0,0 +1,19 @@
1
+ talks_reducer/__about__.py,sha256=cD5R3DXad04Jmf7zP4WEetKCHW_dds5YR5hzpqpbLz4,92
2
+ talks_reducer/__init__.py,sha256=Kzh1hXaw6Vq3DyTqrnJGOq8pn0P8lvaDcsg1bFUjFKk,208
3
+ talks_reducer/__main__.py,sha256=azR_vh8HFPLaOnh-L6gUFWsL67I6iHtbeH5rQhsipGY,299
4
+ talks_reducer/audio.py,sha256=sjHMeY0H9ESG-Gn5BX0wFRBX7sXjWwsgS8u9Vb0bJ88,4396
5
+ talks_reducer/chunks.py,sha256=IpdZxRFPURSG5wP-OQ_p09CVP8wcKwIFysV29zOTSWI,2959
6
+ talks_reducer/cli.py,sha256=VOFZni7rl2CTCK3aLUO_iCV6PNva9ylIrmxxwNltQG4,8031
7
+ talks_reducer/ffmpeg.py,sha256=dsHBOBcr5XCSg0q3xmzLOcibBiEdyrXdEQa-ze5vQsM,12551
8
+ talks_reducer/gui.py,sha256=1iCzAdImdNg1ezMvGJee5l4hOEkEvrMY6YkwO7pyF5Y,59801
9
+ talks_reducer/models.py,sha256=6Q_8rmHLyImXp88D4B7ptTbFaH_xXa_yxs8A2dypz2Y,2004
10
+ talks_reducer/pipeline.py,sha256=JnWa84sMwYncGv7crhGLZu0cW1Xx0eGQyFP-nLp-DHk,12222
11
+ talks_reducer/progress.py,sha256=Mh43M6VWhjjUv9CI22xfD2EJ_7Aq3PCueqefQ9Bd5-o,4565
12
+ talks_reducer/server.py,sha256=twnuh4QErwjSfa60NICrNXwraIV5x7h0apEVLyz3KVA,11166
13
+ talks_reducer/service_client.py,sha256=Hv3hKBUn2n7M5hLUVHamNphUdMt9bCXUrJaJMZHlE0Q,3088
14
+ talks_reducer-0.5.1.dist-info/licenses/LICENSE,sha256=jN17mHNR3e84awmH3AbpWBcBDBzPxEH0rcOFoj1s7sQ,1124
15
+ talks_reducer-0.5.1.dist-info/METADATA,sha256=shRuBxoKEvPxZstY2pOu5-vP-45jHkShbE1sC_Am0ig,5218
16
+ talks_reducer-0.5.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
17
+ talks_reducer-0.5.1.dist-info/entry_points.txt,sha256=no-NVP5Z9LrzaJL4-2ltKe9IkLZo8dQ32zilIb1gbZE,149
18
+ talks_reducer-0.5.1.dist-info/top_level.txt,sha256=pJWGcy__LR9JIEKH3QJyFmk9XrIsiFtqvuMNxFdIzDU,14
19
+ talks_reducer-0.5.1.dist-info/RECORD,,
@@ -1,18 +0,0 @@
1
- talks_reducer/__about__.py,sha256=RhSau8kONixzPMrozb3d8HJbGwsQmAY3l5_HbL3elh4,92
2
- talks_reducer/__init__.py,sha256=Kzh1hXaw6Vq3DyTqrnJGOq8pn0P8lvaDcsg1bFUjFKk,208
3
- talks_reducer/__main__.py,sha256=azR_vh8HFPLaOnh-L6gUFWsL67I6iHtbeH5rQhsipGY,299
4
- talks_reducer/audio.py,sha256=sjHMeY0H9ESG-Gn5BX0wFRBX7sXjWwsgS8u9Vb0bJ88,4396
5
- talks_reducer/chunks.py,sha256=IpdZxRFPURSG5wP-OQ_p09CVP8wcKwIFysV29zOTSWI,2959
6
- talks_reducer/cli.py,sha256=9Lj47GTtvr1feYBrNtQ2aB3r4sLquLODMZk_K_YAIEk,7990
7
- talks_reducer/ffmpeg.py,sha256=Joqtkq-bktP-Hq3j3I394FYB_VQ-7GyF0n7bqTiknrg,12356
8
- talks_reducer/gui.py,sha256=6OTUfIMH30XBOFq-BYZmxnODp0HhW3oj7CcTqLdpKyI,59739
9
- talks_reducer/models.py,sha256=Ax7OIV7WECRROi5km-Se0Z1LQsLxd5J7GnGXDbWrNjg,1197
10
- talks_reducer/pipeline.py,sha256=kemU_Txoh38jLzJCjy0HvjUS1gtvmVItnxXhlZcdw5Y,12195
11
- talks_reducer/progress.py,sha256=Mh43M6VWhjjUv9CI22xfD2EJ_7Aq3PCueqefQ9Bd5-o,4565
12
- talks_reducer/server.py,sha256=r5P7fGfU9SGxwPYDaSsSnEllzwjlombOJ-FF8B5iAZQ,11128
13
- talks_reducer-0.5.0.dist-info/licenses/LICENSE,sha256=jN17mHNR3e84awmH3AbpWBcBDBzPxEH0rcOFoj1s7sQ,1124
14
- talks_reducer-0.5.0.dist-info/METADATA,sha256=Rrw6kiDxbQT7q6I0QnbWcNxsJsMLLe0z145f4Zr9kBM,3636
15
- talks_reducer-0.5.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
16
- talks_reducer-0.5.0.dist-info/entry_points.txt,sha256=no-NVP5Z9LrzaJL4-2ltKe9IkLZo8dQ32zilIb1gbZE,149
17
- talks_reducer-0.5.0.dist-info/top_level.txt,sha256=pJWGcy__LR9JIEKH3QJyFmk9XrIsiFtqvuMNxFdIzDU,14
18
- talks_reducer-0.5.0.dist-info/RECORD,,