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.
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/PKG-INFO +1 -1
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/better_ffmpeg_progress.py +4 -21
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/progress_bars.py +22 -6
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/utils.py +0 -10
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress.egg-info/PKG-INFO +1 -1
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/setup.py +1 -1
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/LICENSE +0 -0
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/README.md +0 -0
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/__init__.py +0 -0
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/enums.py +0 -0
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/exceptions.py +0 -0
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/terminate_process.py +0 -0
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress.egg-info/SOURCES.txt +0 -0
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress.egg-info/dependency_links.txt +0 -0
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress.egg-info/requires.txt +0 -0
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress.egg-info/top_level.txt +0 -0
- {better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/setup.cfg +0 -0
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
31
|
-
|
|
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=
|
|
79
|
-
|
|
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=
|
|
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(
|
|
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}'")
|
{better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/utils.py
RENAMED
|
@@ -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]:
|
|
@@ -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.
|
|
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.",
|
|
File without changes
|
|
File without changes
|
{better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/__init__.py
RENAMED
|
File without changes
|
{better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/enums.py
RENAMED
|
File without changes
|
{better_ffmpeg_progress-5.4.0 → better_ffmpeg_progress-5.4.2}/better_ffmpeg_progress/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|