Spaces:
Runtime error
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 formathh:mm:ss.ms.end(required, string): The end time of the cut segment in the formathh:mm:ss.ms.
video_codec(optional, string): The video codec to use for encoding the output video. Default islibx264.video_preset(optional, string): The video preset to use for encoding the output video. Default ismedium.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 isaac.audio_bitrate(optional, string): The audio bitrate to use for encoding the output video. Default is128k.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-keyheader 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-keyheader 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_urlparameter must be a valid URL that points to a video file accessible by the server. - The
cutsparameter must be an array of objects, where each object represents a cut segment with a start and end time in the formathh: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_urlparameter is provided, the server will send a webhook notification to the specified URL when the job is completed. - The
idparameter 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
cutsparameter. - 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_urlparameter before sending the request to ensure it points to a valid and accessible video file. - Ensure that the cut segments in the
cutsparameter 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.