我有一個(gè)在 Node.js 上運(yùn)行的網(wǎng)站,并在后端 Express 上運(yùn)行,該網(wǎng)站依次調(diào)用 .py
腳本來使用 yt-dlp 下載用戶請(qǐng)求的音頻。當(dāng)我在本地主機(jī)上運(yùn)行該網(wǎng)站時(shí),一切都運(yùn)行得很好,并且我得到了一個(gè) .mp4 可下載 URL,可以直接將其輸入 JavaScript 音頻中。
但是,當(dāng)我在 Heroku 上部署網(wǎng)站時(shí),相同的 .py
腳本給了我一個(gè) .m3u8 url,它是一個(gè)音頻播放列表,并且需要額外的步驟,例如 hls
才能使用 JavaScript 播放。
我的問題是為什么會(huì)發(fā)生這種情況。
我的 Heroku 構(gòu)建包包含 nodejs
和 python
。我是否缺少 FFmpegExtractAudio
這里或下面的一些 yt-dlp 格式選項(xiàng)?
我的 .py
腳本是
ydl_opts = { 'format': 'bestaudio/best', 'quiet': True, 'postprocessors': [{ 'key': 'FFmpegExtractAudio', 'preferredcodec': 'mp3', 'preferredquality': '192', }],} with yt_dlp.YoutubeDL(ydl_opts) as ydl: try: info = ydl.extract_info("ytsearch:%s" % requestedAudio, download=False)['entries'][0] # code follows... except yt_dlp.utils.DownloadError or yt_dlp.utils.ExtractorError: # code follows...
編輯:對(duì)于那些有類似問題的人,我可以通過更改 yt-dlp 選項(xiàng)來解決問題。具體來說,我添加了 format
和 extractor_args
標(biāo)志。注意:上面的代碼在 localhost 上運(yùn)行,下面的代碼在 Heroku 部署的 webapp 以及 localhost 上運(yùn)行??鞓肪幋a!
ydl_opts = { 'format': '(bestaudio/best)[protocol~="^https?$"]', 'quiet': True, 'noplaylist': True, 'postprocessors': [{ 'key': 'FFmpegExtractAudio', 'preferredcodec': 'mp3', 'preferredquality': '192', }], 'extractor_args': {'youtube':{'player_client': ['android', 'web']}},