添加VAAPI的支持
This commit is contained in:
17
server.js
17
server.js
@@ -73,6 +73,8 @@ const createFfmpegOptions = (encoderName) => {
|
||||
options.push('-rc:v', 'vbr_hq', '-cq', '19');
|
||||
} else if (/_qsv$/.test(encoderName)) {
|
||||
options.push('-global_quality', '23');
|
||||
} else if (/_vaapi$/.test(encoderName)) {
|
||||
options.push('-qp', '23');
|
||||
}
|
||||
return options;
|
||||
};
|
||||
@@ -161,11 +163,12 @@ app.post('/api/transcode', async (req, res) => {
|
||||
}
|
||||
|
||||
const safeCodec = codec === 'h265' ? 'h265' : 'h264';
|
||||
const safeEncoder = ['nvidia', 'intel'].includes(encoder) ? encoder : 'software';
|
||||
const safeEncoder = ['nvidia', 'intel', 'vaapi'].includes(encoder) ? encoder : 'software';
|
||||
const codecMap = {
|
||||
software: { h264: 'libx264', h265: 'libx265' },
|
||||
nvidia: { h264: 'h264_nvenc', h265: 'hevc_nvenc' },
|
||||
intel: { h264: 'h264_qsv', h265: 'hevc_qsv' }
|
||||
intel: { h264: 'h264_qsv', h265: 'hevc_qsv' },
|
||||
vaapi: { h264: 'h264_vaapi', h265: 'hevc_vaapi' }
|
||||
};
|
||||
const videoCodec = codecMap[safeEncoder][safeCodec];
|
||||
|
||||
@@ -247,10 +250,16 @@ app.post('/api/transcode', async (req, res) => {
|
||||
let attemptedSoftwareFallback = false;
|
||||
const startFfmpeg = (encoderName) => {
|
||||
console.log(`Starting ffmpeg with encoder ${encoderName} for ${key}`);
|
||||
ffmpeg(tmpInputPath)
|
||||
const command = ffmpeg(tmpInputPath)
|
||||
.videoCodec(encoderName)
|
||||
.audioCodec('aac')
|
||||
.outputOptions(createFfmpegOptions(encoderName))
|
||||
.outputOptions(createFfmpegOptions(encoderName));
|
||||
if (/_vaapi$/.test(encoderName)) {
|
||||
command
|
||||
.inputOptions(['-vaapi_device', '/dev/dri/renderD128'])
|
||||
.videoFilters('format=nv12,hwupload');
|
||||
}
|
||||
command
|
||||
.format('mp4')
|
||||
.output(mp4Path)
|
||||
.on('progress', (progress) => {
|
||||
|
||||
Reference in New Issue
Block a user