Merge branch '1274-federate-opus' into 'develop'
Autodetect format when transcoding files Closes #1274 See merge request funkwhale/funkwhale!1262
This commit is contained in:
commit
a84cb90203
|
@ -855,8 +855,7 @@ class Upload(models.Model):
|
|||
if not input:
|
||||
return
|
||||
|
||||
input_format = utils.MIMETYPE_TO_EXTENSION[self.mimetype]
|
||||
audio = pydub.AudioSegment.from_file(input, format=input_format)
|
||||
audio = pydub.AudioSegment.from_file(input)
|
||||
return audio
|
||||
|
||||
def save(self, **kwargs):
|
||||
|
|
|
@ -105,7 +105,7 @@ def get_actor_from_request(request):
|
|||
return actor
|
||||
|
||||
|
||||
def transcode_file(input, output, input_format, output_format, **kwargs):
|
||||
def transcode_file(input, output, input_format=None, output_format="mp3", **kwargs):
|
||||
with input.open("rb"):
|
||||
audio = pydub.AudioSegment.from_file(input, format=input_format)
|
||||
return transcode_audio(audio, output, output_format, **kwargs)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import os
|
||||
import pathlib
|
||||
import pytest
|
||||
import tempfile
|
||||
|
||||
from funkwhale_api.music import utils
|
||||
|
||||
|
@ -28,6 +29,7 @@ def test_guess_mimetype_try_using_extension_if_fail(wrong, factories, mocker):
|
|||
("sample.flac", {"bitrate": 1608000, "length": 0.001}),
|
||||
("test.mp3", {"bitrate": 8000, "length": 267.70285714285717}),
|
||||
("test.ogg", {"bitrate": 112000, "length": 1}),
|
||||
("test.opus", {"bitrate": 0, "length": 1}), # This Opus file lacks a bitrate
|
||||
],
|
||||
)
|
||||
def test_get_audio_file_data(name, expected):
|
||||
|
@ -109,3 +111,22 @@ def test_get_dirs_and_files(path, expected, tmpdir):
|
|||
(root_path / "System" / "file.ogg").touch()
|
||||
|
||||
assert utils.browse_dir(root_path, path) == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"name, expected",
|
||||
[
|
||||
("sample.flac", {"bitrate": 128000, "length": 0}),
|
||||
("test.mp3", {"bitrate": 16000, "length": 268}),
|
||||
("test.ogg", {"bitrate": 128000, "length": 1}),
|
||||
("test.opus", {"bitrate": 128000, "length": 1}),
|
||||
],
|
||||
)
|
||||
def test_transcode_file(name, expected):
|
||||
path = pathlib.Path(os.path.join(DATA_DIR, name))
|
||||
with tempfile.NamedTemporaryFile() as dest:
|
||||
utils.transcode_file(path, pathlib.Path(dest.name))
|
||||
with open(dest.name, "rb") as f:
|
||||
result = {k: round(v) for k, v in utils.get_audio_file_data(f).items()}
|
||||
|
||||
assert result == expected
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Changed audio format detection to happen via sniffing and not file extensions (#1274)
|
Loading…
Reference in New Issue