ytgrab 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,6 @@ import { FileDownloader } from './common.js';
7
7
  import type { InfoDict } from '../types.js';
8
8
  export declare class HlsFD extends FileDownloader {
9
9
  realDownload(filename: string, infoDict: InfoDict): Promise<boolean>;
10
- private _transmuxToMp4;
11
10
  private _parseMediaPlaylist;
12
11
  }
13
12
  //# sourceMappingURL=hls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hls.d.ts","sourceRoot":"","sources":["../../src/downloader/hls.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,qBAAa,KAAM,SAAQ,cAAc;IACjC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;YAiF5D,cAAc;IAgD5B,OAAO,CAAC,mBAAmB;CAoB5B"}
1
+ {"version":3,"file":"hls.d.ts","sourceRoot":"","sources":["../../src/downloader/hls.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,qBAAa,KAAM,SAAQ,cAAc;IACjC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAmF1E,OAAO,CAAC,mBAAmB;CAoB5B"}
@@ -42,6 +42,7 @@ exports.HlsFD = void 0;
42
42
  const fs = __importStar(require("node:fs"));
43
43
  const common_js_1 = require("./common.js");
44
44
  const index_js_1 = require("../networking/index.js");
45
+ const mp4fix_js_1 = require("./mp4fix.js");
45
46
  class HlsFD extends common_js_1.FileDownloader {
46
47
  async realDownload(filename, infoDict) {
47
48
  const manifestUrl = (infoDict.url || infoDict.manifest_url);
@@ -96,13 +97,15 @@ class HlsFD extends common_js_1.FileDownloader {
96
97
  // For other errors (network), continue
97
98
  }
98
99
  }
99
- // Transmux TS→MP4 using mux.js (pure JS, no FFmpeg)
100
+ // Transmux TS→MP4 using toMp4 (pure JS, no FFmpeg)
100
101
  const tsData = Buffer.concat(tsChunks);
101
102
  if (filename.endsWith('.mp4')) {
102
103
  try {
103
- const mp4Data = await this._transmuxToMp4(tsData);
104
- fs.writeFileSync(filename, mp4Data);
105
- downloadedBytes = mp4Data.length;
104
+ const toMp4 = (await import('@invintusmedia/tomp4')).default;
105
+ const result = await toMp4(new Uint8Array(tsData));
106
+ const fixed = (0, mp4fix_js_1.fixMp4ForQuickTime)(Buffer.from(result.data));
107
+ fs.writeFileSync(filename, fixed);
108
+ downloadedBytes = fixed.length;
106
109
  this._log('Transmuxed to MP4');
107
110
  }
108
111
  catch (err) {
@@ -116,47 +119,6 @@ class HlsFD extends common_js_1.FileDownloader {
116
119
  this.reportFinished(filename, downloadedBytes);
117
120
  return true;
118
121
  }
119
- async _transmuxToMp4(tsData) {
120
- // Dynamic import to avoid issues with ESM/CJS
121
- // eslint-disable-next-line @typescript-eslint/no-require-imports
122
- const muxjs = require('mux.js');
123
- const Transmuxer = muxjs.mp4?.Transmuxer || muxjs.default?.mp4?.Transmuxer;
124
- if (!Transmuxer) {
125
- throw new Error('mux.js Transmuxer not found');
126
- }
127
- return new Promise((resolve, reject) => {
128
- const transmuxer = new Transmuxer();
129
- const outputChunks = [];
130
- let initSegment = null;
131
- transmuxer.on('data', (segment) => {
132
- if (!initSegment) {
133
- initSegment = segment.initSegment;
134
- outputChunks.push(segment.initSegment);
135
- }
136
- outputChunks.push(segment.data);
137
- });
138
- transmuxer.on('done', () => {
139
- if (outputChunks.length === 0) {
140
- reject(new Error('No output from transmuxer'));
141
- return;
142
- }
143
- const totalLen = outputChunks.reduce((sum, c) => sum + c.length, 0);
144
- const result = Buffer.alloc(totalLen);
145
- let offset = 0;
146
- for (const chunk of outputChunks) {
147
- result.set(chunk, offset);
148
- offset += chunk.length;
149
- }
150
- resolve(result);
151
- });
152
- transmuxer.on('error', (err) => {
153
- reject(err);
154
- });
155
- // Feed all TS data and flush
156
- transmuxer.push(new Uint8Array(tsData));
157
- transmuxer.flush();
158
- });
159
- }
160
122
  _parseMediaPlaylist(manifest, baseUrl) {
161
123
  const fragments = [];
162
124
  const lines = manifest.split('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"hls.js","sourceRoot":"","sources":["../../src/downloader/hls.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hls.js","sourceRoot":"","sources":["../../src/downloader/hls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * MP4 post-processor: fix single-chunk MP4 files for QuickTime compatibility.
3
+ *
4
+ * Some JS-based MP4 muxers write all samples into a single chunk,
5
+ * which QuickTime can't render (black screen). This rewrites the
6
+ * stco/stsc boxes to create per-sample chunk offsets.
7
+ */
8
+ /**
9
+ * Fix MP4 for QuickTime: rewrite chunk tables so each sample is its own chunk.
10
+ * This modifies the buffer in-place and may return a new buffer if size changes.
11
+ */
12
+ export declare function fixMp4ForQuickTime(input: Buffer): Buffer;
13
+ //# sourceMappingURL=mp4fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mp4fix.d.ts","sourceRoot":"","sources":["../../src/downloader/mp4fix.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyCH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsPxD"}
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ /**
3
+ * MP4 post-processor: fix single-chunk MP4 files for QuickTime compatibility.
4
+ *
5
+ * Some JS-based MP4 muxers write all samples into a single chunk,
6
+ * which QuickTime can't render (black screen). This rewrites the
7
+ * stco/stsc boxes to create per-sample chunk offsets.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.fixMp4ForQuickTime = fixMp4ForQuickTime;
11
+ function findBoxes(data, start, end) {
12
+ const boxes = [];
13
+ let offset = start;
14
+ while (offset < end - 8) {
15
+ const size = data.readUInt32BE(offset);
16
+ const type = data.toString('ascii', offset + 4, offset + 8);
17
+ if (size === 0 || size > end - offset)
18
+ break;
19
+ boxes.push({ type, offset, size });
20
+ offset += size;
21
+ }
22
+ return boxes;
23
+ }
24
+ function findBox(data, start, end, type) {
25
+ const boxes = findBoxes(data, start, end);
26
+ return boxes.find(b => b.type === type) || null;
27
+ }
28
+ function findBoxDeep(data, path) {
29
+ let start = 0;
30
+ let end = data.length;
31
+ for (let i = 0; i < path.length; i++) {
32
+ const box = findBox(data, start, end, path[i]);
33
+ if (!box)
34
+ return null;
35
+ if (i === path.length - 1)
36
+ return box;
37
+ // Container box: content starts after 8-byte header
38
+ start = box.offset + 8;
39
+ end = box.offset + box.size;
40
+ }
41
+ return null;
42
+ }
43
+ /**
44
+ * Fix MP4 for QuickTime: rewrite chunk tables so each sample is its own chunk.
45
+ * This modifies the buffer in-place and may return a new buffer if size changes.
46
+ */
47
+ function fixMp4ForQuickTime(input) {
48
+ // Find mdat to get the data offset
49
+ const mdatBox = findBox(input, 0, input.length, 'mdat');
50
+ if (!mdatBox)
51
+ return input;
52
+ const mdatDataStart = mdatBox.offset + 8;
53
+ // Find moov
54
+ const moovBox = findBox(input, 0, input.length, 'moov');
55
+ if (!moovBox)
56
+ return input;
57
+ // Process each trak
58
+ const traks = findBoxes(input, moovBox.offset + 8, moovBox.offset + moovBox.size)
59
+ .filter(b => b.type === 'trak');
60
+ const tracks = [];
61
+ for (const trak of traks) {
62
+ const mdia = findBox(input, trak.offset + 8, trak.offset + trak.size, 'mdia');
63
+ if (!mdia)
64
+ continue;
65
+ const minf = findBox(input, mdia.offset + 8, mdia.offset + mdia.size, 'minf');
66
+ if (!minf)
67
+ continue;
68
+ const stbl = findBox(input, minf.offset + 8, minf.offset + minf.size, 'stbl');
69
+ if (!stbl)
70
+ continue;
71
+ const stsz = findBox(input, stbl.offset + 8, stbl.offset + stbl.size, 'stsz');
72
+ const stco = findBox(input, stbl.offset + 8, stbl.offset + stbl.size, 'stco');
73
+ const stsc = findBox(input, stbl.offset + 8, stbl.offset + stbl.size, 'stsc');
74
+ if (!stsz || !stco || !stsc)
75
+ continue;
76
+ // Parse stsz: [size(4), type(4), version(1), flags(3), sample_size(4), sample_count(4), entries...]
77
+ const stszOffset = stsz.offset;
78
+ const uniformSize = input.readUInt32BE(stszOffset + 12);
79
+ const sampleCount = input.readUInt32BE(stszOffset + 16);
80
+ const sampleSizes = [];
81
+ if (uniformSize > 0) {
82
+ for (let i = 0; i < sampleCount; i++)
83
+ sampleSizes.push(uniformSize);
84
+ }
85
+ else {
86
+ for (let i = 0; i < sampleCount; i++) {
87
+ sampleSizes.push(input.readUInt32BE(stszOffset + 20 + i * 4));
88
+ }
89
+ }
90
+ tracks.push({ trak, stbl, stsz, stco, stsc, sampleSizes, sampleCount });
91
+ }
92
+ if (tracks.length === 0)
93
+ return input;
94
+ // Check if already has proper chunks (stco entry count > 1)
95
+ const stco0 = tracks[0].stco;
96
+ const existingChunks = input.readUInt32BE(stco0.offset + 12);
97
+ if (existingChunks > 1)
98
+ return input; // Already fine
99
+ // Build interleaved chunk layout: alternate video/audio samples
100
+ // For simplicity, give each sample its own chunk offset
101
+ // We need to compute absolute offsets for each sample in mdat
102
+ // First, figure out sample order in mdat by parsing existing stco/stsc
103
+ // With single chunk, samples are sequential: all track0 samples then all track1 samples
104
+ // We need to build proper stco (one entry per sample) and stsc (one sample per chunk)
105
+ const newParts = [];
106
+ let currentOffset = 0;
107
+ // Copy everything before moov
108
+ const moovEnd = moovBox.offset + moovBox.size;
109
+ const beforeMoov = moovBox.offset < mdatBox.offset;
110
+ // Rebuild approach: reconstruct the entire file
111
+ // 1. Copy ftyp
112
+ const ftypBox = findBox(input, 0, input.length, 'ftyp');
113
+ if (!ftypBox)
114
+ return input;
115
+ newParts.push(input.subarray(ftypBox.offset, ftypBox.offset + ftypBox.size));
116
+ // 2. Keep mdat as-is, calculate sample offsets
117
+ // Figure out where each track's samples start in the original mdat
118
+ const trackOffsets = [];
119
+ let sampleDataOffset = mdatDataStart;
120
+ // In the original single-chunk layout, track0 samples come first, then track1
121
+ // (based on the stco having offset = mdatDataStart for both, stsc maps them)
122
+ // Actually with single stco entry, all samples of each track use the same base offset
123
+ // Let's read the original chunk offset for each track
124
+ for (const track of tracks) {
125
+ const origChunkOffset = input.readUInt32BE(track.stco.offset + 16); // first (only) entry
126
+ const offsets = [];
127
+ let pos = origChunkOffset;
128
+ for (const size of track.sampleSizes) {
129
+ offsets.push(pos);
130
+ pos += size;
131
+ }
132
+ trackOffsets.push(offsets);
133
+ }
134
+ // 3. Rebuild moov with proper stco and stsc for each track
135
+ // We'll rebuild the moov box by copying it and replacing stco/stsc in each trak
136
+ // Calculate new stco and stsc sizes for each track
137
+ const newStcoBuffers = [];
138
+ const newStscBuffers = [];
139
+ let moovSizeDelta = 0;
140
+ for (let t = 0; t < tracks.length; t++) {
141
+ const track = tracks[t];
142
+ const offsets = trackOffsets[t];
143
+ const n = track.sampleCount;
144
+ // New stco: header(12) + count(4) + n*4 bytes
145
+ const newStcoSize = 16 + n * 4;
146
+ const stcoBuf = Buffer.alloc(newStcoSize);
147
+ stcoBuf.writeUInt32BE(newStcoSize, 0); // box size
148
+ stcoBuf.write('stco', 4); // box type
149
+ stcoBuf.writeUInt32BE(0, 8); // version + flags
150
+ stcoBuf.writeUInt32BE(n, 12); // entry count
151
+ for (let i = 0; i < n; i++) {
152
+ stcoBuf.writeUInt32BE(offsets[i], 16 + i * 4);
153
+ }
154
+ newStcoBuffers.push(stcoBuf);
155
+ moovSizeDelta += newStcoSize - track.stco.size;
156
+ // New stsc: one sample per chunk → single entry (chunk=1, samples_per_chunk=1, desc=1)
157
+ const newStscSize = 28;
158
+ const stscBuf = Buffer.alloc(newStscSize);
159
+ stscBuf.writeUInt32BE(newStscSize, 0);
160
+ stscBuf.write('stsc', 4);
161
+ stscBuf.writeUInt32BE(0, 8); // version + flags
162
+ stscBuf.writeUInt32BE(1, 12); // entry count
163
+ stscBuf.writeUInt32BE(1, 16); // first chunk
164
+ stscBuf.writeUInt32BE(1, 20); // samples per chunk
165
+ stscBuf.writeUInt32BE(1, 24); // sample description index
166
+ newStscBuffers.push(stscBuf);
167
+ moovSizeDelta += newStscSize - track.stsc.size;
168
+ }
169
+ // Now rebuild the moov by copying pieces and replacing stco/stsc
170
+ // We need to update all parent box sizes too
171
+ // Simple approach: rebuild byte by byte
172
+ const moovData = input.subarray(moovBox.offset, moovBox.offset + moovBox.size);
173
+ const newMoovParts = [];
174
+ function rebuildBox(data, boxStart, boxEnd, parentData, trackIndex) {
175
+ const parts = [];
176
+ let pos = boxStart;
177
+ while (pos < boxEnd - 8) {
178
+ const size = parentData.readUInt32BE(pos);
179
+ const type = parentData.toString('ascii', pos + 4, pos + 8);
180
+ if (size === 0 || pos + size > boxEnd)
181
+ break;
182
+ if (type === 'stco') {
183
+ parts.push(newStcoBuffers[trackIndex.value]);
184
+ }
185
+ else if (type === 'stsc') {
186
+ parts.push(newStscBuffers[trackIndex.value]);
187
+ }
188
+ else if (['trak', 'mdia', 'minf', 'stbl'].includes(type)) {
189
+ if (type === 'trak')
190
+ trackIndex.value++;
191
+ // Rebuild container: header + rebuilt children
192
+ const childContent = rebuildBox(parentData, pos + 8, pos + size, parentData, trackIndex);
193
+ const header = Buffer.alloc(8);
194
+ header.writeUInt32BE(8 + childContent.length, 0);
195
+ header.write(type, 4);
196
+ parts.push(header);
197
+ parts.push(childContent);
198
+ }
199
+ else {
200
+ parts.push(parentData.subarray(pos, pos + size));
201
+ }
202
+ pos += size;
203
+ }
204
+ return Buffer.concat(parts);
205
+ }
206
+ const trackIdx = { value: -1 };
207
+ const moovContent = rebuildBox(input, moovBox.offset + 8, moovBox.offset + moovBox.size, input, trackIdx);
208
+ const moovHeader = Buffer.alloc(8);
209
+ moovHeader.writeUInt32BE(8 + moovContent.length, 0);
210
+ moovHeader.write('moov', 4);
211
+ // Now rebuild the file: ftyp + moov + mdat (same order as original)
212
+ const result = [];
213
+ // Walk original top-level boxes and replace moov
214
+ const topBoxes = findBoxes(input, 0, input.length);
215
+ // But we need to update stco offsets if moov size changed
216
+ // because mdat position shifts
217
+ const newMoovSize = 8 + moovContent.length;
218
+ const moovDiff = newMoovSize - moovBox.size;
219
+ // If moov is before mdat, mdat shifts by moovDiff
220
+ // We need to adjust all stco entries
221
+ let mdatShift = 0;
222
+ if (moovBox.offset < mdatBox.offset) {
223
+ mdatShift = moovDiff;
224
+ }
225
+ // Rebuild moov content with adjusted offsets
226
+ if (mdatShift !== 0) {
227
+ // Re-create stco buffers with adjusted offsets
228
+ for (let t = 0; t < tracks.length; t++) {
229
+ const offsets = trackOffsets[t];
230
+ const n = tracks[t].sampleCount;
231
+ const stcoBuf = newStcoBuffers[t];
232
+ for (let i = 0; i < n; i++) {
233
+ stcoBuf.writeUInt32BE(offsets[i] + mdatShift, 16 + i * 4);
234
+ }
235
+ }
236
+ // Rebuild moov again with adjusted stco
237
+ const trackIdx2 = { value: -1 };
238
+ const moovContent2 = rebuildBox(input, moovBox.offset + 8, moovBox.offset + moovBox.size, input, trackIdx2);
239
+ moovHeader.writeUInt32BE(8 + moovContent2.length, 0);
240
+ for (const box of topBoxes) {
241
+ if (box.type === 'moov') {
242
+ result.push(moovHeader);
243
+ result.push(moovContent2);
244
+ }
245
+ else {
246
+ result.push(input.subarray(box.offset, box.offset + box.size));
247
+ }
248
+ }
249
+ }
250
+ else {
251
+ for (const box of topBoxes) {
252
+ if (box.type === 'moov') {
253
+ result.push(moovHeader);
254
+ result.push(moovContent);
255
+ }
256
+ else {
257
+ result.push(input.subarray(box.offset, box.offset + box.size));
258
+ }
259
+ }
260
+ }
261
+ return Buffer.concat(result);
262
+ }
263
+ //# sourceMappingURL=mp4fix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mp4fix.js","sourceRoot":"","sources":["../../src/downloader/mp4fix.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ytgrab",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "A Node.js YouTube video downloader ported from yt-dlp",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -35,10 +35,10 @@
35
35
  "node": ">=18.0.0"
36
36
  },
37
37
  "dependencies": {
38
+ "@invintusmedia/tomp4": "^1.7.0",
38
39
  "astring": "^1.9.0",
39
40
  "got-scraping": "^4.2.1",
40
- "meriyah": "^6.1.4",
41
- "mux.js": "^6.3.0"
41
+ "meriyah": "^6.1.4"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/node": "^20.0.0",