From: Chocobozzz Date: Thu, 16 May 2019 06:58:39 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/pr/1785' into develop X-Git-Tag: v1.4.0-rc.1~239 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=1600235a2f4e30c5d4e7d4342d1c299845decc60;p=oweals%2Fpeertube.git Merge remote-tracking branch 'origin/pr/1785' into develop --- 1600235a2f4e30c5d4e7d4342d1c299845decc60 diff --cc server/helpers/ffmpeg-utils.ts index 76b744de8,af92d1ba9..2fdf34cb7 --- a/server/helpers/ffmpeg-utils.ts +++ b/server/helpers/ffmpeg-utils.ts @@@ -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) @@@ -162,6 -173,39 +174,30 @@@ }) } + async function canDoQuickTranscode (path: string): Promise { + // 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 (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 - } ++ 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 (parsedAudio.audioStream[ 'codec_name' ] !== 'aac') { - 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 - } ++ if (maxAudioBitrate !== -1 && parsedAudio.audioStream[ 'bit_rate' ] > maxAudioBitrate) return false + } + + return true + } + // --------------------------------------------------------------------------- export { diff --cc server/tests/api/videos/video-transcoder.ts index 45a8c09f0,4923759da..cfd0c8430 --- a/server/tests/api/videos/video-transcoder.ts +++ b/server/tests/api/videos/video-transcoder.ts @@@ -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'