{"id":28811,"date":"2023-05-11T07:00:00","date_gmt":"2023-05-11T14:00:00","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=28811"},"modified":"2025-11-26T15:38:26","modified_gmt":"2025-11-26T23:38:26","slug":"python-video-editing-optimization","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization","title":{"rendered":"Python Video Editing and Optimization"},"content":{"rendered":"\n<p>The days of needing a graphic designer to edit hundreds of videos manually are over. Today, Python scripts make it easy to scale video production for your projects and produce high-quality videos in bulk, for the best possible user experience.<\/p>\n\n\n\n<p>It&#8217;s no wonder writing programs in Python has become the efficient and cost-effective way to edit and personalize videos. Automating video edits using Python makes it possible for companies to deliver campaign videos to users and keep product videos up-to-date on websites without stress.&nbsp;<\/p>\n\n\n\n<p>Python provides some powerful libraries, including MoviePY, Scikit-video, and VidGear, that enable you to edit your videos with only a few lines of code.&nbsp;<\/p>\n\n\n\n<p>Cloudinary is another tool that provides comparable functionality. It&#8217;s a cloud-based image and video management service that provides rich editing capabilities accessible via an easy-to-use Python SDK. Cloudinary also provides advanced features that make a huge difference, for example cropping with AI to ensure that the important parts of the video are kept inside the picture throughout, video optimization to improve web performance, and adaptive streaming for a better user experience.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Overview<\/h2>\n\n\n\n<p>In this blog post, you\u2019ll see examples of how you can automate Python video editing and optimization with Cloudinary, including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Trimming and concatenating video clips.<\/li>\n\n\n\n<li>Adding subtitles, watermarks, and background music.<\/li>\n\n\n\n<li>Non-linear editing in the form of video overlays.<\/li>\n\n\n\n<li>Removing backgrounds.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>You\u2019ll also learn how to utilize AI to smart-crop your videos and how to optimize your videos for ideal web performance and smooth streaming on your site.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Getting Started<\/h2>\n\n\n\n<p>You might want to apply the editing and optimization techniques in the code snippets below to your own videos. To do that, follow the instructions to create a Cloudinary account, upload a few videos, and configure.&nbsp;<\/p>\n\n\n\n<p>Then, replace the public IDs (the unique identifiers for the videos) in the code snippets below with those of the assets you uploaded.<\/p>\n\n\n\n<p>Here\u2019s how to get started with Cloudinary:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Register <a href=\"https:\/\/cloudinary.com\/users\/register_free#gsc.tab=0\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/li>\n\n\n\n<li>Drag and drop the videos you want to use in the <a href=\"https:\/\/console.cloudinary.com\/console\/media_library\/search?q=\" target=\"_blank\" rel=\"noreferrer noopener\">Media Library<\/a>. Keep a record of their public IDs so you can reference them later in your code.<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1764199867\/blog-Python_Video_Editing_and_Optimization-1.webp\" alt=\"Two watches overlayed on a blue screen. The name &quot;bluescreen_watches&quot; is outlined in red.\" style=\"width:222px;height:222px\"\/><figcaption class=\"wp-element-caption\">Public ID<\/figcaption><\/figure><\/div>\n\n<div class='c-callout  c-callout--note'><strong class='c-callout__title'>Notes<\/strong> <p>You can also upload videos <a href=\"https:\/\/cloudinary.com\/documentation\/image_upload_api_reference#upload\">programmatically<\/a>.<\/p>\n<\/div>\n\n\n<p>3. Install Cloudinary.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In a terminal in your Python3 environment, run the following code:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs shcb-wrap-lines\">pip3 install cloudinary\npip3 install python-dotenv<\/code><\/span><\/pre>\n\n\n<p>4. Configure Cloudinary.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In your project, create a file called <code>.env<\/code> containing your <strong>API environment variable<\/strong> from your <a href=\"https:\/\/console.cloudinary.com\/console\/\" target=\"_blank\" rel=\"noreferrer noopener\">product environment credentials<\/a>:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-comment\"># .env <\/span>\n<span class=\"hljs-comment\"># <\/span>\n<span class=\"hljs-comment\"># Copy and paste your API environment variable<\/span>\n<span class=\"hljs-comment\"># =============================================<\/span>\nCLOUDINARY_URL=cloudinary:<span class=\"hljs-comment\">\/\/&lt;api_key&gt;:&lt;api_secret&gt;@&lt;cloud_name&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<div class='c-callout  c-callout--note'><strong class='c-callout__title'>Notes<\/strong> <p>When writing your own applications, follow your organization\u2019s policy on storing secrets and don\u2019t expose your API secret.\nDon\u2019t store your .env under version control for maximum security.<\/p>\n<\/div>\n\n\n<p>5. In your project, create a new file called <code>my_file.py<\/code>. Copy and paste the following into this file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-comment\"># my_file.py<\/span>\n<span class=\"hljs-comment\">#<\/span>\n<span class=\"hljs-comment\"># Set your Cloudinary credentials<\/span>\n<span class=\"hljs-comment\"># ==============================<\/span>\nfrom dotenv import load_dotenv\nload_dotenv()\n<span class=\"hljs-comment\"># Import the Cloudinary library<\/span>\n<span class=\"hljs-comment\"># ==============================<\/span>\nimport cloudinary\n<span class=\"hljs-comment\"># Set configuration parameter: return \"https\" URLs by setting secure=True  <\/span>\n<span class=\"hljs-comment\"># ==============================<\/span>\nconfig = cloudinary.config(secure=<span class=\"hljs-keyword\">True<\/span>)\n<span class=\"hljs-comment\"># Log the configuration<\/span>\n<span class=\"hljs-comment\"># ==============================<\/span>\n<span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"Your Cloudinary Credentials:\"<\/span>)\n<span class=\"hljs-keyword\">print<\/span>(config.cloud_name, config.api_key)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Experience the Possibilities<\/h2>\n\n\n\n<p>The following examples show a gamut of video editing and optimization possibilities using Python and Cloudinary. The goal is to give you a small taste of what you can do with Cloudinary, show you how to implement the edits, and inspire you to start creating your own.&nbsp;<\/p>\n\n\n\n<p>You can take a look at each example individually, and you can see a full code sandbox below or on <a href=\"https:\/\/github.com\/cloudinary-devs\/python-video-editing\/blob\/main\/demo.py\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example 1: Grabbing an Original Video<\/h3>\n\n\n\n<p>The following function returns the URL of an original video saved in Cloudinary:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-comment\"># my_file.py<\/span>\n\ndef getOriginal(publicId):\n originalURL=cloudinary.CloudinaryVideo(publicId).build_url()\n <span class=\"hljs-keyword\">return<\/span> originalURL<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The public ID, the video\u2019s unique identifier, is passed in to function. Cloudinary returns the video\u2019s URL, which can be used to deliver the video in its original form.<\/p>\n\n\n\n<p>Here&#8217;s the video:<\/p>\n\n\n<cld-video-player\n      cloud-name='demo'\n      public-id='docs\/video_features_tutorial\/hair'\n      js-config='{\"playbackRates\":[0.5,1,1.5,2]}'\n      style='max-width: 250px;'\n      class='c-video-player'\n      \n      core-version='2.12.3'\n      player-version='1.7.0'\n      >\n      <video\n        id='_video-player69e27fb893bc4'\n        data-cld-big-play-button='init'\n        data-cld-source-types='[\"hls\",\"webm\\\/vp9\",\"mp4\\\/h265\",\"mp4\"]'\n        controls\n        muted\n        class='cld-video-player cld-fluid wp-block-cloudinary-video-player  cld-video-player-skin-dark'\n      ><\/video>\n    <\/cld-video-player>\n\n\n<p>The following examples show how to edit the original video by adding a few parameters.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example 2: Basic Editing&nbsp;<\/h3>\n\n\n\n<p>This code snippet edits the video in numerous ways:&nbsp;<\/p>\n\n\n\n<p><strong>Resizing and cropping<\/strong>: <code>{\"aspect_ratio\":\"4:3\", \"crop\":\"fill\", \"y\":\"100\", \"width\":\"400\"}<\/code><\/p>\n\n\n\n<p><strong>Trimming<\/strong>:<code> {\"duration\": \"5\"}<\/code><\/p>\n\n\n\n<p><strong>Concatenating<\/strong> a cropped, resized, and trimmed video stored in Cloudinary with public ID <code>docs\/video_features_tutorial\/makeup<\/code>: <\/p>\n\n\n\n<p><code>{\"duration\": \"5\", \"flags\": \"splice\", \"overlay\": \"video:docs:video_features_tutorial:makeup\"},<br>{\"aspect_ratio\": \"4:3\", \"crop\": \"fill\", \"y\":\"130\", \"width\": \"400\"},<br>{\"flags\": \"layer_apply\" }<\/code><\/p>\n\n\n\n<p><strong>Adding background music<\/strong>, stored in Cloudinary with public ID <code>video_features_tutorial\/romeo_and_juliet<\/code>: <\/p>\n\n\n\n<p><code>{\"overlay\": \"video:docs:video_features_tutorial:romeo_and_juliet\"},<br>{\"flags\": \"layer_apply\"}<\/code><\/p>\n\n\n\n<p><strong>Adding a watermark<\/strong>, stored in Cloudinary with public ID <code>cloudinary_icon<\/code>, resized and placed in the north east corner or the video:&nbsp;<\/p>\n\n\n\n<p><code>{\"overlay\": \"cloudinary_icon\"},<br>{\"width\": \"40\", \"x\":\"10\", \"y\":\"10\" },<br>{\"flags\": \"layer_apply\", \"gravity\": \"north_east\"}<\/code><\/p>\n\n\n\n<p><strong>Adding an SRT file<\/strong> stored in Cloudinary with public ID <code>video_features_tutorial\/captions.srt<\/code> as subtitles:&nbsp;<\/p>\n\n\n\n<p><code>{\"overlay\": {\"resource_type\": \"subtitles\", \"public_id\":<\/code><br><code>\"docs\/video_features_tutorial\/captions.srt\"}},<br>{\"flag\": \"layer_apply\" }<\/code><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">def concatenated():\n videoURL = cloudinary.CloudinaryVideo(<span class=\"hljs-string\">\"docs\/video_features_tutorial\/hair\"<\/span>).build_url(transformation=&#91;\n   {<span class=\"hljs-string\">\"aspect_ratio\"<\/span>:<span class=\"hljs-string\">\"4:3\"<\/span>, <span class=\"hljs-string\">\"crop\"<\/span>:<span class=\"hljs-string\">\"fill\"<\/span>, <span class=\"hljs-string\">\"y\"<\/span>:<span class=\"hljs-string\">\"100\"<\/span>, <span class=\"hljs-string\">\"width\"<\/span>:<span class=\"hljs-string\">\"400\"<\/span>},\n   {<span class=\"hljs-string\">\"duration\"<\/span>: <span class=\"hljs-string\">\"5\"<\/span>},\n   {<span class=\"hljs-string\">\"duration\"<\/span>: <span class=\"hljs-string\">\"5\"<\/span>, <span class=\"hljs-string\">\"flags\"<\/span>: <span class=\"hljs-string\">\"splice\"<\/span>, <span class=\"hljs-string\">\"overlay\"<\/span>: <span class=\"hljs-string\">\"video:docs:video_features_tutorial:makeup\"<\/span>},\n   {<span class=\"hljs-string\">\"aspect_ratio\"<\/span>: <span class=\"hljs-string\">\"4:3\"<\/span>, <span class=\"hljs-string\">\"crop\"<\/span>: <span class=\"hljs-string\">\"fill\"<\/span>, <span class=\"hljs-string\">\"y\"<\/span>:<span class=\"hljs-string\">\"130\"<\/span>, <span class=\"hljs-string\">\"width\"<\/span>: <span class=\"hljs-string\">\"400\"<\/span>},\n   {<span class=\"hljs-string\">\"flags\"<\/span>: <span class=\"hljs-string\">\"layer_apply\"<\/span> },\n   {<span class=\"hljs-string\">\"overlay\"<\/span>: <span class=\"hljs-string\">\"video:docs:video_features_tutorial:romeo_and_juliet\"<\/span>},\n   {<span class=\"hljs-string\">\"flags\"<\/span>: <span class=\"hljs-string\">\"layer_apply\"<\/span>},\n   {<span class=\"hljs-string\">\"overlay\"<\/span>: <span class=\"hljs-string\">\"cloudinary_icon\"<\/span>},\n   {<span class=\"hljs-string\">\"width\"<\/span>: <span class=\"hljs-string\">\"40\"<\/span>, <span class=\"hljs-string\">\"x\"<\/span>:<span class=\"hljs-string\">\"10\"<\/span>, <span class=\"hljs-string\">\"y\"<\/span>:<span class=\"hljs-string\">\"10\"<\/span> },\n   {<span class=\"hljs-string\">\"flags\"<\/span>: <span class=\"hljs-string\">\"layer_apply\"<\/span>, <span class=\"hljs-string\">\"gravity\"<\/span>: <span class=\"hljs-string\">\"north_east\"<\/span>},\n   {<span class=\"hljs-string\">\"overlay\"<\/span>: {<span class=\"hljs-string\">\"resource_type\"<\/span>: <span class=\"hljs-string\">\"subtitles\"<\/span>, <span class=\"hljs-string\">\"public_id\"<\/span>: <span class=\"hljs-string\">\"docs\/video_features_tutorial\/captions.srt\"<\/span>}},\n   {<span class=\"hljs-string\">\"flag\"<\/span>: <span class=\"hljs-string\">\"layer_apply\"<\/span> }])\n <span class=\"hljs-keyword\">return<\/span> videoURL<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Here&#8217;s the edited video:<\/p>\n\n\n<cld-video-player\n      cloud-name='demo'\n      public-id='docs\/video_features_tutorial\/hair_edited.mp4'\n      js-config='{\"playbackRates\":[0.5,1,1.5,2]}'\n      style='max-width: 250px;'\n      class='c-video-player'\n      \n      core-version='2.12.3'\n      player-version='1.7.0'\n      >\n      <video\n        id='_video-player69e27fb894384'\n        data-cld-big-play-button='init'\n        data-cld-source-types='[\"webm\\\/vp9\",\"mp4\\\/h265\",\"mp4\"]'\n        controls\n        muted\n        class='cld-video-player cld-fluid wp-block-cloudinary-video-player  cld-video-player-skin-dark'\n      ><\/video>\n    <\/cld-video-player>\n\n\n<h3 class=\"wp-block-heading\">Example 3: Video Overlays<\/h3>\n\n\n\n<p>Here\u2019s an example of non-linear editing. You can apply one video over the other as an overlay to have them play at the same time:&nbsp;<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-comment\"># my_file.py<\/span>\n\ndef overlay():\n videoURL = cloudinary.CloudinaryVideo(<span class=\"hljs-string\">\"docs\/sdk\/go\/exercise1\"<\/span>).build_url(transformation=&#91;\n   {<span class=\"hljs-string\">\"crop\"<\/span>:<span class=\"hljs-string\">\"scale\"<\/span>,<span class=\"hljs-string\">\"width\"<\/span>:<span class=\"hljs-string\">\"300\"<\/span>},\n   {<span class=\"hljs-string\">\"overlay\"<\/span>: <span class=\"hljs-string\">\"video:exercise2\"<\/span>},\n   {<span class=\"hljs-string\">\"crop\"<\/span>:<span class=\"hljs-string\">\"fit\"<\/span>,<span class=\"hljs-string\">\"width\"<\/span>:<span class=\"hljs-string\">\"80\"<\/span>,<span class=\"hljs-string\">\"border\"<\/span>:<span class=\"hljs-string\">\"1px_solid_white\"<\/span>},\n   {<span class=\"hljs-string\">\"flags\"<\/span>: <span class=\"hljs-string\">\"layer_apply\"<\/span>,<span class=\"hljs-string\">\"gravity\"<\/span>:<span class=\"hljs-string\">\"north_east\"<\/span>,<span class=\"hljs-string\">\"start_offset\"<\/span>:<span class=\"hljs-string\">\"2.0\"<\/span>}\n   ])\n <span class=\"hljs-keyword\">return<\/span> videoURL<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Here&#8217;s the video:<\/p>\n\n\n<cld-video-player\n      cloud-name='demo'\n      public-id='blogs\/python_video_editing\/exercise1_overlay'\n      js-config='{\"playbackRates\":[0.5,1,1.5,2]}'\n      style='max-width: 250px;'\n      class='c-video-player'\n      poster-timestamp='1'\n      core-version='2.12.3'\n      player-version='1.7.0'\n      >\n      <video\n        id='_video-player69e27fb894897'\n        data-cld-big-play-button='init'\n        data-cld-source-types='[\"hls\",\"webm\\\/vp9\",\"mp4\\\/h265\",\"mp4\"]'\n        controls\n        muted\n        class='cld-video-player cld-fluid wp-block-cloudinary-video-player  cld-video-player-skin-dark'\n      ><\/video>\n    <\/cld-video-player>\n\n\n<h3 class=\"wp-block-heading\">Example 4: Background Removal<\/h3>\n\n\n\n<p>In this example, the blue background in this product video is switched to a beach scene:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-comment\"># my_file.py<\/span>\n\ndef removeBackground():\n videoURL=cloudinary.CloudinaryVideo(<span class=\"hljs-string\">\"docs\/sunset_waves\"<\/span>).build_url(transformation=&#91;\n {<span class=\"hljs-string\">'width'<\/span>: <span class=\"hljs-number\">500<\/span>, <span class=\"hljs-string\">'crop'<\/span>: <span class=\"hljs-string\">\"scale\"<\/span>},\n {<span class=\"hljs-string\">'overlay'<\/span>: <span class=\"hljs-string\">\"video:docs:bluescreen_watches\"<\/span>},\n {<span class=\"hljs-string\">'flags'<\/span>: <span class=\"hljs-string\">\"relative\"<\/span>, <span class=\"hljs-string\">'width'<\/span>: <span class=\"hljs-string\">\"0.6\"<\/span>, <span class=\"hljs-string\">'crop'<\/span>: <span class=\"hljs-string\">\"scale\"<\/span>},\n {<span class=\"hljs-string\">'color'<\/span>: <span class=\"hljs-string\">\"#0e80d8\"<\/span>, <span class=\"hljs-string\">'effect'<\/span>: <span class=\"hljs-string\">\"make_transparent:20\"<\/span>},\n {<span class=\"hljs-string\">'flags'<\/span>: <span class=\"hljs-string\">\"layer_apply\"<\/span>, <span class=\"hljs-string\">'gravity'<\/span>: <span class=\"hljs-string\">\"north\"<\/span>},\n {<span class=\"hljs-string\">'duration'<\/span>: <span class=\"hljs-string\">\"15.0\"<\/span>}\n ])\n <span class=\"hljs-keyword\">return<\/span> videoURL<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Here&#8217;s the video:<\/p>\n\n\n<cld-video-player\n      cloud-name='demo'\n      public-id='blogs\/python_video_editing\/sunset_waves'\n      js-config='{\"playbackRates\":[0.5,1,1.5,2]}'\n      style='max-width: 250px;'\n      class='c-video-player'\n      poster-timestamp='3'\n      core-version='2.12.3'\n      player-version='1.7.0'\n      >\n      <video\n        id='_video-player69e27fb894c97'\n        data-cld-big-play-button='init'\n        data-cld-source-types='[\"webm\\\/vp9\",\"mp4\\\/h265\",\"mp4\"]'\n        controls\n        muted\n        class='cld-video-player cld-fluid wp-block-cloudinary-video-player  cld-video-player-skin-dark'\n      ><\/video>\n    <\/cld-video-player>\n\n\n<h3 class=\"wp-block-heading\">Example 5: Smart Cropping<\/h3>\n\n\n\n<p>When you crop videos, especially in bulk, you risk cutting out the important parts and ruining the video. Cloudinary prevents this from happening by using AI to make sure that the main subjects of the video are followed throughout.&nbsp;<\/p>\n\n\n\n<p>Cropping this video causes the gymnast to move in and out of view because, the crop by default just captures the center of the video:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-comment\"># my_file.py<\/span>\n\ndef getGAutoOrig():\n videoURL = cloudinary.CloudinaryVideo(<span class=\"hljs-string\">\"olympic_gymnast.mp4\"<\/span>).build_url(transformation=&#91;\n   {<span class=\"hljs-string\">\"crop\"<\/span>:<span class=\"hljs-string\">\"fill\"<\/span>,<span class=\"hljs-string\">\"width\"<\/span>:<span class=\"hljs-string\">\"120\"<\/span>,<span class=\"hljs-string\">\"height\"<\/span>:<span class=\"hljs-string\">\"300\"<\/span>}])\n  <span class=\"hljs-keyword\">return<\/span> videoURL<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Here&#8217;s the video, cropped without AI applied. Notice the gymnast doesn&#8217;t stay in the frame throughout:<\/p>\n\n\n<cld-video-player\n      cloud-name='demo'\n      public-id='blogs\/python_video_editing\/olympic_gymnast'\n      js-config='{\"playbackRates\":[0.5,1,1.5,2]}'\n      style='max-width: 150px;'\n      class='c-video-player'\n      poster-timestamp='3'\n      core-version='2.12.3'\n      player-version='1.7.0'\n      >\n      <video\n        id='_video-player69e27fb8950ca'\n        data-cld-big-play-button='init'\n        data-cld-source-types='[\"webm\\\/vp9\",\"mp4\\\/h265\",\"mp4\"]'\n        controls\n        muted\n        class='cld-video-player cld-fluid wp-block-cloudinary-video-player  cld-video-player-skin-dark'\n      ><\/video>\n    <\/cld-video-player>\n\n\n<p>Adding the <code>gravity:auto parameter<\/code> ensures that the gymnast remains in focus:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">def gAuto():\n videoURL = cloudinary.CloudinaryVideo(<span class=\"hljs-string\">\"olympic_gymnast.mp4\"<\/span>).build_url(transformation=&#91;\n   {<span class=\"hljs-string\">\"crop\"<\/span>:<span class=\"hljs-string\">\"fill\"<\/span>,<span class=\"hljs-string\">\"gravity\"<\/span>:<span class=\"hljs-string\">\"auto\"<\/span>,<span class=\"hljs-string\">\"width\"<\/span>:<span class=\"hljs-string\">\"120\"<\/span>,<span class=\"hljs-string\">\"height\"<\/span>:<span class=\"hljs-string\">\"300\"<\/span>}])\n <span class=\"hljs-keyword\">return<\/span> videoURL<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<cld-video-player\n      cloud-name='demo'\n      public-id='blogs\/python_video_editing\/olympic_gymnast_smart_crop'\n      js-config='{\"playbackRates\":[0.5,1,1.5,2]}'\n      style='max-width: 150px;'\n      class='c-video-player'\n      poster-timestamp='3'\n      core-version='2.12.3'\n      player-version='1.7.0'\n      >\n      <video\n        id='_video-player69e27fb895403'\n        data-cld-big-play-button='init'\n        data-cld-source-types='[\"webm\\\/vp9\",\"mp4\\\/h265\",\"mp4\"]'\n        controls\n        muted\n        class='cld-video-player cld-fluid wp-block-cloudinary-video-player  cld-video-player-skin-dark'\n      ><\/video>\n    <\/cld-video-player>\n\n\n<h3 class=\"wp-block-heading\">Example 6: Optimizing<\/h3>\n\n\n\n<p>Cloudinary can reduce the size of your videos to improve your web performance with:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/cloudinary.com\/documentation\/video_optimization#how_to_optimize_video_format\">f_auto<\/a>: Delivers the video using the best format for the requesting browser.<\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/documentation\/video_optimization#how_to_optimize_video_quality\">q_auto<\/a>: Delivers the video using the optimal compression that balances the smallest size without sacrificing visual quality.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-comment\"># my_file.py<\/span>\n\ndef fqAuto():\n  videoURL = cloudinary.CloudinaryVideo(<span class=\"hljs-string\">\"docs\/sunglasses\"<\/span>).build_url(transformation=&#91;\n    {<span class=\"hljs-string\">\"fetch_format\"<\/span>:<span class=\"hljs-string\">\"auto\"<\/span>,<span class=\"hljs-string\">\"quality\"<\/span>:<span class=\"hljs-string\">\"auto\"<\/span>}])\n  <span class=\"hljs-keyword\">return<\/span> videoURL<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Here&#8217;s the optimized video:<\/p>\n\n\n<cld-video-player\n      cloud-name='demo'\n      public-id='docs\/sunglasses'\n      js-config='{\"playbackRates\":[0.5,1,1.5,2]}'\n      style='max-width: 250px;'\n      class='c-video-player'\n      \n      core-version='2.12.3'\n      player-version='1.7.0'\n      >\n      <video\n        id='_video-player69e27fb89582d'\n        data-cld-big-play-button='init'\n        data-cld-source-types='[\"hls\",\"webm\\\/vp9\",\"mp4\\\/h265\",\"mp4\"]'\n        controls\n        muted\n        class='cld-video-player cld-fluid wp-block-cloudinary-video-player  cld-video-player-skin-dark'\n      ><\/video>\n    <\/cld-video-player>\n\n\n<h3 class=\"wp-block-heading\">Example 7: Adaptive Bitrate Streaming<\/h3>\n\n\n\n<p>Cloudinary can ensure that your videos are delivered with the least interruption, at every second and from any browser, using <a href=\"https:\/\/cloudinary.com\/documentation\/adaptive_bitrate_streaming#automatic_streaming_profile_selection\" target=\"_blank\" rel=\"noreferrer noopener\">adaptive bitrate streaming<\/a>.&nbsp;<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-comment\"># my_file.py<\/span>\n\ndef autoStreaming():\n  videoURL=cloudinary.utils.cloudinary_url(<span class=\"hljs-string\">\"docs\/waterfall.m3u8\"<\/span>, streaming_profile=<span class=\"hljs-string\">\"auto\"<\/span>, resource_type=<span class=\"hljs-string\">\"video\"<\/span>)\n  <span class=\"hljs-keyword\">return<\/span> videoURL<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Here&#8217;s the streaming video:<\/p>\n\n\n<cld-video-player\n      cloud-name='demo'\n      public-id='docs\/waterfall'\n      js-config='{\"playbackRates\":[0.5,1,1.5,2]}'\n      style='max-width: 250px;'\n      class='c-video-player'\n      \n      core-version='2.12.3'\n      player-version='1.7.0'\n      >\n      <video\n        id='_video-player69e27fb895bab'\n        data-cld-big-play-button='init'\n        data-cld-source-types='[\"hls\",\"webm\\\/vp9\",\"mp4\\\/h265\",\"mp4\"]'\n        controls\n        muted\n        class='cld-video-player cld-fluid wp-block-cloudinary-video-player  cld-video-player-skin-dark'\n      ><\/video>\n    <\/cld-video-player>\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>These are just some of the Python video editing and optimization possibilities that Cloudinary can offer. Cloudinary provides similar editing capabilities to Python libraries such as MoviePY, Scikit-video, and VidGear, along with some Cloudinary-unique capabilities to boot. Leverage Cloudinary&#8217;s smart-cropping, optimization, and adaptive bitrate streaming to improve your website\u2019s performance and user experience.<\/p>\n\n\n\n<p>You\u2019re invited to explore the expanse of <a href=\"https:\/\/cloudinary.com\/documentation\/video_manipulation_and_delivery\" target=\"_blank\" rel=\"noreferrer noopener\">editing<\/a> and <a href=\"https:\/\/cloudinary.com\/documentation\/admin_api\" target=\"_blank\" rel=\"noreferrer noopener\">management<\/a> features that Cloudinary offers. <a href=\"https:\/\/community.cloudinary.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Let us know<\/a> which are your favorites!&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The days of needing a graphic designer to edit hundreds of videos manually are over. Today, Python scripts make it easy to scale video production for your projects and produce high-quality videos in bulk, for the best possible user experience. It&#8217;s no wonder writing programs in Python has become the efficient and cost-effective way to [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":28899,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[388,303],"class_list":["post-28811","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-optimize","tag-video"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Python Video Editing and Optimization<\/title>\n<meta name=\"description\" content=\"Automate video editing and optimization with Python and Cloudinary, and access capabilities such as MoviePY and other powerful libraries.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python Video Editing and Optimization\" \/>\n<meta property=\"og:description\" content=\"Automate video editing and optimization with Python and Cloudinary, and access capabilities such as MoviePY and other powerful libraries.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-11T14:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-26T23:38:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683328665\/Blog-python-video-editing\/Blog-python-video-editing.jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"sharonyelenik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization\"},\"author\":{\"name\":\"sharonyelenik\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/dc4e70df8d22a9cfdad676a82fa92a73\"},\"headline\":\"Python Video Editing and Optimization\",\"datePublished\":\"2023-05-11T14:00:00+00:00\",\"dateModified\":\"2025-11-26T23:38:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization\"},\"wordCount\":946,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683328665\/Blog-python-video-editing\/Blog-python-video-editing.jpg?_i=AA\",\"keywords\":[\"Optimize\",\"Video\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2023\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization\",\"url\":\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization\",\"name\":\"Python Video Editing and Optimization\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683328665\/Blog-python-video-editing\/Blog-python-video-editing.jpg?_i=AA\",\"datePublished\":\"2023-05-11T14:00:00+00:00\",\"dateModified\":\"2025-11-26T23:38:26+00:00\",\"description\":\"Automate video editing and optimization with Python and Cloudinary, and access capabilities such as MoviePY and other powerful libraries.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683328665\/Blog-python-video-editing\/Blog-python-video-editing.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683328665\/Blog-python-video-editing\/Blog-python-video-editing.jpg?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python Video Editing and Optimization\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/dc4e70df8d22a9cfdad676a82fa92a73\",\"name\":\"sharonyelenik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6565cdd768a04e9b6ea3932764886209dd9de8baeeef1504eaad8fe776677f92?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6565cdd768a04e9b6ea3932764886209dd9de8baeeef1504eaad8fe776677f92?s=96&d=mm&r=g\",\"caption\":\"sharonyelenik\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Python Video Editing and Optimization","description":"Automate video editing and optimization with Python and Cloudinary, and access capabilities such as MoviePY and other powerful libraries.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization","og_locale":"en_US","og_type":"article","og_title":"Python Video Editing and Optimization","og_description":"Automate video editing and optimization with Python and Cloudinary, and access capabilities such as MoviePY and other powerful libraries.","og_url":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization","og_site_name":"Cloudinary Blog","article_published_time":"2023-05-11T14:00:00+00:00","article_modified_time":"2025-11-26T23:38:26+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683328665\/Blog-python-video-editing\/Blog-python-video-editing.jpg?_i=AA","type":"image\/jpeg"}],"author":"sharonyelenik","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization"},"author":{"name":"sharonyelenik","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/dc4e70df8d22a9cfdad676a82fa92a73"},"headline":"Python Video Editing and Optimization","datePublished":"2023-05-11T14:00:00+00:00","dateModified":"2025-11-26T23:38:26+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization"},"wordCount":946,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683328665\/Blog-python-video-editing\/Blog-python-video-editing.jpg?_i=AA","keywords":["Optimize","Video"],"inLanguage":"en-US","copyrightYear":"2023","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization","url":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization","name":"Python Video Editing and Optimization","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683328665\/Blog-python-video-editing\/Blog-python-video-editing.jpg?_i=AA","datePublished":"2023-05-11T14:00:00+00:00","dateModified":"2025-11-26T23:38:26+00:00","description":"Automate video editing and optimization with Python and Cloudinary, and access capabilities such as MoviePY and other powerful libraries.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/python-video-editing-optimization"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683328665\/Blog-python-video-editing\/Blog-python-video-editing.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683328665\/Blog-python-video-editing\/Blog-python-video-editing.jpg?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/python-video-editing-optimization#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python Video Editing and Optimization"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/dc4e70df8d22a9cfdad676a82fa92a73","name":"sharonyelenik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6565cdd768a04e9b6ea3932764886209dd9de8baeeef1504eaad8fe776677f92?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6565cdd768a04e9b6ea3932764886209dd9de8baeeef1504eaad8fe776677f92?s=96&d=mm&r=g","caption":"sharonyelenik"}}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1683328665\/Blog-python-video-editing\/Blog-python-video-editing.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/28811","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=28811"}],"version-history":[{"count":59,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/28811\/revisions"}],"predecessor-version":[{"id":39419,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/28811\/revisions\/39419"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/28899"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=28811"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=28811"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=28811"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}