Skip to main content

Video Cut Endpoint

1. Overview

The /v1/video/cut endpoint is part of the Video API and allows users to cut specified segments from a video file with optional encoding settings. This endpoint fits into the overall API structure as a part of the version 1 (v1) routes, specifically under the video category.

2. Endpoint

POST /v1/video/cut

3. Request

Headers

  • x-api-key (required): The API key for authentication.

Body Parameters

The request body must be a JSON object with the following properties:

  • video_url (required, string): The URL of the video file to be cut.
  • cuts (required, array of objects): An array of cut segments, where each object has the following properties:
    • start (required, string): The start time of the cut segment in the format hh:mm:ss.ms.
    • end (required, string): The end time of the cut segment in the format hh:mm:ss.ms.
  • video_codec (optional, string): The video codec to use for encoding the output video. Default is libx264.
  • video_preset (optional, string): The video preset to use for encoding the output video. Default is medium.
  • video_crf (optional, number): The Constant Rate Factor (CRF) value for video encoding. Must be between 0 and 51. Default is 23.
  • audio_codec (optional, string): The audio codec to use for encoding the output video. Default is aac.
  • audio_bitrate (optional, string): The audio bitrate to use for encoding the output video. Default is 128k.
  • webhook_url (optional, string): The URL to receive a webhook notification when the job is completed.
  • id (optional, string): A unique identifier for the request.

Example Request

{
"video_url": "https://example.com/video.mp4",
"cuts": [
{
"start": "00:00:10.000",
"end": "00:00:20.000"
},
{
"start": "00:00:30.000",
"end": "00:00:40.000"
}
],
"video_codec": "libx264",
"video_preset": "medium",
"video_crf": 23,
"audio_codec": "aac",
"audio_bitrate": "128k",
"webhook_url": "https://example.com/webhook",
"id": "unique-request-id"
}
curl -X POST \
https://api.example.com/v1/video/cut \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"video_url": "https://example.com/video.mp4",
"cuts": [
{
"start": "00:00:10.000",
"end": "00:00:20.000"
},
{
"start": "00:00:30.000",
"end": "00:00:40.000"
}
],
"video_codec": "libx264",
"video_preset": "medium",
"video_crf": 23,
"audio_codec": "aac",
"audio_bitrate": "128k",
"webhook_url": "https://example.com/webhook",
"id": "unique-request-id"
}'

4. Response

Success Response

The response follows the general response format defined in the main application context (app.py). Here's an example of a successful response:

{
"endpoint": "/v1/video/cut",
"code": 200,
"id": "unique-request-id",
"job_id": "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6",
"response": "https://example.com/processed-video.mp4",
"message": "success",
"pid": 12345,
"queue_id": 6789,
"run_time": 5.234,
"queue_time": 0.123,
"total_time": 5.357,
"queue_length": 0,
"build_number": "1.0.0"
}

The response field contains the URL of the processed video file.

Error Responses

  • 400 Bad Request

    {
    "code": 400,
    "message": "Invalid request payload"
    }

    This error occurs when the request payload is missing required fields or contains invalid data.

  • 401 Unauthorized

    {
    "code": 401,
    "message": "Invalid API key"
    }

    This error occurs when the provided x-api-key header is missing or invalid.

  • 429 Too Many Requests

    {
    "code": 429,
    "id": "unique-request-id",
    "job_id": "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6",
    "message": "MAX_QUEUE_LENGTH (100) reached",
    "pid": 12345,
    "queue_id": 6789,
    "queue_length": 100,
    "build_number": "1.0.0"
    }

    This error occurs when the maximum queue length has been reached, and the request cannot be processed immediately.

  • 500 Internal Server Error

    {
    "code": 500,
    "message": "An error occurred during video processing"
    }

    This error occurs when an unexpected error occurs during the video processing or encoding.

5. Error Handling

The endpoint handles the following common errors:

  • Missing or invalid request parameters: If any required parameters are missing or invalid, the endpoint returns a 400 Bad Request error with an appropriate error message.
  • Invalid API key: If the provided x-api-key header is missing or invalid, the endpoint returns a 401 Unauthorized error.
  • Queue limit reached: If the maximum queue length has been reached, the endpoint returns a 429 Too Many Requests error with the current queue length and the maximum queue length.
  • Unexpected errors during video processing: If an unexpected error occurs during the video processing or encoding, the endpoint returns a 500 Internal Server Error with a generic error message.

The main application context (app.py) also includes error handling for the queue system and webhook notifications.

6. Usage Notes

  • The video_url parameter must be a valid URL that points to a video file accessible by the server.
  • The cuts parameter must be an array of objects, where each object represents a cut segment with a start and end time in the format hh:mm:ss.ms.
  • The optional encoding parameters (video_codec, video_preset, video_crf, audio_codec, audio_bitrate) allow you to customize the encoding settings for the output video file.
  • If the webhook_url parameter is provided, the server will send a webhook notification to the specified URL when the job is completed.
  • The id parameter can be used to associate the request with a unique identifier for tracking purposes.

7. Common Issues

  • Providing an invalid or inaccessible video_url.
  • Specifying overlapping or invalid cut segments in the cuts parameter.
  • Providing invalid encoding settings that are not supported by the server.
  • Reaching the maximum queue length, which can cause requests to be rejected with a 429 Too Many Requests error.

8. Best Practices

  • Validate the video_url parameter before sending the request to ensure it points to a valid and accessible video file.
  • Ensure that the cut segments in the cuts parameter are correctly formatted and do not overlap or exceed the duration of the video.
  • Use the optional encoding parameters judiciously, as they can impact the processing time and output video quality.
  • Implement retry mechanisms for handling 429 Too Many Requests errors, as the queue length may fluctuate over time.
  • Monitor the webhook notifications or poll the server for job status updates to track the progress of long-running jobs.