Как превратить mp4 только с аудио в массив NumPy - PullRequest
0 голосов
/ 04 июня 2019

Я хочу:

Скачать аудиофайлы с Youtube

, что я сделал с pytube , однако он отформатирован в mp4 , хотя я установил для Only_audio значение True.

, затем превратите аудиофайлы в массивы numy

Существуют библиотеки, работающие с mp3, например, pydub, но не mp4.Когда я попробовал moviepy , это не удалось, потому что нет видео и, следовательно, нет частоты кадров.Я не хочу загружать видео, потому что это займет гораздо больше времени.

Обратите внимание, что я хочу аудио, а не видео.

Как можно:

скачать аудио с YouTube, и превратить его в массивы?

Спасибо за любую помощь:)


РЕДАКТИРОВАТЬ

Благодаря комментариям мне удалось превратить mp4 в mp3 с помощью ffmpeg

Однако, когда я попытался превратить его в массивы с помощью кода из , этот вопрос , который выглядит какэто:

def read(f, normalized=False):
    """MP3 to numpy array"""
    a = pydub.AudioSegment.from_mp3(f)
    y = np.array(a.get_array_of_samples())
    if a.channels == 2:
        y = y.reshape((-1, 2))
    if normalized:
        return a.frame_rate, np.float32(y) / 2**15
    else:
        return a.frame_rate, y

возникла эта ошибка:

    Traceback (most recent call last):
  File "C:\Users\myname\Google Drive\Python\Projects\Music\Downloads\Music Read.py", line 63, in <module>
    print(read(x,True))
  ......
  File "C:\Users\myname\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 1017, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified

Это странно, потому что, как показано ниже, путь должен работать идеально

for f in os.listdir(path):
    if (f.endswith(".mp3")):
        print(f)
        x = 'C:/Users/myname/Google Drive/Python/Projects/Music/Downloads/{}'.format(f)
        print(os.path.exists(x))
        print(open(x))
        print(read(x,True))

вывод:

test-Copy.mp3
True
c:/users/myname/google drive/python/projects/music/downloads/test-copy.mp3
<_io.TextIOWrapper name='c:/users/myname/google drive/python/projects/music/downloads/test-copy.mp3' mode='r' encoding='cp1252'>

Кроме того, при вводе пути к файлу, который на самом деле не существует, выдается другая ошибка:

......
File "C:\Users\myname\AppData\Local\Programs\Python\Python36\lib\site-packages\pydub\utils.py", line 57, in _fd_or_path_or_tempfile
fd = open(fd, mode=mode)
FileNotFoundError: [Errno 2] No such file or directory: 'c:/users/myname/google drive/python/projects/music/downloads/hi'

Как использовать код из этот вопрос чтобы превратить mp3 в массивы, если я не могу, как еще?

кстати я работаю на Win10 с python 3.6

Я действительно надеюсь, что прояснил себя достаточно, и еще раз спасибо заранее за любые советы:)

1 Ответ

0 голосов
/ 09 июня 2019

Это странный ответ на мой вопрос, но:

Я решил проблему с pydub, используя этот код:

def decode (fname):
    # If you are on Windows use full path to ffmpeg.exe
    cmd = ["C:/Users/allen/Google Drive/Python/Tools/ffmpeg-20190604-d3f236b-win64-static/bin/ffmpeg.exe", "-i", fname, "-f", "wav", "-"]
    # If you are on W add argument creationflags=0x8000000 to prevent another console window jumping out
    p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
    data = p.communicate()[0]
    return np.fromstring(data[data.find(data)+4:], np.int16)
...