fix(track): fix track missing artist and title tags

This commit is contained in:
Raiper34
2025-08-13 15:34:26 +00:00
parent 5068fa8a4b
commit b93993c6cf
2 changed files with 14 additions and 13 deletions
+8 -12
View File
@@ -10,7 +10,6 @@ import * as ytdl from '@distube/ytdl-core';
import { Readable } from 'stream'; import { Readable } from 'stream';
const NodeID3 = require('node-id3'); const NodeID3 = require('node-id3');
const META_DATA_TITLE = '-metadata';
const YT_SETTINGS: ytdl.downloadOptions = { const YT_SETTINGS: ytdl.downloadOptions = {
quality: 'highestaudio', quality: 'highestaudio',
filter: 'audioonly', filter: 'audioonly',
@@ -40,7 +39,6 @@ export class YoutubeService {
); );
return new Promise((res, reject) => { return new Promise((res, reject) => {
ffmpeg(this.getYoutubeAudio(track.youtubeUrl, reject)) ffmpeg(this.getYoutubeAudio(track.youtubeUrl, reject))
.outputOptions(...this.getFfmpegOptions(track.name, track.artist))
.format(this.configService.get<string>(EnvironmentEnum.FORMAT)) .format(this.configService.get<string>(EnvironmentEnum.FORMAT))
.on(StreamStates.Error, (err) => reject(err)) .on(StreamStates.Error, (err) => reject(err))
.pipe( .pipe(
@@ -57,7 +55,12 @@ export class YoutubeService {
}); });
} }
async addImage(folderName: string, coverUrl: string): Promise<void> { async addImage(
folderName: string,
coverUrl: string,
title: string,
artist: string,
): Promise<void> {
if (coverUrl) { if (coverUrl) {
const res = await fetch(coverUrl); const res = await fetch(coverUrl);
const arrayBuf = await res.arrayBuffer(); const arrayBuf = await res.arrayBuffer();
@@ -65,6 +68,8 @@ export class YoutubeService {
NodeID3.write( NodeID3.write(
{ {
title,
artist,
APIC: { APIC: {
mime: 'image/jpeg', mime: 'image/jpeg',
type: { id: 3, name: 'front cover' }, type: { id: 3, name: 'front cover' },
@@ -77,15 +82,6 @@ export class YoutubeService {
} }
} }
private getFfmpegOptions(name: string, artist: string): string[] {
return [
META_DATA_TITLE,
`title=${name}`,
META_DATA_TITLE,
`artist=${artist}`,
];
}
private getYoutubeAudio( private getYoutubeAudio(
youtubeUrl: string, youtubeUrl: string,
reject: (reason: any) => void, reject: (reason: any) => void,
+6 -1
View File
@@ -118,7 +118,12 @@ export class TrackService {
try { try {
const folderName = this.getFolderName(track, track.playlist); const folderName = this.getFolderName(track, track.playlist);
await this.youtubeService.downloadAndFormat(track, folderName); await this.youtubeService.downloadAndFormat(track, folderName);
await this.youtubeService.addImage(folderName, track.playlist.coverUrl); await this.youtubeService.addImage(
folderName,
track.playlist.coverUrl,
track.name,
track.artist,
);
} catch (err) { } catch (err) {
this.logger.error(err); this.logger.error(err);
error = String(err); error = String(err);