Browse Source

fix(server): enable transcoding of audioless videos (#3147)

* Fix: enable transcoding of audioless videos

* Fix: enable transcoding of audioless videos & typing

* Fix: enable transcoding of audioless videos & formatting

* fix: do not always transcode if there is no audio stream
kasgel 2 years ago
parent
commit
50f26374e3
1 changed files with 13 additions and 7 deletions
  1. 13 7
      server/src/domain/media/media.service.ts

+ 13 - 7
server/src/domain/media/media.service.ts

@@ -142,7 +142,7 @@ export class MediaService {
     const mainVideoStream = this.getMainVideoStream(videoStreams);
     const mainAudioStream = this.getMainAudioStream(audioStreams);
     const containerExtension = format.formatName;
-    if (!mainVideoStream || !mainAudioStream || !containerExtension) {
+    if (!mainVideoStream || !containerExtension) {
       return false;
     }
 
@@ -182,7 +182,7 @@ export class MediaService {
   private isTranscodeRequired(
     asset: AssetEntity,
     videoStream: VideoStreamInfo,
-    audioStream: AudioStreamInfo,
+    audioStream: AudioStreamInfo | null,
     containerExtension: string,
     ffmpegConfig: SystemConfigFFmpegDto,
   ): boolean {
@@ -192,12 +192,18 @@ export class MediaService {
     }
 
     const isTargetVideoCodec = videoStream.codecName === ffmpegConfig.targetVideoCodec;
-    const isTargetAudioCodec = audioStream.codecName === ffmpegConfig.targetAudioCodec;
     const isTargetContainer = ['mov,mp4,m4a,3gp,3g2,mj2', 'mp4', 'mov'].includes(containerExtension);
-
-    this.logger.verbose(
-      `${asset.id}: AudioCodecName ${audioStream.codecName}, AudioStreamCodecType ${audioStream.codecType}, containerExtension ${containerExtension}`,
-    );
+    const isTargetAudioCodec = audioStream == null || audioStream.codecName === ffmpegConfig.targetAudioCodec;
+
+    if (audioStream != null) {
+      this.logger.verbose(
+        `${asset.id}: AudioCodecName ${audioStream.codecName}, AudioStreamCodecType ${audioStream.codecType}, containerExtension ${containerExtension}`,
+      );
+    } else {
+      this.logger.verbose(
+        `${asset.id}: AudioCodecName None, AudioStreamCodecType None, containerExtension ${containerExtension}`,
+      );
+    }
 
     const allTargetsMatching = isTargetVideoCodec && isTargetAudioCodec && isTargetContainer;
     const scalingEnabled = ffmpegConfig.targetResolution !== 'original';