ffmpeg
copied
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Readme
Files and versions
25 lines
719 B
25 lines
719 B
3 years ago
|
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)
|