better-ffmpeg-progress 5.4.0__tar.gz → 5.4.2__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 (17) hide show
  1. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/PKG-INFO +1 -1
  2. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/better_ffmpeg_progress.py +4 -21
  3. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/progress_bars.py +22 -6
  4. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/utils.py +0 -10
  5. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress.egg-info/PKG-INFO +1 -1
  6. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/setup.py +1 -1
  7. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/LICENSE +0 -0
  8. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/README.md +0 -0
  9. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/__init__.py +0 -0
  10. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/enums.py +0 -0
  11. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/exceptions.py +0 -0
  12. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/terminate_process.py +0 -0
  13. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress.egg-info/SOURCES.txt +0 -0
  14. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress.egg-info/dependency_links.txt +0 -0
  15. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress.egg-info/requires.txt +0 -0
  16. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress.egg-info/top_level.txt +0 -0
  17. {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: better-ffmpeg-progress
3
- Version: 5.4.0
3
+ Version: 5.4.2
4
4
  Summary: Run FFmpeg & see percentage progress + ETA.
5
5
  Home-page: https://github.com/CrypticSignal/better-ffmpeg-progress
6
6
  Author: GitHub.com/CrypticSignal
@@ -1,6 +1,7 @@
1
1
  import math
2
2
  import os
3
3
  import re
4
+ import shlex
4
5
  from pathlib import Path
5
6
  import subprocess
6
7
  from sys import exit
@@ -17,7 +18,6 @@ from .utils import (
17
18
  validate_ffmpeg_command,
18
19
  get_media_duration,
19
20
  get_expected_output_duration,
20
- check_shell_needed_for_command,
21
21
  is_lavfi_input,
22
22
  )
23
23
  from .terminate_process import terminate_ffmpeg_process
@@ -191,22 +191,7 @@ class FfmpegProcess:
191
191
  print_command: bool = False,
192
192
  ) -> None:
193
193
  if print_command:
194
- cmd_str = (
195
- " ".join(self._ffmpeg_command)
196
- if isinstance(self._ffmpeg_command, list)
197
- else self._ffmpeg_command
198
- )
199
- print(f"Executing: {cmd_str}")
200
-
201
- self._shell_needed = check_shell_needed_for_command(
202
- self._ffmpeg_command
203
- if isinstance(self._ffmpeg_command, list)
204
- else [self._ffmpeg_command]
205
- )
206
-
207
- current_ffmpeg_command = self._ffmpeg_command
208
- if self._shell_needed and isinstance(current_ffmpeg_command, list):
209
- current_ffmpeg_command = " ".join(current_ffmpeg_command)
194
+ print(f"Executing: {shlex.join(self._ffmpeg_command)}")
210
195
 
211
196
  try:
212
197
  creationflags = 0
@@ -221,16 +206,14 @@ class FfmpegProcess:
221
206
  encoding="utf-8",
222
207
  ) as f:
223
208
  self._process = subprocess.Popen(
224
- current_ffmpeg_command,
225
- shell=self._shell_needed,
209
+ self._ffmpeg_command,
226
210
  stdout=subprocess.PIPE,
227
211
  stderr=f,
228
212
  creationflags=creationflags,
229
213
  )
230
214
  else:
231
215
  self._process = subprocess.Popen(
232
- current_ffmpeg_command,
233
- shell=self._shell_needed,
216
+ self._ffmpeg_command,
234
217
  stdout=subprocess.PIPE,
235
218
  stderr=self._ffmpeg_log_file,
236
219
  creationflags=creationflags,
@@ -27,8 +27,21 @@ _MAX_FILENAME_LENGTH = 60
27
27
 
28
28
 
29
29
  def _format_size(current_size_mb: float, estimated_size_mb: Optional[float]) -> str:
30
- estimate = f"~{estimated_size_mb:.2f} MB" if estimated_size_mb is not None else "~? MB"
31
- return f"({current_size_mb:.2f} MB / {estimate})"
30
+ """
31
+ Returns e.g. "(3.25 MB / ~14.33 MB)", "(3.25 MB)" while there is no estimate yet, or ""
32
+ if FFmpeg has not reported a size (e.g. at the start, or when the output is "-f null").
33
+ """
34
+ # Also hide sizes that would display as "0.00 MB", such as a container header of a few bytes.
35
+ if round(current_size_mb, 2) <= 0:
36
+ return ""
37
+ if estimated_size_mb is None:
38
+ return f"({current_size_mb:.2f} MB)"
39
+ return f"({current_size_mb:.2f} MB / ~{estimated_size_mb:.2f} MB)"
40
+
41
+
42
+ def _with_size(text: str, current_size_mb: float, estimated_size_mb: Optional[float]) -> str:
43
+ size = _format_size(current_size_mb, estimated_size_mb)
44
+ return f"{text} {size}" if size else text
32
45
 
33
46
 
34
47
  def use_rich(ffmpeg_process_instance: "FfmpegProcess", process: subprocess.Popen) -> None:
@@ -75,8 +88,9 @@ def use_rich(ffmpeg_process_instance: "FfmpegProcess", process: subprocess.Popen
75
88
  update_progress(
76
89
  task_id,
77
90
  completed=progress_val_secs,
78
- description=f"Processing {input_filename} "
79
- f"{_format_size(current_size_mb, estimated_size_mb)}",
91
+ description=_with_size(
92
+ f"Processing {input_filename}", current_size_mb, estimated_size_mb
93
+ ),
80
94
  )
81
95
  else:
82
96
  print(f"Processing '{input_filename}'...")
@@ -93,7 +107,9 @@ def use_rich(ffmpeg_process_instance: "FfmpegProcess", process: subprocess.Popen
93
107
  )
94
108
  update_progress(
95
109
  task_id,
96
- description=f"✓ Processed '{input_filename}' ({current_size_mb:.2f} MB)",
110
+ description=_with_size(
111
+ f"✓ Processed '{input_filename}'", current_size_mb, None
112
+ ),
97
113
  )
98
114
  else:
99
115
  if task_id is not None:
@@ -152,7 +168,7 @@ def use_tqdm(ffmpeg_process_instance: "FfmpegProcess", process: subprocess.Popen
152
168
  if progress_bar:
153
169
  progress_bar.n = duration_secs
154
170
  progress_bar.set_description(f"✓ Processed '{input_filename}'")
155
- progress_bar.set_postfix_str(f"{current_size_mb:.2f} MB")
171
+ progress_bar.set_postfix_str(_format_size(current_size_mb, None))
156
172
  progress_bar.close()
157
173
  else:
158
174
  print(f"✓ Processed '{input_filename}'")
@@ -117,16 +117,6 @@ def get_media_duration(input_file: str) -> Optional[float]:
117
117
  return None
118
118
 
119
119
 
120
- def check_shell_needed_for_command(command: List[str]) -> bool:
121
- """
122
- Checks if any part of the command contains shell operators,
123
- indicating that shell=True might be needed for subprocess.Popen.
124
- This is a basic check and might not cover all edge cases.
125
- """
126
- shell_operators = {"|", ">", "<", ">>", "&&", "||"} # Basic set
127
- return any(op in item for item in command for op in shell_operators)
128
-
129
-
130
120
  def parse_ffmpeg_progress_line(
131
121
  line: bytes, total_duration_secs: Optional[float]
132
122
  ) -> Optional[float]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: better-ffmpeg-progress
3
- Version: 5.4.0
3
+ Version: 5.4.2
4
4
  Summary: Run FFmpeg & see percentage progress + ETA.
5
5
  Home-page: https://github.com/CrypticSignal/better-ffmpeg-progress
6
6
  Author: GitHub.com/CrypticSignal
@@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as f:
5
5
 
6
6
  setuptools.setup(
7
7
  name="better-ffmpeg-progress",
8
- version="5.4.0",
8
+ version="5.4.2",
9
9
  author="GitHub.com/CrypticSignal",
10
10
  author_email="theaudiophile@outlook.com",
11
11
  description="Run FFmpeg & see percentage progress + ETA.",