Skip to content
Snippets Groups Projects
Commit a84cb902 authored by Agate's avatar Agate :speech_balloon:
Browse files

Merge branch '1274-federate-opus' into 'develop'

Autodetect format when transcoding files

Closes #1274

See merge request funkwhale/funkwhale!1262
parents 6f3dee5d 7f42c1ad
Branches
No related tags found
No related merge requests found
Pipeline #13294 passed
...@@ -855,8 +855,7 @@ class Upload(models.Model): ...@@ -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): ...@@ -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)
......
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): ...@@ -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): ...@@ -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
Changed audio format detection to happen via sniffing and not file extensions (#1274)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment