From 494e65bb524258ebe90e71098bf591ac026ff2b9 Mon Sep 17 00:00:00 2001 From: Hagen Wierstorf Date: Thu, 25 Jul 2024 14:50:04 +0200 Subject: [PATCH 1/6] Add audiofile.has_video() --- audiofile/__init__.py | 1 + audiofile/core/info.py | 40 +++++++++++++++++++++++++++++++++ docs/api-src/audiofile.rst | 1 + tests/assets/README.md | 14 ++++++++++-- tests/test_audiofile.py | 46 +++++++++++++++++++------------------- 5 files changed, 77 insertions(+), 25 deletions(-) diff --git a/audiofile/__init__.py b/audiofile/__init__.py index 3a6fd8d8..13367be2 100644 --- a/audiofile/__init__.py +++ b/audiofile/__init__.py @@ -2,6 +2,7 @@ from audiofile.core.info import bit_depth from audiofile.core.info import channels from audiofile.core.info import duration +from audiofile.core.info import has_video from audiofile.core.info import samples from audiofile.core.info import sampling_rate from audiofile.core.io import convert_to_wav diff --git a/audiofile/core/info.py b/audiofile/core/info.py index 4181d9bf..8ff603ef 100644 --- a/audiofile/core/info.py +++ b/audiofile/core/info.py @@ -182,6 +182,46 @@ def duration(file: str, sloppy=False) -> float: return samples(file) / sampling_rate(file) +def has_video(file: str) -> int: + """If file contains video. + + For WAV, FLAC, MP3, or OGG files + ``False`` is returned. + All other files are probed by mediainfo. + + Args: + file: file name of input file + + Returns: + ``True`` if file contains video data + + Raises: + FileNotFoundError: if mediainfo binary is needed, + but cannot be found + RuntimeError: if ``file`` is missing, + broken or format is not supported + + Examples: + >>> has_video("stereo.wav") + False + + """ + if file_extension(file) in SNDFORMATS: + return False + else: + try: + cmd = ["mediainfo", "--Inform=Video;%Format%", file] + video_format = run(cmd) + if len(video_format) > 0: + return True + else: + return False + except FileNotFoundError: + raise binary_missing_error("mediainfo") + except subprocess.CalledProcessError: + raise broken_file_error(file) + + def samples(file: str) -> int: """Number of samples in audio file. diff --git a/docs/api-src/audiofile.rst b/docs/api-src/audiofile.rst index 05e73e2e..e1eb42ac 100644 --- a/docs/api-src/audiofile.rst +++ b/docs/api-src/audiofile.rst @@ -12,6 +12,7 @@ audiofile bit_depth channels duration + has_video samples sampling_rate convert_to_wav diff --git a/tests/assets/README.md b/tests/assets/README.md index 0afaf161..dd40765c 100644 --- a/tests/assets/README.md +++ b/tests/assets/README.md @@ -1,4 +1,6 @@ -# Non SND format audio test files +# Test files + +## Non SND format audio test files This folder contains files to test file formats that cannot be stored with `audiofile.write()` @@ -10,5 +12,13 @@ They are excerpts from "Furious Freak" and "Galway", Kevin MacLeod (incompetech.com), -Licensed under Creative Commons: +licensed under Creative Commons: +[CC-BY-3.0](http://creativecommons.org/licenses/by/3.0/). + +## Video test files + +The folder contains the video file `video.mp4`, +which is a short excerpt from "Big Bunny" +from Blender Foundation | www.blender.org, +licensed under Creative Commons: [CC-BY-3.0](http://creativecommons.org/licenses/by/3.0/). diff --git a/tests/test_audiofile.py b/tests/test_audiofile.py index 6de8ef31..0ce2f0f8 100644 --- a/tests/test_audiofile.py +++ b/tests/test_audiofile.py @@ -488,40 +488,40 @@ def test_file_type(tmpdir, file_type, magnitude, sampling_rate, channels): if file_type in ["mp3", "ogg"]: bit_depth = None assert af.bit_depth(file) == bit_depth + assert af.has_video(file) is False -def test_other_formats(): - files = [ - "gs-16b-1c-44100hz.opus", - "gs-16b-1c-8000hz.amr", - "gs-16b-1c-44100hz.m4a", - "gs-16b-1c-44100hz.aac", - ] - header_durations = [ # as given by mediainfo - 15.839, - 15.840000, - 15.833, - None, - ] - files = [os.path.join(ASSETS_DIR, f) for f in files] - for file, header_duration in zip(files, header_durations): - signal, sampling_rate = af.read(file) - assert af.channels(file) == _channels(signal) - assert af.sampling_rate(file) == sampling_rate - assert af.samples(file) == _samples(signal) +@pytest.mark.parametrize( + "file, header_duration, audio, video", # header duration as given by mediainfo + [ + ("gs-16b-1c-44100hz.opus", 15.839, True, False), + ("gs-16b-1c-8000hz.amr", 15.840000, True, False), + ("gs-16b-1c-44100hz.m4a", 15.833, True, False), + ("gs-16b-1c-44100hz.aac", None, True, False), + ("video.mp4", None, False, True), + ], +) +def test_other_formats(file, header_duration, audio, video): + path = os.path.join(ASSETS_DIR, file) + if audio: + signal, sampling_rate = af.read(path) + assert af.channels(path) == _channels(signal) + assert af.sampling_rate(path) == sampling_rate + assert af.samples(path) == _samples(signal) duration = _duration(signal, sampling_rate) - assert af.duration(file) == duration + assert af.duration(path) == duration if header_duration is None: # Here we expect samplewise precision - assert af.duration(file, sloppy=True) == duration + assert af.duration(path, sloppy=True) == duration else: # Here we expect limited precision # as the results differ between soxi and mediainfo precision = 1 - sloppy_duration = round(af.duration(file, sloppy=True), precision) + sloppy_duration = round(af.duration(path, sloppy=True), precision) header_duration = round(header_duration, precision) assert sloppy_duration == header_duration - assert af.bit_depth(file) is None + assert af.bit_depth(path) is None + assert af.has_video(path) is video @pytest.mark.parametrize( From 67a716829c0d3a4d14fbfa08efcaba5ed0c47c28 Mon Sep 17 00:00:00 2001 From: Hagen Wierstorf Date: Thu, 25 Jul 2024 14:55:34 +0200 Subject: [PATCH 2/6] Fix tests --- audiofile/core/info.py | 5 +---- tests/test_audiofile.py | 2 ++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/audiofile/core/info.py b/audiofile/core/info.py index 8ff603ef..39920e33 100644 --- a/audiofile/core/info.py +++ b/audiofile/core/info.py @@ -198,8 +198,7 @@ def has_video(file: str) -> int: Raises: FileNotFoundError: if mediainfo binary is needed, but cannot be found - RuntimeError: if ``file`` is missing, - broken or format is not supported + RuntimeError: if ``file`` is missing Examples: >>> has_video("stereo.wav") @@ -218,8 +217,6 @@ def has_video(file: str) -> int: return False except FileNotFoundError: raise binary_missing_error("mediainfo") - except subprocess.CalledProcessError: - raise broken_file_error(file) def samples(file: str) -> int: diff --git a/tests/test_audiofile.py b/tests/test_audiofile.py index 0ce2f0f8..480c0b2d 100644 --- a/tests/test_audiofile.py +++ b/tests/test_audiofile.py @@ -211,6 +211,8 @@ def test_missing_binaries(tmpdir, hide_system_path, empty_file): af.duration(empty_file) with pytest.raises(expected_error, match="mediainfo"): af.duration(empty_file, sloppy=True) + with pytest.raises(expected_error, match="mediainfo"): + af.has_video(empty_file) with pytest.raises(expected_error, match="ffmpeg"): af.samples(empty_file) with pytest.raises(expected_error, match="mediainfo"): From 1a92a283f2da8c832daabde12afd5d478a95d045 Mon Sep 17 00:00:00 2001 From: Hagen Wierstorf Date: Thu, 25 Jul 2024 14:55:44 +0200 Subject: [PATCH 3/6] Add missing video test assest --- tests/assets/video.mp4 | Bin 0 -> 81873 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/assets/video.mp4 diff --git a/tests/assets/video.mp4 b/tests/assets/video.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..a9bc18282b7a85a5e4eeb649a2972fbfa5eba8bd GIT binary patch literal 81873 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 z

&KNqY~gvh=$h56!;F)Qb5MDsHsE}oXm17$d` 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 Date: Thu, 25 Jul 2024 14:58:12 +0200 Subject: [PATCH 4/6] Fix return type --- audiofile/core/info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/audiofile/core/info.py b/audiofile/core/info.py index 39920e33..c628dbcd 100644 --- a/audiofile/core/info.py +++ b/audiofile/core/info.py @@ -182,7 +182,7 @@ def duration(file: str, sloppy=False) -> float: return samples(file) / sampling_rate(file) -def has_video(file: str) -> int: +def has_video(file: str) -> bool: """If file contains video. For WAV, FLAC, MP3, or OGG files From 1e477bfc47e8347e90ee11a63e36b23a9834bbdc Mon Sep 17 00:00:00 2001 From: Hagen Wierstorf Date: Fri, 26 Jul 2024 14:45:16 +0200 Subject: [PATCH 5/6] Raise RuntimeError if file does not exist --- audiofile/core/info.py | 4 ++++ tests/test_audiofile.py | 2 ++ 2 files changed, 6 insertions(+) diff --git a/audiofile/core/info.py b/audiofile/core/info.py index c628dbcd..1c80b7cc 100644 --- a/audiofile/core/info.py +++ b/audiofile/core/info.py @@ -205,6 +205,10 @@ def has_video(file: str) -> bool: False """ + file = audeer.path(file) + if not os.path.exists(file): + raise RuntimeError(f"{file} does not exist.") + if file_extension(file) in SNDFORMATS: return False else: diff --git a/tests/test_audiofile.py b/tests/test_audiofile.py index 480c0b2d..35c0613f 100644 --- a/tests/test_audiofile.py +++ b/tests/test_audiofile.py @@ -243,6 +243,8 @@ def test_missing_file(tmpdir, ext): af.duration(missing_file) with pytest.raises(expected_error): af.duration(missing_file, sloppy=True) + with pytest.raises(expected_error): + af.has_video(missing_file) # Convert with pytest.raises(expected_error): converted_file = str(tmpdir.join("signal-converted.wav")) From 5d834771b357072f423ca5b90ae03252f1dc4ff6 Mon Sep 17 00:00:00 2001 From: Hagen Wierstorf Date: Fri, 26 Jul 2024 14:57:00 +0200 Subject: [PATCH 6/6] Only check for non SND files --- audiofile/core/info.py | 10 +++++----- tests/test_audiofile.py | 18 ++++++++++++++++-- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/audiofile/core/info.py b/audiofile/core/info.py index 1c80b7cc..501a1203 100644 --- a/audiofile/core/info.py +++ b/audiofile/core/info.py @@ -199,21 +199,21 @@ def has_video(file: str) -> bool: FileNotFoundError: if mediainfo binary is needed, but cannot be found RuntimeError: if ``file`` is missing + and does not end with ``"wav"``, ``"flac"``, ``"mp3"``, ``"ogg"`` Examples: >>> has_video("stereo.wav") False """ - file = audeer.path(file) - if not os.path.exists(file): - raise RuntimeError(f"{file} does not exist.") - if file_extension(file) in SNDFORMATS: return False else: try: - cmd = ["mediainfo", "--Inform=Video;%Format%", file] + path = audeer.path(file) + if not os.path.exists(path): + raise RuntimeError(f"'{file}' does not exist.") + cmd = ["mediainfo", "--Inform=Video;%Format%", path] video_format = run(cmd) if len(video_format) > 0: return True diff --git a/tests/test_audiofile.py b/tests/test_audiofile.py index 35c0613f..98636634 100644 --- a/tests/test_audiofile.py +++ b/tests/test_audiofile.py @@ -243,14 +243,28 @@ def test_missing_file(tmpdir, ext): af.duration(missing_file) with pytest.raises(expected_error): af.duration(missing_file, sloppy=True) - with pytest.raises(expected_error): - af.has_video(missing_file) # Convert with pytest.raises(expected_error): converted_file = str(tmpdir.join("signal-converted.wav")) af.convert_to_wav(missing_file, converted_file) +@pytest.mark.parametrize( + "file, expected_error, expected_error_message", + [ + ("missing_file.bin", RuntimeError, "'missing_file.bin' does not exist"), + ("missing_file.mp4", RuntimeError, "'missing_file.mp4' does not exist"), + ("missing_file.wav", None, None), + ], +) +def test_missing_file_has_video(file, expected_error, expected_error_message): + if expected_error is not None: + with pytest.raises(expected_error, match=expected_error_message): + af.has_video(file) + else: + assert af.has_video(file) is False + + @pytest.mark.parametrize( "non_audio_file", ("bin", "mp4", "wav"),