fix(track): fix track missing artist and title tags
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user