【问题标题】:Python VLC module not working with no tagsPython VLC 模块在没有标签的情况下不工作
【发布时间】:2017-09-10 17:40:20
【问题描述】:

我正在使用 Python 中的 VLC 模块来播放一些通过 YouTube 到 MP3 转换器下载的音乐,用于一个项目。问题是,我发现这些文件不喜欢合作,Python 最终向我扔了一大堆红色。我相信这是因为 MP3 文件没有标签,所以当模块检查它们并且它们不存在时,它会向我抛出错误。这是我的代码:

import vlc
import os
import time

def playtrack(fileid, songname):
    filename = fileid + ".mp3"
    print('Now playing: ' + songname)
    music = vlc.MediaPlayer(filename)
    music.play()
    print(music.get_state())
    time.sleep(60)
    print("Finished.")
    #os.remove(filename)

playtrack("tVj0ZTS4WF4", "foo")

这是输出“非常长...”:

Now playing: foo
State.NothingSpecial
Warning: option --plugin-path no longer exists.
Warning: option --plugin-path no longer exists.
TagLib: MPEG::Header::parse() -- The next frame was not consistent with this frame.
TagLib: MPEG::Header::parse() -- The next frame was not consistent with this frame.

还有比这更多的错误,但是 Stack Overflow 限制我把它们都放出来。无论如何,它们都是一样的。

TagLib: MPEG::Header::parse() -- The next frame was not consistent with this 
TagLib: MPEG::Header::parse() -- Invalid MPEG version bits.
TagLib: MPEG::Header::parse() -- Invalid MPEG layer bits.
TagLib: MPEG::Header::parse() -- Invalid MPEG version bits.
TagLib: MPEG::Header::parse() -- Invalid bit rate.
TagLib: MPEG::Header::parse() -- Invalid MPEG version bits.
TagLib: MPEG::Header::parse() -- The next frame was not consistent with this frame.
TagLib: MPEG::Header::parse() -- Invalid bit rate.
TagLib: MPEG::Header::parse() -- Could not read the next frame header.
TagLib: MPEG::Header::parse() -- The next frame was not consistent with this frame.
TagLib: MPEG::Properties::read() -- Could not find a valid first MPEG frame in the stream.
Finished.

Process finished with exit code 0

这里是下载器,如果需要的话:

import youtube_dl
import os


class InvalidURL(Exception):
    pass


class SongExists(Exception):
    pass


def download(url):
    try:
        options = {
            'format': 'bestaudio/best',
            'extractaudio': True,  # only keep the audio
            'audioformat': "mp3",  # convert to wav
            'outtmpl': '%(id)s.mp3',  # name the file the ID of the video
            'noplaylist': True,  # only download single song, not playlist
        }
        with youtube_dl.YoutubeDL(options) as ydl:
            r = ydl.extract_info(url, download=False)
            if os.path.isfile(str(r["id"])):
                raise SongExists('This song has already been requested.')
            print("Downloading" + str(r["title"]))
            ydl.download([url])
            print("Downloaded" + str(r["title"]))
            return r["title"], r["id"]
    except youtube_dl.utils.DownloadError:
        raise InvalidURL('This URL is invalid.')

if __name__ == "__main__":
    download("https://www.youtube.com/watch?v=tVj0ZTS4WF4")

【问题讨论】:

    标签: python mp3 vlc taglib


    【解决方案1】:

    我已经在我的机器上尝试了你的代码,它可以工作。我认为您使用的是过时的版本或过时的库。所以试试下面的代码,如果你找到更可靠的解决方案,请告诉我......

    sudo pip uninstall vlc
    sudo pip uninstall python-vlc
    sudo pip install python-vlc
    

    【讨论】:

    • 我通过使用 WAV 文件而不是 MP3 文件解决了这个问题。现在一切都很好,但还是谢谢。
    猜你喜欢
    • 2019-07-03
    • 1970-01-01
    • 2023-03-17
    • 2011-04-02
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    相关资源
    最近更新 更多