сменить автора mp3 файла - PullRequest
0 голосов
/ 14 декабря 2018

Я хотел бы указать автора mp3-файла на основе данных, отправленных пользователем.

До сих пор мне удавалось получить данные, отправленные пользователем (в любом случае, вряд ли это эксплойт), но мне не удалось сменить автора файла.Я пытался использовать оба пакета node-id3 и ffmetadata , как это предложено этим ответом , но ничего из этого не сработало.

Подход узла-id3

Вот часть кода, которую я написал для подхода узла-id3, и пока теги, показанные в readTags, действительно являются теми, которые я добавил вметод update, он не меняет автора файла, когда я читаю его на моем компьютере (с itunes) или на моем телефоне Android (с музыкой samsung), что означает, что этот подход не работает.

const NodeID3 = require('node-id3')    

//getting the filename and fileAuthor, as well as creating the file on the server

let tags = {
    title: filename,
    composer: fileAuthor,
    artist: fileAuthor,
    remixArtist: fileAuthor,
    conductor: fileAuthor,
    originalArtist: fileAuthor,
}

let success = NodeID3.update(tags, toBeDownloadedFilePath)

console.log(success)

let readTags = NodeID3.read(toBeDownloadedFilePath)

console.log(readTags)

подход ffmetadata

Вот та же часть, написанная с использованием подхода ffmetadata:

const ffmetadata = require("ffmetadata");  

//getting the filename and fileAuthor, as well as creating the file on the server

let tags = {
    artist: fileAuthor,
}

ffmetadata.write(toBeDownloadedFilePath, tags, function(err) {
    if (err) console.error("Error writing metadata", err);
    else console.log("Data written");
});

и с этим подходом я получаюошибка:

[mp3 @ 0x7f90f8000000] Формат mp3 обнаружен только при низком значении 1, возможно неправильное обнаружение![mp3 @ 0x7f90f8000000] Не удалось прочитать размер кадра: невозможно найти 1026. music1.mp3: неверный аргумент

(music1.mp3 - мое имя файла), и мой mp3-файл отлично распознается всемиАудио-ридер, с которым я его тестировал.

Большое спасибо за помощь.

1 Ответ

0 голосов
/ 14 декабря 2018

Итак, я наконец нашел, где была проблема (по крайней мере, с подходом node-id3):

, чтобы лучше понять это, я добавлю некоторые детали к , создающему файл на сервере step.

Вот мой неработающий код:

const NodeID3 = require('node-id3') 
const fs = require('fs-extra');  // file system   

fs.ensureFileSync(toBeDownloadedFilePath); //because I need to create the file if it doesn't exist
const toBeDownloadedFile = fs.createWriteStream(toBeDownloadedFilePath);

//the way the audio stream is created isn't relevant, but if you're interested, it's a youtube stream, as per https://www.npmjs.com/package/youtube-audio-stream
let fileWriteStream = audioStream.pipe(toBeDownloadedFile)

let tags = {
    title: filename,
    composer: fileAuthor,
    artist: fileAuthor,
    remixArtist: fileAuthor,
    conductor: fileAuthor,
    originalArtist: fileAuthor,
}

let success = NodeID3.update(tags, toBeDownloadedFilePath)

console.log(success)

let readTags = NodeID3.read(toBeDownloadedFilePath)

console.log(readTags)

И проблема заключалась в том, что мои теги были написаны, но немедленно удалены решением audiostream.pipe

поэтому было довольно просто, и я получил следующий код:

const NodeID3 = require('node-id3') 
const fs = require('fs-extra');  // file system   

fs.ensureFileSync(toBeDownloadedFilePath); //because I need to create the file if it doesn't exist
const toBeDownloadedFile = fs.createWriteStream(toBeDownloadedFilePath);

let fileWriteStream = audiSstream.pipe(toBeDownloadedFile)

fileWriteStream.on('finish', () => {
    let tags = {
        title: filename,
        artist: fileAuthor,
    }

    NodeID3.update(tags, toBeDownloadedFilePath)

    //any additional action, in my case, send the file for a download
})

Надеюсь, это поможет людям с подобной проблемой.

...