From 1efae40067fe3b72185194cad0d6ca8e1243376f Mon Sep 17 00:00:00 2001 From: junjiejiangjjj Date: Sat, 2 Apr 2022 10:48:58 +0800 Subject: [PATCH] update --- __init__.py | 5 +++++ audio_decoder_ffmpeg.py | 24 ++++++++++++++++++++++++ requirements.txt | 1 + 3 files changed, 30 insertions(+) create mode 100644 __init__.py create mode 100644 audio_decoder_ffmpeg.py create mode 100644 requirements.txt diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..f1d9302 --- /dev/null +++ b/__init__.py @@ -0,0 +1,5 @@ +from .audio_decoder_ffmpeg import AudioDecoderFFmpeg + + +def ffmpeg(): + return AudioDecoderFFmpeg() diff --git a/audio_decoder_ffmpeg.py b/audio_decoder_ffmpeg.py new file mode 100644 index 0000000..7d6fe1b --- /dev/null +++ b/audio_decoder_ffmpeg.py @@ -0,0 +1,24 @@ +import av + +from towhee import register +from towhee.operator import PyOperator, OperatorFlag +from towhee.types.audio_frame import AudioFrame + + +@register(output_schema=['audio_frame'], + flag=OperatorFlag.REUSEABLE) +class AudioDecoderFFmpeg(PyOperator): + """ + """ + + def __init__(self) -> None: + super().__init__() + + def __call__(self, audio_path: str): + in_container = av.open(audio_path) + stream = in_container.streams.get(audio=0)[0] + for frame in in_container.decode(stream): + timestamp = int(frame.time * 1000) + sample_rate = frame.sample_rate + ndarray = frame.to_ndarray() + yield AudioFrame(ndarray, sample_rate, timestamp) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..dc1ce6e --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +av