kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
Merge branch '1274-federate-opus' into 'develop'
Autodetect format when transcoding files Closes #1274 See merge request funkwhale/funkwhale!1262environments/review-docs-devel-1399dq/deployments/6607
commit
a84cb90203
|
@ -855,8 +855,7 @@ class Upload(models.Model):
|
||||||
if not input:
|
if not input:
|
||||||
return
|
return
|
||||||
|
|
||||||
input_format = utils.MIMETYPE_TO_EXTENSION[self.mimetype]
|
audio = pydub.AudioSegment.from_file(input)
|
||||||
audio = pydub.AudioSegment.from_file(input, format=input_format)
|
|
||||||
return audio
|
return audio
|
||||||
|
|
||||||
def save(self, **kwargs):
|
def save(self, **kwargs):
|
||||||
|
|
|
@ -105,7 +105,7 @@ def get_actor_from_request(request):
|
||||||
return actor
|
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"):
|
with input.open("rb"):
|
||||||
audio = pydub.AudioSegment.from_file(input, format=input_format)
|
audio = pydub.AudioSegment.from_file(input, format=input_format)
|
||||||
return transcode_audio(audio, output, output_format, **kwargs)
|
return transcode_audio(audio, output, output_format, **kwargs)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import os
|
import os
|
||||||
import pathlib
|
import pathlib
|
||||||
import pytest
|
import pytest
|
||||||
|
import tempfile
|
||||||
|
|
||||||
from funkwhale_api.music import utils
|
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}),
|
("sample.flac", {"bitrate": 1608000, "length": 0.001}),
|
||||||
("test.mp3", {"bitrate": 8000, "length": 267.70285714285717}),
|
("test.mp3", {"bitrate": 8000, "length": 267.70285714285717}),
|
||||||
("test.ogg", {"bitrate": 112000, "length": 1}),
|
("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):
|
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()
|
(root_path / "System" / "file.ogg").touch()
|
||||||
|
|
||||||
assert utils.browse_dir(root_path, path) == expected
|
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)
|
Ładowanie…
Reference in New Issue