diff options
Diffstat (limited to 'server/helpers/ffmpeg-utils.ts')
-rw-r--r-- | server/helpers/ffmpeg-utils.ts | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/server/helpers/ffmpeg-utils.ts b/server/helpers/ffmpeg-utils.ts index ec24f357b..cc79828f6 100644 --- a/server/helpers/ffmpeg-utils.ts +++ b/server/helpers/ffmpeg-utils.ts | |||
@@ -16,7 +16,9 @@ import { CONFIG } from '../initializers/config' | |||
16 | import { execPromise, promisify0 } from './core-utils' | 16 | import { execPromise, promisify0 } from './core-utils' |
17 | import { computeFPS, ffprobePromise, getAudioStream, getVideoFileBitrate, getVideoFileFPS, getVideoFileResolution } from './ffprobe-utils' | 17 | import { computeFPS, ffprobePromise, getAudioStream, getVideoFileBitrate, getVideoFileFPS, getVideoFileResolution } from './ffprobe-utils' |
18 | import { processImage } from './image-utils' | 18 | import { processImage } from './image-utils' |
19 | import { logger } from './logger' | 19 | import { logger, loggerTagsFactory } from './logger' |
20 | |||
21 | const lTags = loggerTagsFactory('ffmpeg') | ||
20 | 22 | ||
21 | /** | 23 | /** |
22 | * | 24 | * |
@@ -60,7 +62,7 @@ async function checkFFmpegEncoders (peertubeAvailableEncoders: AvailableEncoders | |||
60 | supportedEncoders.set(searchEncoder, availableFFmpegEncoders[searchEncoder] !== undefined) | 62 | supportedEncoders.set(searchEncoder, availableFFmpegEncoders[searchEncoder] !== undefined) |
61 | } | 63 | } |
62 | 64 | ||
63 | logger.info('Built supported ffmpeg encoders.', { supportedEncoders, searchEncoders }) | 65 | logger.info('Built supported ffmpeg encoders.', { supportedEncoders, searchEncoders, ...lTags() }) |
64 | 66 | ||
65 | return supportedEncoders | 67 | return supportedEncoders |
66 | } | 68 | } |
@@ -115,12 +117,12 @@ async function generateImageFromVideoFile (fromPath: string, folder: string, ima | |||
115 | const destination = join(folder, imageName) | 117 | const destination = join(folder, imageName) |
116 | await processImage(pendingImagePath, destination, size) | 118 | await processImage(pendingImagePath, destination, size) |
117 | } catch (err) { | 119 | } catch (err) { |
118 | logger.error('Cannot generate image from video %s.', fromPath, { err }) | 120 | logger.error('Cannot generate image from video %s.', fromPath, { err, ...lTags() }) |
119 | 121 | ||
120 | try { | 122 | try { |
121 | await remove(pendingImagePath) | 123 | await remove(pendingImagePath) |
122 | } catch (err) { | 124 | } catch (err) { |
123 | logger.debug('Cannot remove pending image path after generation error.', { err }) | 125 | logger.debug('Cannot remove pending image path after generation error.', { err, ...lTags() }) |
124 | } | 126 | } |
125 | } | 127 | } |
126 | } | 128 | } |
@@ -202,7 +204,7 @@ const builders: { | |||
202 | } | 204 | } |
203 | 205 | ||
204 | async function transcode (options: TranscodeOptions) { | 206 | async function transcode (options: TranscodeOptions) { |
205 | logger.debug('Will run transcode.', { options }) | 207 | logger.debug('Will run transcode.', { options, ...lTags() }) |
206 | 208 | ||
207 | let command = getFFmpeg(options.inputPath, 'vod') | 209 | let command = getFFmpeg(options.inputPath, 'vod') |
208 | .output(options.outputPath) | 210 | .output(options.outputPath) |
@@ -284,7 +286,7 @@ async function getLiveTranscodingCommand (options: { | |||
284 | 286 | ||
285 | addDefaultEncoderParams({ command, encoder: builderResult.encoder, fps: resolutionFPS, streamNum: i }) | 287 | addDefaultEncoderParams({ command, encoder: builderResult.encoder, fps: resolutionFPS, streamNum: i }) |
286 | 288 | ||
287 | logger.debug('Apply ffmpeg live video params from %s using %s profile.', builderResult.encoder, profile, builderResult) | 289 | logger.debug('Apply ffmpeg live video params from %s using %s profile.', builderResult.encoder, profile, builderResult, lTags()) |
288 | 290 | ||
289 | command.outputOption(`${buildStreamSuffix('-c:v', i)} ${builderResult.encoder}`) | 291 | command.outputOption(`${buildStreamSuffix('-c:v', i)} ${builderResult.encoder}`) |
290 | applyEncoderOptions(command, builderResult.result) | 292 | applyEncoderOptions(command, builderResult.result) |
@@ -308,7 +310,7 @@ async function getLiveTranscodingCommand (options: { | |||
308 | 310 | ||
309 | addDefaultEncoderParams({ command, encoder: builderResult.encoder, fps: resolutionFPS, streamNum: i }) | 311 | addDefaultEncoderParams({ command, encoder: builderResult.encoder, fps: resolutionFPS, streamNum: i }) |
310 | 312 | ||
311 | logger.debug('Apply ffmpeg live audio params from %s using %s profile.', builderResult.encoder, profile, builderResult) | 313 | logger.debug('Apply ffmpeg live audio params from %s using %s profile.', builderResult.encoder, profile, builderResult, lTags()) |
312 | 314 | ||
313 | command.outputOption(`${buildStreamSuffix('-c:a', i)} ${builderResult.encoder}`) | 315 | command.outputOption(`${buildStreamSuffix('-c:a', i)} ${builderResult.encoder}`) |
314 | applyEncoderOptions(command, builderResult.result) | 316 | applyEncoderOptions(command, builderResult.result) |
@@ -531,12 +533,12 @@ async function getEncoderBuilderResult (options: EncoderOptionsBuilderParams & { | |||
531 | 533 | ||
532 | for (const encoder of encodersToTry) { | 534 | for (const encoder of encodersToTry) { |
533 | if (!(await checkFFmpegEncoders(availableEncoders)).get(encoder)) { | 535 | if (!(await checkFFmpegEncoders(availableEncoders)).get(encoder)) { |
534 | logger.debug('Encoder %s not available in ffmpeg, skipping.', encoder) | 536 | logger.debug('Encoder %s not available in ffmpeg, skipping.', encoder, lTags()) |
535 | continue | 537 | continue |
536 | } | 538 | } |
537 | 539 | ||
538 | if (!encoders[encoder]) { | 540 | if (!encoders[encoder]) { |
539 | logger.debug('Encoder %s not available in peertube encoders, skipping.', encoder) | 541 | logger.debug('Encoder %s not available in peertube encoders, skipping.', encoder, lTags()) |
540 | continue | 542 | continue |
541 | } | 543 | } |
542 | 544 | ||
@@ -545,11 +547,11 @@ async function getEncoderBuilderResult (options: EncoderOptionsBuilderParams & { | |||
545 | let builder = builderProfiles[profile] | 547 | let builder = builderProfiles[profile] |
546 | 548 | ||
547 | if (!builder) { | 549 | if (!builder) { |
548 | logger.debug('Profile %s for encoder %s not available. Fallback to default.', profile, encoder) | 550 | logger.debug('Profile %s for encoder %s not available. Fallback to default.', profile, encoder, lTags()) |
549 | builder = builderProfiles.default | 551 | builder = builderProfiles.default |
550 | 552 | ||
551 | if (!builder) { | 553 | if (!builder) { |
552 | logger.debug('Default profile for encoder %s not available. Try next available encoder.', encoder) | 554 | logger.debug('Default profile for encoder %s not available. Try next available encoder.', encoder, lTags()) |
553 | continue | 555 | continue |
554 | } | 556 | } |
555 | } | 557 | } |
@@ -619,7 +621,8 @@ async function presetVideo (options: { | |||
619 | 621 | ||
620 | logger.debug( | 622 | logger.debug( |
621 | 'Apply ffmpeg params from %s for %s stream of input %s using %s profile.', | 623 | 'Apply ffmpeg params from %s for %s stream of input %s using %s profile.', |
622 | builderResult.encoder, streamType, input, profile, builderResult | 624 | builderResult.encoder, streamType, input, profile, builderResult, |
625 | lTags() | ||
623 | ) | 626 | ) |
624 | 627 | ||
625 | if (streamType === 'video') { | 628 | if (streamType === 'video') { |
@@ -725,13 +728,13 @@ async function runCommand (options: { | |||
725 | command.on('start', cmdline => { shellCommand = cmdline }) | 728 | command.on('start', cmdline => { shellCommand = cmdline }) |
726 | 729 | ||
727 | command.on('error', (err, stdout, stderr) => { | 730 | command.on('error', (err, stdout, stderr) => { |
728 | if (silent !== true) logger.error('Error in ffmpeg.', { stdout, stderr }) | 731 | if (silent !== true) logger.error('Error in ffmpeg.', { stdout, stderr, ...lTags() }) |
729 | 732 | ||
730 | rej(err) | 733 | rej(err) |
731 | }) | 734 | }) |
732 | 735 | ||
733 | command.on('end', (stdout, stderr) => { | 736 | command.on('end', (stdout, stderr) => { |
734 | logger.debug('FFmpeg command ended.', { stdout, stderr, shellCommand }) | 737 | logger.debug('FFmpeg command ended.', { stdout, stderr, shellCommand, ...lTags() }) |
735 | 738 | ||
736 | res() | 739 | res() |
737 | }) | 740 | }) |
@@ -741,7 +744,7 @@ async function runCommand (options: { | |||
741 | if (!progress.percent) return | 744 | if (!progress.percent) return |
742 | 745 | ||
743 | job.progress(Math.round(progress.percent)) | 746 | job.progress(Math.round(progress.percent)) |
744 | .catch(err => logger.warn('Cannot set ffmpeg job progress.', { err })) | 747 | .catch(err => logger.warn('Cannot set ffmpeg job progress.', { err, ...lTags() })) |
745 | }) | 748 | }) |
746 | } | 749 | } |
747 | 750 | ||