mb-rrvideo-server 1.0.11 → 1.0.14
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.
- package/docker-compose.yml +1 -1
- package/package.json +1 -1
- package/src/routes/convert.js +30 -4
- package/src/routes/merge.js +11 -2
package/docker-compose.yml
CHANGED
package/package.json
CHANGED
package/src/routes/convert.js
CHANGED
|
@@ -186,6 +186,7 @@ async function handleConvertV1(inputData, res, logFileName) {
|
|
|
186
186
|
const pullData = await pullTaskData(pullDataUrl, recordId, logFileName);
|
|
187
187
|
|
|
188
188
|
if (!pullData.data || !pullData.data.events_data) {
|
|
189
|
+
logger.error(`[${actionName}] 拉取数据格式错误,完整数据: ${JSON.stringify(pullData)}`, logFileName, 'convert');
|
|
189
190
|
throw new Error('拉取的数据格式不正确');
|
|
190
191
|
}
|
|
191
192
|
|
|
@@ -289,11 +290,23 @@ async function handleConvertV1(inputData, res, logFileName) {
|
|
|
289
290
|
if (type === 'stdout') {
|
|
290
291
|
recentStdout.push(text);
|
|
291
292
|
if (recentStdout.length > MAX_BUFFER_LINES) recentStdout.shift();
|
|
292
|
-
|
|
293
|
+
|
|
294
|
+
// 关键过程信息保留为 INFO,进度条等其他信息为 DEBUG
|
|
295
|
+
if (text.includes('Progress:')) {
|
|
296
|
+
// 进度条忽略
|
|
297
|
+
} else {
|
|
298
|
+
logger.info(`[rrvideos-stdout] ${text}`, logFileName, 'convert');
|
|
299
|
+
}
|
|
293
300
|
} else if (type === 'stderr') {
|
|
294
301
|
recentStderr.push(text);
|
|
295
302
|
if (recentStderr.length > MAX_BUFFER_LINES) recentStderr.shift();
|
|
296
|
-
|
|
303
|
+
|
|
304
|
+
// stderr 通常包含重要错误信息或ffmpeg日志,提升为 INFO
|
|
305
|
+
if (text.includes('frame=') && text.includes('fps=')) {
|
|
306
|
+
// ffmpeg 进度条忽略
|
|
307
|
+
} else {
|
|
308
|
+
logger.info(`[rrvideos-stderr] ${text}`, logFileName, 'convert');
|
|
309
|
+
}
|
|
297
310
|
}
|
|
298
311
|
}, childEnv);
|
|
299
312
|
|
|
@@ -484,6 +497,7 @@ async function handleConvertV2(inputData, res, logFileName) {
|
|
|
484
497
|
})));
|
|
485
498
|
|
|
486
499
|
if (!pullData.data || !pullData.data.tasks) {
|
|
500
|
+
logger.error(`[${actionName}] 拉取数据格式错误,完整数据: ${JSON.stringify(pullData)}`, logFileName, 'convert');
|
|
487
501
|
throw new Error('拉取的数据格式不正确');
|
|
488
502
|
}
|
|
489
503
|
|
|
@@ -643,11 +657,23 @@ async function handleConvertV2(inputData, res, logFileName) {
|
|
|
643
657
|
if (type === 'stdout') {
|
|
644
658
|
recentStdout.push(text);
|
|
645
659
|
if (recentStdout.length > MAX_BUFFER_LINES) recentStdout.shift();
|
|
646
|
-
|
|
660
|
+
|
|
661
|
+
// 关键过程信息保留为 INFO,进度条等其他信息为 DEBUG
|
|
662
|
+
if (text.includes('Progress:')) {
|
|
663
|
+
// 进度条忽略
|
|
664
|
+
} else {
|
|
665
|
+
logger.info(`[rrvideos-stdout] ${text}`, logFileName, 'convert');
|
|
666
|
+
}
|
|
647
667
|
} else if (type === 'stderr') {
|
|
648
668
|
recentStderr.push(text);
|
|
649
669
|
if (recentStderr.length > MAX_BUFFER_LINES) recentStderr.shift();
|
|
650
|
-
|
|
670
|
+
|
|
671
|
+
// stderr 通常包含重要错误信息或ffmpeg日志,提升为 INFO
|
|
672
|
+
if (text.includes('frame=') && text.includes('fps=')) {
|
|
673
|
+
// ffmpeg 进度条忽略
|
|
674
|
+
} else {
|
|
675
|
+
logger.info(`[rrvideos-stderr] ${text}`, logFileName, 'convert');
|
|
676
|
+
}
|
|
651
677
|
}
|
|
652
678
|
}, childEnv);
|
|
653
679
|
|
package/src/routes/merge.js
CHANGED
|
@@ -43,9 +43,18 @@ async function handleMerge(inputData, res, logFileName) {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
const taskId = mergeId;
|
|
46
|
-
const videos = Array.isArray(inputData.videos) ? inputData.videos : []
|
|
46
|
+
const videos = (Array.isArray(inputData.videos) ? inputData.videos : [])
|
|
47
|
+
.filter(v => v && typeof v === 'string' && v.trim())
|
|
48
|
+
.map(v => v.trim());
|
|
47
49
|
// 兼容 output 和 output_name 两种参数名
|
|
48
|
-
|
|
50
|
+
let output = (inputData.output || inputData.output_name || '').trim();
|
|
51
|
+
|
|
52
|
+
// 如果 output 只是文件名(不是绝对路径),则拼接到配置的视频目录
|
|
53
|
+
if (output && !path.isAbsolute(output)) {
|
|
54
|
+
const videoDir = config.get('storage.local.video_dir') || path.join(__dirname, '../../Video');
|
|
55
|
+
output = path.join(videoDir, output);
|
|
56
|
+
}
|
|
57
|
+
|
|
49
58
|
const format = inputData.format || 'mp4';
|
|
50
59
|
const method = inputData.method || 'concat';
|
|
51
60
|
const autoMode = inputData.auto_mode || 'smart';
|