Merge remote-tracking branch 'origin/pr/1785' into develop
authorChocobozzz <me@florianbigard.com>
Thu, 16 May 2019 06:58:39 +0000 (08:58 +0200)
committerChocobozzz <me@florianbigard.com>
Thu, 16 May 2019 06:58:39 +0000 (08:58 +0200)
1  2 
server/helpers/ffmpeg-utils.ts
server/tests/api/videos/video-transcoder.ts

index 76b744de8543c7bd6e35a0d0a941e933143dea3d,af92d1ba9337c67b8da57b86476e68e94842fa1c..2fdf34cb7d6918245a95dc9752dea4c5244ce3a8
@@@ -134,7 -135,17 +135,18 @@@ function transcode (options: TranscodeO
        let command = ffmpeg(options.inputPath, { niceness: FFMPEG_NICE.TRANSCODING })
          .output(options.outputPath)
  
-       if (options.hlsPlaylist) {
+       if (options.doQuickTranscode) {
+         if (options.hlsPlaylist) {
+           throw(Error("Quick transcode and HLS can't be used at the same time"))
+         }
++
+         command
+           .format('mp4')
+           .addOption('-c:v copy')
+           .addOption('-c:a copy')
+           .outputOption('-map_metadata -1') // strip all metadata
+           .outputOption('-movflags faststart')
+       } else if (options.hlsPlaylist) {
          command = await buildHLSCommand(command, options)
        } else {
          command = await buildx264Command(command, options)
    })
  }
  
 -  if (videoStream[ 'codec_name' ] !== 'h264') {
 -    return false
 -  }
 -  if (fps < VIDEO_TRANSCODING_FPS.MIN || fps > VIDEO_TRANSCODING_FPS.MAX) {
 -    return false
 -  }
 -  if (bitRate > getMaxBitrate(resolution.videoFileResolution, fps, VIDEO_TRANSCODING_FPS)) {
 -    return false
 -  }
+ async function canDoQuickTranscode (path: string): Promise<boolean> {
+   // NOTE: This could be optimized by running ffprobe only once (but it runs fast anyway)
+   const videoStream = await getVideoStreamFromFile(path)
+   const parsedAudio = await audio.get(path)
+   const fps = await getVideoFileFPS(path)
+   const bitRate = await getVideoFileBitrate(path)
+   const resolution = await getVideoFileResolution(path)
+   // check video params
 -    if (parsedAudio.audioStream[ 'codec_name' ] !== 'aac') {
 -      return false
 -    }
++  if (videoStream[ 'codec_name' ] !== 'h264') return false
++  if (fps < VIDEO_TRANSCODING_FPS.MIN || fps > VIDEO_TRANSCODING_FPS.MAX) return false
++  if (bitRate > getMaxBitrate(resolution.videoFileResolution, fps, VIDEO_TRANSCODING_FPS)) return false
+     // check audio params (if audio stream exists)
+   if (parsedAudio.audioStream) {
 -    if (maxAudioBitrate !== -1 && parsedAudio.audioStream[ 'bit_rate' ] > maxAudioBitrate) {
 -      return false
 -    }
++    if (parsedAudio.audioStream[ 'codec_name' ] !== 'aac') return false
++
+     const maxAudioBitrate = audio.bitrate[ 'aac' ](parsedAudio.audioStream[ 'bit_rate' ])
++    if (maxAudioBitrate !== -1 && parsedAudio.audioStream[ 'bit_rate' ] > maxAudioBitrate) return false
+   }
+   return true
+ }
  // ---------------------------------------------------------------------------
  
  export {
index 45a8c09f0d4148794f8cf248fc164de6df867525,4923759da704f8d3b1d32c52a2e893f3c9c8993a..cfd0c8430abd55c63375e26c10243c5b515dedee
@@@ -4,10 -4,9 +4,10 @@@ import * as chai from 'chai
  import 'mocha'
  import { omit } from 'lodash'
  import { getMaxBitrate, VideoDetails, VideoResolution, VideoState } from '../../../../shared/models/videos'
- import { audio, getVideoFileBitrate, getVideoFileFPS, getVideoFileResolution } from '../../../helpers/ffmpeg-utils'
 -import { audio, getVideoFileBitrate, getVideoFileFPS, getVideoFileResolution, canDoQuickTranscode } from '../../../helpers/ffmpeg-utils'
++import { audio, canDoQuickTranscode, getVideoFileBitrate, getVideoFileFPS, getVideoFileResolution } from '../../../helpers/ffmpeg-utils'
  import {
 -  buildAbsoluteFixturePath, cleanupTests,
 +  buildAbsoluteFixturePath,
 +  cleanupTests,
    doubleFollow,
    flushAndRunMultipleServers,
    generateHighBitrateVideo,
@@@ -18,6 -18,6 +18,7 @@@
    ServerInfo,
    setAccessTokensToServers,
    uploadVideo,
++  waitJobs,
    webtorrentAdd
  } from '../../../../shared/extra-utils'
  import { join } from 'path'