def testRewrapRawVideoStream(): """ Rewrap one raw video stream (no format). """ # get src file of wrap inputFileName = os.environ['AVTRANSCODER_TEST_VIDEO_RAW_FILE'] src_inputFile = av.InputFile(inputFileName) src_inputFile.analyse(av.NoDisplayProgress(), av.eAnalyseLevelFirstGop) src_properties = src_inputFile.getProperties() src_videoStream = src_properties.getVideoProperties()[0] formatList = src_properties.getFormatName().split(",") outputFileName = "testRewrapRawVideoStream." + formatList[0] ouputFile = av.OutputFile(outputFileName) transcoder = av.Transcoder(ouputFile) transcoder.addStream( av.InputStreamDesc(inputFileName) ) processStat = transcoder.process() # check process stat returned checkVideoStat(src_videoStream, processStat.getVideoStat(0)) # get dst file of wrap dst_inputFile = av.InputFile(outputFileName) dst_inputFile.analyse(av.NoDisplayProgress(), av.eAnalyseLevelFirstGop) dst_properties = dst_inputFile.getProperties() dst_videoStream = dst_properties.getVideoProperties()[0] # check format checkFormat(src_properties, dst_properties) # check video properties checkStream(src_videoStream, dst_videoStream)
def testAddImpossibleMetadata(): """ Can't add an impossible metadata to the outputFile. """ inputFileName = os.environ['AVTRANSCODER_TEST_AUDIO_WAVE_FILE'] outputFileName = "testAddMetadataPlop.wav" ouputFile = av.OutputFile(outputFileName) transcoder = av.Transcoder(ouputFile) # rewrap a stream transcoder.addStream(av.InputStreamDesc(inputFileName)) # add one metadata metadata_to_check = ("undefinedMetadataKey", "undefinedMetadataValue") ouputFile.addMetadata(metadata_to_check[0], metadata_to_check[1]) progress = av.NoDisplayProgress() transcoder.process(progress) inputFile = av.InputFile(outputFileName) inputFile.analyse(progress, av.eAnalyseLevelHeader) properties = inputFile.getProperties() assert_not_in(metadata_to_check, properties.getMetadatas())
def testRewrapAVIVideoStream(): """ Rewrap one video stream from avi. """ # get src file of wrap inputFileName = os.environ['AVTRANSCODER_TEST_VIDEO_AVI_FILE'] src_inputFile = av.InputFile( inputFileName ) src_properties = src_inputFile.getProperties() src_videoStream = src_properties.getVideoProperties()[0] formatList = src_properties.getFormatName().split(",") outputFileName = "testRewrapAVIVideoStream." + formatList[0] ouputFile = av.OutputFile( outputFileName ) transcoder = av.Transcoder( ouputFile ) transcoder.add( inputFileName, 0 ) progress = av.NoDisplayProgress() processStat = transcoder.process( progress ) # check process stat returned checkVideoStat(src_videoStream, processStat.getVideoStat(0)) # get dst file of wrap dst_inputFile = av.InputFile( outputFileName ) dst_properties = dst_inputFile.getProperties() dst_videoStream = dst_properties.getVideoProperties()[0] # check format checkFormat(src_properties, dst_properties) # check video properties checkStream(src_videoStream, dst_videoStream)
def testRewrapAudioStream(): """ Rewrap one audio stream. """ # get src file of wrap inputFileName = os.environ['AVTRANSCODER_TEST_AUDIO_WAVE_FILE'] src_inputFile = av.InputFile( inputFileName ) src_properties = src_inputFile.getProperties() src_audioStream = src_properties.getAudioProperties()[0] formatList = src_properties.getFormatName().split(",") outputFileName = "testRewrapAudioStream." + formatList[0] ouputFile = av.OutputFile( outputFileName ) transcoder = av.Transcoder( ouputFile ) transcoder.add( inputFileName, 0 ) progress = av.NoDisplayProgress() processStat = transcoder.process( progress ) # check process stat returned audioStat = processStat.getAudioStat(0) assert_equals(src_audioStream.getDuration(), audioStat.getDuration()) # get dst file of wrap dst_inputFile = av.InputFile( outputFileName ) dst_properties = dst_inputFile.getProperties() dst_audioStream = dst_properties.getAudioProperties()[0] # check format checkFormat(src_properties, dst_properties) # check audio properties checkStream(src_audioStream, dst_audioStream)
def testCheckRawVideoProperties(): """ Check properties of a raw video stream. A raw stream does not contain header (so the duration, number of frames... needs to be computed). """ inputFileName = os.environ['AVTRANSCODER_TEST_VIDEO_RAW_FILE'] inputFile = av.InputFile(inputFileName) properties = inputFile.getProperties() # Check format assert_true(properties.isRawFormat()) assert_equals(properties.getNbStreams(), 1) assert_equals(properties.getNbVideoStreams(), 1) assert_equals(properties.getDuration(), 0) # file duration is unknown assert_equals(properties.getBitRate(), 0) # file bitrate is unknown assert_equals(properties.getFileSize(), 256293L) # Check video stream when analyse the header videoStream = properties.getVideoProperties()[0] assert_equals(videoStream.getFps(), 25) assert_equals(videoStream.getNbFrames(), 0) # stream nbFrames is unknown assert_equals(videoStream.getDuration(), 0) # stream duration is unknown assert_equals(videoStream.getBitRate(), 0) # stream bitrate is unknown # Check video stream when analyse the first GOP inputFile.analyse(av.NoDisplayProgress(), av.eAnalyseLevelFirstGop) videoStream = properties.getVideoProperties()[0] assert_equals(videoStream.getNbFrames(), 200) assert_equals(videoStream.getDuration(), 8) assert_equals(videoStream.getBitRate(), 177200L)
def testAddPossibleMetadata(): """ Add metadata 'date' to the outputFile. """ inputFileName = os.environ['AVTRANSCODER_TEST_AUDIO_WAVE_FILE'] outputFileName = "testAddMetadataDate.wav" ouputFile = av.OutputFile(outputFileName) transcoder = av.Transcoder(ouputFile) # rewrap a stream transcoder.addStream(av.InputStreamDesc(inputFileName)) # add a set of metadata metadata_to_check = av.PropertyVector() metadata_to_check.append(("date", "value")) ouputFile.addMetadata(metadata_to_check) progress = av.NoDisplayProgress() transcoder.process(progress) inputFile = av.InputFile(outputFileName) inputFile.analyse(progress, av.eAnalyseLevelHeader) properties = inputFile.getProperties() for metadata in metadata_to_check: assert_in(metadata, properties.getMetadatas())
def testSetVideoFrame(): """ Generate a video stream, and set its frame during process. """ # create output outputFileName = "testSetVideoFrame.mov" ouputFile = av.OutputFile(outputFileName) # create custom profile encodingProfile = av.ProfileMap() encodingProfile[av.avProfileIdentificator] = "encodingProfile" encodingProfile[av.avProfileIdentificatorHuman] = "custom profile" encodingProfile[av.avProfileType] = av.avProfileTypeVideo encodingProfile[av.avProfileCodec] = "mpeg2video" encodingProfile[av.avProfilePixelFormat] = "yuv422p" encodingProfile[av.avProfileWidth] = "1920" encodingProfile[av.avProfileHeight] = "1080" # create transcoder and add a video stream transcoder = av.Transcoder(ouputFile) transcoder.addGenerateStream(encodingProfile) videoDecoder = transcoder.getStreamTranscoder(0).getCurrentDecoder() # start process ouputFile.beginWrap() transcoder.preProcessCodecLatency() p = av.ConsoleProgress() # process 51 frames nbFrames = 255 for i in range(0, nbFrames, 5): transcoder.processFrame() p.progress(i, nbFrames) # set video frame frame = av.VideoFrame(av.VideoFrameDesc(1920, 1080, "rgb24")) frame.assignValue(i) videoDecoder.setNextFrame(frame) # end process ouputFile.endWrap() # get dst file of transcode dst_inputFile = av.InputFile(outputFileName) progress = av.NoDisplayProgress() dst_inputFile.analyse(progress, av.eAnalyseLevelHeader) dst_properties = dst_inputFile.getProperties() dst_videoStream = dst_properties.getVideoProperties()[0] assert_equals("mpeg2video", dst_videoStream.getCodecName()) assert_equals(1920, dst_videoStream.getWidth()) assert_equals(1080, dst_videoStream.getHeight()) assert_equals(16, dst_videoStream.getDar().num) assert_equals(9, dst_videoStream.getDar().den)
def testTranscodeNoStream(): """ Can't process with no stream. """ outputFileName = "testTranscodeNoStream.avi" ouputFile = av.OutputFile(outputFileName) transcoder = av.Transcoder(ouputFile) progress = av.NoDisplayProgress() transcoder.process(progress)
def testSetAudioFrame(): """ Generate a audio stream, and set its frame during process. """ # create output outputFileName = "testSetAudioFrame.wav" ouputFile = av.OutputFile( outputFileName ) # create video frame and codec inputAudioCodec = av.AudioCodec( av.eCodecTypeEncoder, "pcm_s24le" ); audioDesc = av.AudioFrameDesc( 48000, 1, "s32" ) inputAudioCodec.setAudioParameters( audioDesc ); # create transcoder and add a video stream transcoder = av.Transcoder( ouputFile ) transcoder.add( "", 0, "wave24b48kmono", inputAudioCodec ) audioDecoder = transcoder.getStreamTranscoder( 0 ).getCurrentDecoder() # start process ouputFile.beginWrap() transcoder.preProcessCodecLatency() p = av.ConsoleProgress() # process 51 frames nbFrames = 255 for i in range(0, nbFrames): transcoder.processFrame() p.progress( i, nbFrames ) # set video frame frame = av.AudioFrame( audioDesc ) frame.assign(i) audioDecoder.setNextFrame( frame ) # end process ouputFile.endWrap() # get dst file of transcode dst_inputFile = av.InputFile( outputFileName ) progress = av.NoDisplayProgress() dst_inputFile.analyse( progress, av.eAnalyseLevelHeader ) dst_properties = dst_inputFile.getProperties() dst_audioStream = dst_properties.getAudioProperties()[0] assert_equals( "pcm_s24le", dst_audioStream.getCodecName() ) assert_equals( "PCM signed 24-bit little-endian", dst_audioStream.getCodecLongName() ) assert_equals( "s32", dst_audioStream.getSampleFormatName() ) assert_equals( "signed 32 bits", dst_audioStream.getSampleFormatLongName() ) assert_equals( 48000, dst_audioStream.getSampleRate() ) assert_equals( 1, dst_audioStream.getNbChannels() )
def testSetVideoFrame(): """ Generate a video stream, and set its frame during process. """ # create output outputFileName = "testSetVideoFrame.mov" ouputFile = av.OutputFile( outputFileName ) # create video frame and codec inputVideoCodec = av.VideoCodec( av.eCodecTypeEncoder, "mpeg2video" ); imageDesc = av.VideoFrameDesc( 1920, 1080, "rgb24" ) inputVideoCodec.setImageParameters( imageDesc ) # create transcoder and add a video stream transcoder = av.Transcoder( ouputFile ) transcoder.add( "", 0, "mpeg2", inputVideoCodec ) videoDecoder = transcoder.getStreamTranscoder( 0 ).getCurrentDecoder() # start process ouputFile.beginWrap() transcoder.preProcessCodecLatency() p = av.ConsoleProgress() # process 51 frames nbFrames = 255 for i in range(0, nbFrames, 5): transcoder.processFrame() p.progress( i, nbFrames ) # set video frame frame = av.VideoFrame( imageDesc ) frame.assign(i) videoDecoder.setNextFrame( frame ) # end process ouputFile.endWrap() # get dst file of transcode dst_inputFile = av.InputFile( outputFileName ) progress = av.NoDisplayProgress() dst_inputFile.analyse( progress, av.eAnalyseLevelHeader ) dst_properties = dst_inputFile.getProperties() dst_videoStream = dst_properties.getVideoProperties()[0] assert_equals( "mpeg2video", dst_videoStream.getCodecName() ) assert_equals( "MPEG-2 video", dst_videoStream.getCodecLongName() ) assert_equals( 1920, dst_videoStream.getWidth() ) assert_equals( 1080, dst_videoStream.getHeight() ) assert_equals( 16, dst_videoStream.getDar().num ) assert_equals( 9, dst_videoStream.getDar().den )
def testTranscodeDummyExistingProfileWithNoEssenceDesc(): """ Can't add a dummy stream with no essence desc (for encoder). """ outputFileName = "testTranscodeDummyExistingProfileWithNoEssenceDesc.avi" ouputFile = av.OutputFile(outputFileName) transcoder = av.Transcoder(ouputFile) transcoder.add("", 0, "dnxhd120") transcoder.add("", 0, -1, "dnxhd120") progress = av.NoDisplayProgress() transcoder.process(progress)
def testRewrapDummy(): """ Can't rewrap a dummy stream (no sense). """ outputFileName = "testRewrapDummy.avi" ouputFile = av.OutputFile(outputFileName) transcoder = av.Transcoder(ouputFile) transcoder.add("", 0, "") transcoder.add("", 0, -1, "") progress = av.NoDisplayProgress() transcoder.process(progress)
def testTranscodeDummyNewProfileWithNoEssenceDesc(): """ Can't add a dummy stream with no essence desc (for encoder). """ outputFileName = "testTranscodeDummyNewProfileWithNoEssenceDesc.avi" ouputFile = av.OutputFile(outputFileName) transcoder = av.Transcoder(ouputFile) newProfile = { av.avProfileIdentificator: "newAudioPreset", av.avProfileIdentificatorHuman: "New audio preset", av.avProfileType: av.avProfileTypeAudio, } transcoder.add("", 0, newProfile) transcoder.add("", 0, -1, newProfile) progress = av.NoDisplayProgress() transcoder.process(progress)
def testInputFileAnalyseFirstGop(): """ Analyse the first gop of an InputFile, and check if the correct attributes are filled. """ inputFileName = os.environ['AVTRANSCODER_TEST_VIDEO_MOV_FILE'] inputFile = av.InputFile(inputFileName) # Analyse first GOP progress = av.NoDisplayProgress() inputFile.analyse(progress, av.eAnalyseLevelFirstGop) # Check properties after GOP analysis videoProperties = inputFile.getProperties().getVideoProperties()[0] assert_greater(videoProperties.getGopSize(), 0) assert_not_equals(videoProperties.getGopStructure(), ()) for image in videoProperties.getGopStructure(): pictureType = image[0] encodedPictureSize = image[1] assert_in(pictureType, ['I', 'P', 'B']) assert_greater(encodedPictureSize, 0)
def testInputFileAnalyseFirstGop(): """ Analyse the first gop of an InputFile, and check if the correct attributes are filled. """ inputFileName = os.environ['AVTRANSCODER_TEST_VIDEO_MOV_FILE'] inputFile = av.InputFile(inputFileName) # The analyse of the first GOP is not done yet videoProperties = inputFile.getProperties().getVideoProperties()[0] assert_equals(videoProperties.isInterlaced(), False) assert_equals(videoProperties.isTopFieldFirst(), False) assert_equals(videoProperties.getGopStructure(), ()) # Analyse first GOP progress = av.NoDisplayProgress() inputFile.analyse(progress, av.eAnalyseLevelFirstGop) # Check properties after GOP analysis videoProperties = inputFile.getProperties().getVideoProperties()[0] assert_not_equals(videoProperties.getGopStructure(), ())
def get_probe_on_file(): path = request.args.get('path') if path == None: abort(400) level = request.args.get('level', 'fast') analyse_gop_state = "disabled" if level == 'firstGop': analyse_gop_state = "enabled" app.logger.info('Analyse path: %s - GOP analysis: %s', path, analyse_gop_state) av.preloadCodecsAndFormats() inputFile = av.InputFile(str(path)) if level == 'firstGop': inputFile.analyse(av.NoDisplayProgress(), av.eAnalyseLevelFirstGop) data = inputFile.getProperties().allPropertiesAsJson() response = Response(data, mimetype='application/json') response.headers["Access-Control-Allow-Origin"] = "*" return response
def testAddMetadataDate(): """ Add metadata 'date' to the outputFile. """ outputFileName = "testAddMetadataDate.wav" ouputFile = av.OutputFile(outputFileName) transcoder = av.Transcoder(ouputFile) # rewrap a stream transcoder.add(os.environ['AVTRANSCODER_TEST_AUDIO_WAVE_FILE'], 0, "") # add one metadata metadata_to_check = ("date", "value") ouputFile.addMetadata(metadata_to_check[0], metadata_to_check[1]) progress = av.NoDisplayProgress() transcoder.process(progress) inputFile = av.InputFile(outputFileName) inputFile.analyse(progress, av.eAnalyseLevelHeader) properties = inputFile.getProperties() assert_in(metadata_to_check, properties.getMetadatas())