YTDL и FS создают битый mp3 на windows (node.js) - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь загрузить видео с YouTube в mp3 и установить теги ID3 mp3 после этого. Я использую node.js для этого и дополнительную библиотеку node-id3 . Эта библиотека работает с обычными mp3-файлами, устанавливая теги как исполнитель или альбом. Вот код, который я использую:

import nodeid3 from 'node-id3';
import ytdl from 'ytdl-core';
import fs from 'fs'
const tags = {
  title: "Yesterday",
  artist: "Kevin Penkin",
  album: "TV BlaBla",
  TRCK: "42",
};

function downloadYt() {
  console.log("start downloading");
  ytdl('https://www.youtube.com/watch?v=PvAOeAwadbI', {
    filter: 'audioonly',
    quality: 'highestaudio',
    highWaterMark: 1 << 25,
  }).pipe(fs.createWriteStream('./test_tags.mp3')).on('close',()=>{
    setTags('./test_tags.mp3');
    console.log("Tags set");
  });

}

function setTags(filepath) {
  nodeid3.write(tags, filepath)
}

При загрузке файла полученный mp3-файл «как бы» ломается. Он все еще может быть воспроизведен, и программы тегов, такие как mp3tag , все еще распознают предоставленные теги.

Однако windows не распознает. Версия ID3-тегов - 2.3, но Windows не показывает теги, и теги нельзя редактировать с помощью windows. Это приведет к ошибке 0x8007000D, которая обычно известна как битые теги mp3 ( google search ). Однако использование небольших инструментов для исправления mp3 или использование MP3Tag (путем удаления всех тегов), как предлагается на многих форумах, НЕ исправляет файл. В этом отношении файл полностью разбит.

Мне нужен еще один вариант, чтобы либо получить поток ytdl (если это проблема), либо сохранить поток в mp3 (если это проблема).

...