Implement MP3 metadata (ID3v1/2) read & write

This commit is contained in:
Vanilagy
2025-08-25 17:43:40 +02:00
parent 72eb54391e
commit fb0c41aa09
13 changed files with 1014 additions and 51 deletions
+31 -8
View File
@@ -24,22 +24,45 @@
chunked: true,
chunkSize: 2**20
});
const outputFormat = new Mediabunny.Mp4OutputFormat({});
const outputFormat = new Mediabunny.Mp3OutputFormat({});
const button = document.createElement('button');
button.textContent = 'Cancel';
button.onclick = () => conversion.cancel();
document.body.append(button);
const yo = document.createElement('canvas');
yo.width = 512;
yo.height = 512;
const context = yo.getContext('2d', { alpha: false });
context.fillStyle = 'red';
context.fillRect(100, 100, 300, 300);
const blob = await new Promise(resolve => yo.toBlob(resolve, 'image/jpeg', 0.92));
const blobData = new Uint8Array(await blob.arrayBuffer());
const mh = new Blob([blobData], { type: 'image/jpeg' });
console.log(URL.createObjectURL(mh))
const output = new Mediabunny.Output({
format: outputFormat,
target
});
output.setMetadata({
title: 'Bigggy',
artist: 'Buck Bunny',
images: [{
data: blobData,
kind: 'coverFront',
mimeType: 'image/jpeg'
}]
});
const conversion = await Mediabunny.Conversion.init({
input: new Mediabunny.Input({
formats: Mediabunny.ALL_FORMATS,
source
}),
output: new Mediabunny.Output({
format: outputFormat,
target
}),
output,
audio: {
//discard: true,
//codec: 'opus',
@@ -74,7 +97,7 @@
},
*/
video: () => ({
codec: 'avc',
//codec: 'avc',
//fit: 'contain',
//frameRate: 27.123,
//width: 320,
@@ -96,8 +119,8 @@
//height: 100,
}),
trim: {
//start: 0,
//end: 20
start: 0,
end: 20
},
});
console.log(conversion);
+7
View File
@@ -16,11 +16,18 @@
source
});
//const blob = new Blob([(await input.getMetadata()).images[0].data], { type: (await input.getMetadata()).images[0].mimeType });
//console.log(URL.createObjectURL(blob))
console.log(await input.getMetadata());
/*
const videoTrack = await input.getPrimaryVideoTrack();
console.log(await videoTrack.getFirstTimestamp(), await videoTrack.computeDuration());
console.log(videoTrack.name);
console.log(videoTrack.internalCodecId);
*/
/*
const sink = new Mediabunny.EncodedPacketSink(videoTrack);