def test_config_build_from(): config = Config.build_from( video_codec="h264", audio_codec="aac", max_video_bitrate="500k", min_video_bitrate="500k", target_video_bitrate="500k", target_audio_bitrate="128k", buffersize="900k", audio_sampling_rate="44100", quantizer_scale_range=(21, 35), video_scale="480:trunc(ow/a/2)*2", ) config.update_from() args = config.to_ffmpeg_args() assert len(args) == 24 options_map = [ ("codec:v", "video_codec"), ("codec:a", "audio_codec"), ("maxrate", "max_video_bitrate"), ("minrate", "min_video_bitrate"), ("b:v", "target_video_bitrate"), ("bufsize", "buffersize"), ("ar", "audio_sampling_rate"), ("b:a", "target_audio_bitrate"), ] for option, attr in options_map: idx = args.index(f"-{option}") assert idx != -1 assert args[idx + 1] == str(getattr(config, attr)) video_scale = getattr(config, "video_scale") qmin, qmax = getattr(config, "quantizer_scale_range") assert args.index("-qmin") != -1 and args[args.index("-qmin") + 1] == str(qmin) assert args.index("-qmax") != -1 and args[args.index("-qmax") + 1] == str(qmax) assert ( args.index("-vf") != -1 and args[args.index("-vf") + 1] == f"scale='{video_scale}'" ) assert ( args.index("-max_muxing_queue_size") != -1 and args[args.index("-max_muxing_queue_size") + 1] == "9999" ) with pytest.raises(ValueError): config.update_from(quantizer_scale_range=(-5, 52))
assert idx != -1 and args[idx + 1] == "128k" @pytest.mark.slow @pytest.mark.parametrize( "src,dest,ffmpeg_args,expected", [ ( "video.mkv", "video.mp4", Config.build_from( video_codec="h264", audio_codec="aac", max_video_bitrate="500k", min_video_bitrate="500k", target_video_bitrate="500k", target_audio_bitrate="128k", buffersize="900k", audio_sampling_rate="44100", quantizer_scale_range=(21, 35), video_scale="480:trunc(ow/a/2)*2", ).to_ffmpeg_args(), {"codecs": ["h264", "aac"], "duration": 2}, ), ( "video.mp4", "video.webm", VideoWebmLow().to_ffmpeg_args(), {"codecs": ["vp8", "vorbis"], "duration": 2}, ), ( "video.webm",