Skip to main content
Glama
misbahsy

Video & Audio Editing MCP Server

by misbahsy

change_video_speed

Adjust video playback speed and audio to create faster or slower versions. Specify input/output paths and speed factor for precise customization.

Instructions

Changes the playback speed of a video (and its audio).

Args: video_path: Path to the input video file. output_video_path: Path to save the speed-adjusted video file. speed_factor: The factor by which to change the speed (e.g., 2.0 for 2x speed, 0.5 for half speed). Must be positive.

Returns: A status message indicating success or failure.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
output_video_pathYes
speed_factorYes
video_pathYes

Implementation Reference

  • The handler function for the 'change_video_speed' MCP tool. Adjusts video speed using setpts filter on video stream and chains multiple atempo filters on audio to support speed factors outside the single atempo limit (0.5-2.0). Handles input validation and ffmpeg errors with fallbacks.
    def change_video_speed(video_path: str, output_video_path: str, speed_factor: float) -> str: """Changes the playback speed of a video (and its audio). Args: video_path: Path to the input video file. output_video_path: Path to save the speed-adjusted video file. speed_factor: The factor by which to change the speed (e.g., 2.0 for 2x speed, 0.5 for half speed). Must be positive. Returns: A status message indicating success or failure. """ if speed_factor <= 0: return "Error: Speed factor must be positive." if not os.path.exists(video_path): return f"Error: Input video file not found at {video_path}" try: # Process atempo values (audio speed) - requires special handling for values outside 0.5-2.0 range atempo_value = speed_factor atempo_filters = [] # Handle audio speed outside atempo's range (0.5-2.0) if speed_factor < 0.5: # For speed < 0.5, use multiple atempo=0.5 filters while atempo_value < 0.5: atempo_filters.append("atempo=0.5") atempo_value *= 2 # After applying atempo=0.5, the remaining factor doubles # Add the remaining factor if needed if atempo_value < 0.99: # A bit of buffer for floating point comparison atempo_filters.append(f"atempo={atempo_value}") elif speed_factor > 2.0: # For speed > 2.0, use multiple atempo=2.0 filters while atempo_value > 2.0: atempo_filters.append("atempo=2.0") atempo_value /= 2 # After applying atempo=2.0, the remaining factor halves # Add the remaining factor if needed if atempo_value > 1.01: # A bit of buffer for floating point comparison atempo_filters.append(f"atempo={atempo_value}") else: # For speed factors within range, just use one atempo filter atempo_filters.append(f"atempo={speed_factor}") # Apply separate filters to video and audio streams input_stream = ffmpeg.input(video_path) video = input_stream.video.setpts(f"{1.0/speed_factor}*PTS") # Chain multiple audio filters if needed audio = input_stream.audio for filter_str in atempo_filters: audio = audio.filter("atempo", speed_factor if filter_str == f"atempo={speed_factor}" else 0.5 if filter_str == "atempo=0.5" else 2.0 if filter_str == "atempo=2.0" else float(filter_str.replace("atempo=", ""))) # Combine processed streams and output output = ffmpeg.output(video, audio, output_video_path) output.run(capture_stdout=True, capture_stderr=True) return f"Video speed changed by factor {speed_factor} and saved to {output_video_path}" except ffmpeg.Error as e: error_message = e.stderr.decode('utf8') if e.stderr else str(e) return f"Error changing video speed: {error_message}" except Exception as e: return f"An unexpected error occurred while changing video speed: {str(e)}"

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/misbahsy/video-audio-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server