From f8ee0d3fb41befbd0cd8395ee45175aefe41c9f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Kurzeja?= Date: Tue, 31 May 2022 17:31:25 +0200 Subject: [PATCH 1/3] Set default audio_bitrate --- moviepy/video/io/ffmpeg_reader.py | 3 +++ tests/test_ffmpeg_reader.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/moviepy/video/io/ffmpeg_reader.py b/moviepy/video/io/ffmpeg_reader.py index 9dbc2c5ba..30cd26180 100644 --- a/moviepy/video/io/ffmpeg_reader.py +++ b/moviepy/video/io/ffmpeg_reader.py @@ -585,6 +585,9 @@ def parse(self): if self.result.get("audio_bitrate"): break + if "audio_bitrate" not in self.result: + self.result["audio_bitrate"] = None + result = self.result # reset state of the parser diff --git a/tests/test_ffmpeg_reader.py b/tests/test_ffmpeg_reader.py index 89365baa2..fad05073c 100644 --- a/tests/test_ffmpeg_reader.py +++ b/tests/test_ffmpeg_reader.py @@ -527,6 +527,22 @@ def test_stream_square_brackets(): assert d["inputs"][0]["streams"][1]["language"] is None +def test_stream_missing_audio_bitrate(): + infos = """ +Input #0, mpeg, from 'clip.mp4': + Duration: 00:02:15.00, start: 52874.498178, bitrate: 266 kb/s + Stream #0:0[0x1e0]: Video: ..., 25 tbr, 90k tbn, 50 tbc + Stream #0:1[0x1c0]: Audio: mp2, 0 channels, s16p +At least one output file must be specified""" + + d = FFmpegInfosParser(infos, "clip.mp4").parse() + + assert d + assert len(d["inputs"][0]["streams"]) == 2 + assert d["audio_found"] + assert d["audio_bitrate"] is None + + def test_sequential_frame_pos(): """test_video.mp4 contains 5 frames at 1 fps. Each frame is 1x1 pixels and the sequence is Red, Green, Blue, Black, White. From 8f770aba25b08dfae7e78ae5c3f37a7d70175d59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Kurzeja?= Date: Wed, 1 Jun 2022 11:15:12 +0200 Subject: [PATCH 2/3] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d301eb26..995d3e6e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,6 +63,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed mono clips crashing when `audio_fadeout` FX applied [\#1578](https://github.com/Zulko/moviepy/pull/1578) - Fixed scroll FX not being scrolling [\#1591](https://github.com/Zulko/moviepy/pull/1591) - Fixed parsing FFMPEG streams with square brackets [\#1781](https://github.com/Zulko/moviepy/pull/1781) +- Fixed audio processing for streams with missing `audio_bitrate` [\#1783](https://github.com/Zulko/moviepy/pull/1783) ## [v2.0.0.dev2](https://github.com/zulko/moviepy/tree/v2.0.0.dev2) (2020-10-05) From 9a79d758bf5fa2f5cfdb9f0f10cd6348896513df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Kurzeja?= Date: Wed, 1 Jun 2022 13:14:03 +0200 Subject: [PATCH 3/3] Refactor code --- moviepy/video/io/ffmpeg_reader.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/moviepy/video/io/ffmpeg_reader.py b/moviepy/video/io/ffmpeg_reader.py index 30cd26180..c94e0580c 100644 --- a/moviepy/video/io/ffmpeg_reader.py +++ b/moviepy/video/io/ffmpeg_reader.py @@ -577,16 +577,16 @@ def parse(self): # not default audio found, assume first audio stream is the default if self.result["audio_found"] and not self.result.get("audio_bitrate"): + + self.result["audio_bitrate"] = None for streams_input in self.result["inputs"]: for stream in streams_input["streams"]: if stream["stream_type"] == "audio" and stream.get("bitrate"): self.result["audio_bitrate"] = stream["bitrate"] break - if self.result.get("audio_bitrate"): - break - if "audio_bitrate" not in self.result: - self.result["audio_bitrate"] = None + if self.result["audio_bitrate"] is not None: + break result = self.result