mirror of
https://github.com/codedread/bitjs
synced 2025-10-03 17:49:16 +02:00
Update to 1.1.6 for mp3 streams and ffprobe reporting mp4 files with unknown levels
This commit is contained in:
parent
ce8f61da94
commit
0b75c2793b
4 changed files with 33 additions and 8 deletions
|
@ -2,6 +2,13 @@
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## [1.1.6] - 2023-10-25
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- codecs: Special handling for mp3 streams inside mp4 containers.
|
||||||
|
- codecs: Handle ffprobe level -99 in mp4 files.
|
||||||
|
|
||||||
## [1.1.5] - 2023-10-22
|
## [1.1.5] - 2023-10-22
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
|
@ -141,6 +141,12 @@ export function getFullMIMEString(info) {
|
||||||
|
|
||||||
for (const stream of info.streams) {
|
for (const stream of info.streams) {
|
||||||
if (stream.codec_type === 'audio') {
|
if (stream.codec_type === 'audio') {
|
||||||
|
// MP3 can sometimes have codec_tag_string=mp4a, so we check for it first.
|
||||||
|
if (stream.codec_name === 'mp3') {
|
||||||
|
codecFrags.add('mp3');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
switch (stream.codec_tag_string) {
|
switch (stream.codec_tag_string) {
|
||||||
case 'mp4a': codecFrags.add(getMP4ACodecString(stream)); break;
|
case 'mp4a': codecFrags.add(getMP4ACodecString(stream)); break;
|
||||||
default:
|
default:
|
||||||
|
@ -267,8 +273,8 @@ function getVP09CodecString(stream) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add LL hex digits.
|
// Add LL hex digits.
|
||||||
// If ffprobe is spitting out -99 as level... Just return 'vp9'.
|
// If ffprobe is spitting out -99 as level... it means unknown, so we will guess level=1.
|
||||||
if (stream.level === -99) { return 'vp9'; }
|
if (stream.level === -99) { frag += `.10`; }
|
||||||
else {
|
else {
|
||||||
const levelAsHex = Number(stream.level).toString(16).toUpperCase().padStart(2, '0');
|
const levelAsHex = Number(stream.level).toString(16).toUpperCase().padStart(2, '0');
|
||||||
if (levelAsHex.length !== 2) {
|
if (levelAsHex.length !== 2) {
|
||||||
|
@ -279,8 +285,8 @@ function getVP09CodecString(stream) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add DD hex digits.
|
// Add DD hex digits.
|
||||||
// TODO: This is just a guess at DD (16?), need to try and extract this info from
|
// TODO: This is just a guess at DD (10-bit color depth), need to try and extract this info
|
||||||
// ffprobe JSON output instead.
|
// from ffprobe JSON output instead.
|
||||||
frag += '.10';
|
frag += '.10';
|
||||||
|
|
||||||
return frag;
|
return frag;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@codedread/bitjs",
|
"name": "@codedread/bitjs",
|
||||||
"version": "1.1.5",
|
"version": "1.1.6",
|
||||||
"description": "Binary Tools for JavaScript",
|
"description": "Binary Tools for JavaScript",
|
||||||
"homepage": "https://github.com/codedread/bitjs",
|
"homepage": "https://github.com/codedread/bitjs",
|
||||||
"author": "Jeff Schiller",
|
"author": "Jeff Schiller",
|
||||||
|
|
|
@ -349,11 +349,11 @@ describe('codecs test suite', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('detects level = -99', () => {
|
it('detects level = -99 as level 1', () => {
|
||||||
info.streams[0].level = -99; // I'm not sure what ffprobe means by this.
|
info.streams[0].level = -99; // I believe this is the "unknown" value from ffprobe.
|
||||||
expect(getFullMIMEString(info))
|
expect(getFullMIMEString(info))
|
||||||
.to.be.a('string')
|
.to.be.a('string')
|
||||||
.and.equals('video/webm; codecs="vp9"');
|
.and.equals('video/webm; codecs="vp09.00.10.10"');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -575,6 +575,18 @@ describe('codecs test suite', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('MP3', () => {
|
||||||
|
it('detects MP3', () => {
|
||||||
|
/** @type {ProbeInfo} */
|
||||||
|
let info = {
|
||||||
|
format: { format_name: 'mov,mp4,m4a,3gp,3g2,mj2' },
|
||||||
|
streams: [ { codec_type: 'audio', codec_name: 'mp3', codec_tag_string: 'mp4a' } ],
|
||||||
|
};
|
||||||
|
expect(getShortMIMEString(info)).equals('audio/mp4');
|
||||||
|
expect(getFullMIMEString(info)).equals('audio/mp4; codecs="mp3"');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('WAV', () => {
|
describe('WAV', () => {
|
||||||
it('detects WAV', () => {
|
it('detects WAV', () => {
|
||||||
/** @type {ProbeInfo} */
|
/** @type {ProbeInfo} */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue