0

我正在使用ytdl-core,它提供了这个 URL(音频):

https://r2---sn-gwpa-w5py.googlevideo.com/videoplayback?expire=1612552132&ei=ZEMdYNnJDumPz7sPyrSLmAw&ip=49.36.246.217&id=o-AFQLS1cSUJ6_bXBjMOIiWk1NuIYTMUTVu4rmliPZmJCS&itag=251&source=youtube&requiressl=yes&mh=VD&mm=31%2C29&mn=sn-gwpa-w5py%2Csn-gwpa-qxaz&ms=au%2Crdu&mv=m&mvi=2&pl=21&initcwndbps=225000&vprv=1&mime=audio%2Fwebm&ns=nxhNYqBZK92ToigY08JRZjEF&gir=yes&clen=230633&dur=18.961&lmt=1524503096692151&mt=1612530050&fvip=2&keepalive=yes&c=WEB&n=UIc0qqVvrMQOjPVkP&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRQIhAObqQA5vFYy6rJ3O3J4zswofNj2NFZOrwMF05p_PgWg9AiAmnde3njBRfvPmW_2VVA0YO1aLWQl0V3STGayuqgBRKA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRAIgFTqy7Ng9zxhQY4GM4vP1BooPeHOf50PTikb59C67voACIGDybTTJBdLkp9lUx_-ZLdCulG_y3TH6iMhBbAn1AZR_&ratebypass=yes

但我希望 .mp3 最后像这样:

https://r2---sn-gwpa-w5py.googlevideo.com/13%20Beethoven%20-%20Fur%20Elise.mp3

我想.mp3在最后。

这可能吗?我正在使用 JavaScript 框架(后端的 NodeJS 和前端的 React-Native)。

4

4 回答 4

0

不,这是不可能的。Google 决定为其视频和音频资源提供哪些 URL。

于 2021-02-05T13:53:36.627 回答
0

这是不可能的。您无法更改 Google 为您提供的 URL。你唯一能做的就是使用他们给你的 URL。

于 2021-02-05T14:48:57.830 回答
-1

没有.mp3,对于它使用的音频,.m4a或者.weba,您需要 ffmpeg 将其转换为.mp3

于 2021-02-05T13:57:52.187 回答
-1

通过视频 ID,您可以使用 YouTube API 来查找视频的标题。然后,您可以获取 URL 的来源并附加曲目标题。

如果你只是想要视频的名称作为文件名,下载后,只需将文件名设置为getVideoTitle.

const url = new URL('https://r2---sn-gwpa-w5py.googlevideo.com/videoplayback?expire=1612552132&ei=ZEMdYNnJDumPz7sPyrSLmAw&ip=49.36.246.217&id=o-AFQLS1cSUJ6_bXBjMOIiWk1NuIYTMUTVu4rmliPZmJCS&itag=251&source=youtube&requiressl=yes&mh=VD&mm=31%2C29&mn=sn-gwpa-w5py%2Csn-gwpa-qxaz&ms=au%2Crdu&mv=m&mvi=2&pl=21&initcwndbps=225000&vprv=1&mime=audio%2Fwebm&ns=nxhNYqBZK92ToigY08JRZjEF&gir=yes&clen=230633&dur=18.961&lmt=1524503096692151&mt=1612530050&fvip=2&keepalive=yes&c=WEB&n=UIc0qqVvrMQOjPVkP&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRQIhAObqQA5vFYy6rJ3O3J4zswofNj2NFZOrwMF05p_PgWg9AiAmnde3njBRfvPmW_2VVA0YO1aLWQl0V3STGayuqgBRKA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRAIgFTqy7Ng9zxhQY4GM4vP1BooPeHOf50PTikb59C67voACIGDybTTJBdLkp9lUx_-ZLdCulG_y3TH6iMhBbAn1AZR_&ratebypass=yes');

const api = 'https://www.googleapis.com/youtube/v3';
const apiKey = '<API_KEY>';

const getVideoPath = videoId => `${api}/videos?id=${videoId}&key=${apiKey}&part=snippet`;
const getVideoInfo = async (videoId) => fetch(getVideoPath(videoId));

const getVideoTitle = async (videoId) => {
  const response = await getVideoInfo(videoId);
  const info = await response.json();
  const { items: [ { snippet: { title } } ] } = info;
  return title;
};

const main = async () => {
  let title = null;
  try {
    title = await getVideoTitle('dQw4w9WgXcQ');
  } catch (err) {
    console.log('Please supply a valid API key!');
  }
  
  // Fallback: If API key is valid, title should not be null
  title = title || 'Rick Astley - Never Gonna Give You Up (Video)';
  const newUrl = `${url.origin}/${encodeURIComponent(title)}.mp3`;

  console.log(newUrl);

  const query = Object.fromEntries(url.search.substring(1).split('&')
    .map(pair => pair.split('=').map(v => decodeURIComponent(v))));

  console.log(query); // Nothing of interest...
};

main();
.as-console-wrapper { top: 0; max-height: 100% !important; }

于 2021-02-05T14:43:16.303 回答