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 {
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,
ServerInfo,
setAccessTokensToServers,
uploadVideo,
++ waitJobs,
webtorrentAdd
} from '../../../../shared/extra-utils'
import { join } from 'path'