Skip to content

Commit 75ec84d

Browse files
authored
Set MP3 encoder preset (facebookresearch#534)
1 parent 2e79e6e commit 75ec84d

File tree

5 files changed

+15
-6
lines changed

5 files changed

+15
-6
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ In order to try Demucs, you can just run from any folder (as long as you properl
184184
demucs PATH_TO_AUDIO_FILE_1 [PATH_TO_AUDIO_FILE_2 ...] # for Demucs
185185
# If you used `pip install --user` you might need to replace demucs with python3 -m demucs
186186
python3 -m demucs --mp3 --mp3-bitrate BITRATE PATH_TO_AUDIO_FILE_1 # output files saved as MP3
187+
# use --mp3-preset to change encoder preset, 2 for best quality, 7 for fastest
187188
# If your filename contain spaces don't forget to quote it !!!
188189
demucs "my music/my favorite track.mp3"
189190
# You can select different models with `-n` mdx_q is the quantized model, smaller but maybe a bit less accurate.

demucs/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
# This source code is licensed under the license found in the
55
# LICENSE file in the root directory of this source tree.
66

7-
__version__ = "4.0.1a2"
7+
__version__ = "4.0.1a3"

demucs/audio.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,15 +196,15 @@ def as_dtype_pcm(wav, dtype):
196196
return i16_pcm(wav)
197197

198198

199-
def encode_mp3(wav, path, samplerate=44100, bitrate=320, verbose=False):
199+
def encode_mp3(wav, path, samplerate=44100, bitrate=320, quality=2, verbose=False):
200200
"""Save given audio as mp3. This should work on all OSes."""
201201
C, T = wav.shape
202202
wav = i16_pcm(wav)
203203
encoder = lameenc.Encoder()
204204
encoder.set_bit_rate(bitrate)
205205
encoder.set_in_sample_rate(samplerate)
206206
encoder.set_channels(C)
207-
encoder.set_quality(2) # 2-highest, 7-fastest
207+
encoder.set_quality(quality) # 2-highest, 7-fastest
208208
if not verbose:
209209
encoder.silence()
210210
wav = wav.data.cpu()
@@ -239,16 +239,18 @@ def save_audio(wav: torch.Tensor,
239239
bitrate: int = 320,
240240
clip: tp.Literal["rescale", "clamp", "tanh", "none"] = 'rescale',
241241
bits_per_sample: tp.Literal[16, 24, 32] = 16,
242-
as_float: bool = False):
242+
as_float: bool = False,
243+
preset: tp.Literal[2, 3, 4, 5, 6, 7] = 2):
243244
"""Save audio file, automatically preventing clipping if necessary
244245
based on the given `clip` strategy. If the path ends in `.mp3`, this
245-
will save as mp3 with the given `bitrate`.
246+
will save as mp3 with the given `bitrate`. Use `preset` to set mp3 quality:
247+
2 for highest quality, 7 for fastest speed
246248
"""
247249
wav = prevent_clip(wav, mode=clip)
248250
path = Path(path)
249251
suffix = path.suffix.lower()
250252
if suffix == ".mp3":
251-
encode_mp3(wav, path, samplerate, bitrate, verbose=True)
253+
encode_mp3(wav, path, samplerate, bitrate, preset, verbose=True)
252254
elif suffix == ".wav":
253255
if as_float:
254256
bits_per_sample = 32

demucs/separate.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ def get_parser():
113113
default=320,
114114
type=int,
115115
help="Bitrate of converted mp3.")
116+
parser.add_argument("--mp3-preset", choices=range(2, 8), type=int, default=2,
117+
help="Encoder preset of MP3, 2 for highest quality, 7 for "
118+
"fastest speed. Default is 2")
116119
parser.add_argument("-j", "--jobs",
117120
default=0,
118121
type=int,
@@ -182,6 +185,7 @@ def main(opts=None):
182185
kwargs = {
183186
'samplerate': model.samplerate,
184187
'bitrate': args.mp3_bitrate,
188+
'preset': args.mp3_preset,
185189
'clip': args.clip_mode,
186190
'as_float': args.float32,
187191
'bits_per_sample': 24 if args.int24 else 16,

docs/release.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ Will use CPU for complex numbers, when using MPS device (all other computations
1515

1616
Optimize codes to save memory
1717

18+
Allow changing preset of MP3
19+
1820
## V4.0.0, 7th of December 2022
1921

2022
Adding hybrid transformer Demucs model.

0 commit comments

Comments
 (0)