{"id":39196,"date":"2025-11-08T02:07:28","date_gmt":"2025-11-08T10:07:28","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=39196"},"modified":"2025-11-08T02:07:29","modified_gmt":"2025-11-08T10:07:29","slug":"how-to-cut-a-video-by-time-with-ffmpeg","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/","title":{"rendered":"How to cut a video by time with FFmpeg"},"content":{"rendered":"\n<p>Trimming a clip to a specific start and end time is one of those everyday developer tasks that pops up in video workflows, CI jobs, and batch scripts. If you have ever clipped intros, grabbed highlights, or split long recordings, you have probably run into FFmpeg flags that look similar but behave differently.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Question:<\/h2>\n\n\n\n<p><em>Hi all,<\/em><br><em>I have a long MP4 and I need to extract a specific segment without messing up audio sync or re-encoding unless I must. What is the correct command and the common pitfalls?<\/em><br><em>In short: how to cut a video by time with FFmpeg, including fast keyframe-based cuts and frame-accurate trims, and what flags should I use for best results?<\/em><br><em>Thanks!<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Answer:<\/h2>\n\n\n\n<p>FFmpeg offers two primary approaches for time-based cuts. Let\u2019s break them down:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Fast cut without re-encoding<\/h3>\n\n\n\n<p>Use stream copy for speed. This is ideal when you can start on or near a keyframe and accept slight inaccuracy at the first frame.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css shcb-wrap-lines\"># <span class=\"hljs-selector-tag\">Cut<\/span> <span class=\"hljs-selector-tag\">from<\/span> 3<span class=\"hljs-selector-tag\">s<\/span> <span class=\"hljs-selector-tag\">to<\/span> 10<span class=\"hljs-selector-tag\">s<\/span> (<span class=\"hljs-selector-tag\">duration<\/span> 7<span class=\"hljs-selector-tag\">s<\/span>) <span class=\"hljs-selector-tag\">using<\/span> <span class=\"hljs-selector-tag\">stream<\/span> <span class=\"hljs-selector-tag\">copy<\/span>\n<span class=\"hljs-selector-tag\">ffmpeg<\/span> <span class=\"hljs-selector-tag\">-ss<\/span> 3 <span class=\"hljs-selector-tag\">-i<\/span> <span class=\"hljs-selector-tag\">input<\/span><span class=\"hljs-selector-class\">.mp4<\/span> <span class=\"hljs-selector-tag\">-t<\/span> 7 <span class=\"hljs-selector-tag\">-c<\/span> <span class=\"hljs-selector-tag\">copy<\/span> <span class=\"hljs-selector-tag\">-avoid_negative_ts<\/span> <span class=\"hljs-selector-tag\">make_zero<\/span> <span class=\"hljs-selector-tag\">cut-fast<\/span><span class=\"hljs-selector-class\">.mp4<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pros: <\/strong>Instant, no quality loss, low CPU.<\/li>\n\n\n\n<li><strong>Cons: <\/strong>Start may snap to the previous keyframe, which can be a few frames early.<\/li>\n<\/ul>\n\n\n\n<p><strong>Tip: <\/strong>If your container or codecs are not friendly to stream copy at arbitrary points, re-encode the video and audio instead of using <code>-c copy<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2) Frame-accurate trimming with re-encoding<\/h3>\n\n\n\n<p>Place <code>-ss<\/code> after the input for accuracy and re-encode. Use <code>-t<\/code> for duration or <code>-to<\/code> for an absolute end time.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css shcb-wrap-lines\"># <span class=\"hljs-selector-tag\">Accurate<\/span>: <span class=\"hljs-selector-tag\">from<\/span> 3<span class=\"hljs-selector-tag\">s<\/span> <span class=\"hljs-selector-tag\">to<\/span> 10<span class=\"hljs-selector-tag\">s<\/span> <span class=\"hljs-selector-tag\">by<\/span> <span class=\"hljs-selector-tag\">re-encoding<\/span>\n<span class=\"hljs-selector-tag\">ffmpeg<\/span> <span class=\"hljs-selector-tag\">-i<\/span> <span class=\"hljs-selector-tag\">input<\/span><span class=\"hljs-selector-class\">.mp4<\/span> <span class=\"hljs-selector-tag\">-ss<\/span> 3 <span class=\"hljs-selector-tag\">-to<\/span> 10 \\\n\u00a0 <span class=\"hljs-selector-tag\">-c<\/span><span class=\"hljs-selector-pseudo\">:v<\/span> <span class=\"hljs-selector-tag\">libx264<\/span> <span class=\"hljs-selector-tag\">-crf<\/span> 20 <span class=\"hljs-selector-tag\">-preset<\/span> <span class=\"hljs-selector-tag\">veryfast<\/span> \\\n\u00a0 <span class=\"hljs-selector-tag\">-c<\/span><span class=\"hljs-selector-pseudo\">:a<\/span> <span class=\"hljs-selector-tag\">aac<\/span> <span class=\"hljs-selector-tag\">-movflags<\/span> +<span class=\"hljs-selector-tag\">faststart<\/span> <span class=\"hljs-selector-tag\">cut-accurate<\/span><span class=\"hljs-selector-class\">.mp4<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li><code>-crf<\/code> controls visual quality for H.264: lower is higher quality. 18 to 23 is common.<\/li>\n\n\n\n<li><code>-preset <\/code>trades speed for efficiency. veryfast through slow are typical picks.<\/li>\n\n\n\n<li><code>-movflags +faststart<\/code> optimizes MP4 playback over the web.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Time syntax and variations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Times can be seconds or HH:MM:SS.xx<\/li>\n\n\n\n<li>Using duration: <code>-ss 00:00:03 -t 7<\/code><\/li>\n\n\n\n<li>Using end time: <code>-ss 00:00:03 -to 00:00:10<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Keep all streams or select specific ones<\/h3>\n\n\n\n<p>To preserve all streams including audio, subtitles, and data:<\/p>\n\n\n\n<p><code>ffmpeg -ss 3 -i input.mkv -t 7 -map 0 -c copy cut-all-streams.mkv<\/code><\/p>\n\n\n\n<p>If changing containers, ensure target formats support the codecs you keep. For background on FFmpeg concepts and tradeoffs, see <a href=\"https:\/\/cloudinary.com\/guides\/video-formats\/ffmpeg-features-use-cases-and-pros-cons-you-should-know\">FFmpeg features, pros and cons<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A few practical tips<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If audio drifts, prefer re-encoding with <code>-ss<\/code> after <code>-i<\/code>.<\/li>\n\n\n\n<li>For batch clipping, wrap these commands in a shell or Python script and feed in start and end times from a CSV or JSON.<\/li>\n\n\n\n<li>If you need the first output frame to be the exact requested frame, re-encode. Keyframe-aligned cuts are fast but approximate.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Do it in the cloud with on-the-fly delivery<\/h3>\n\n\n\n<p>If you want to trim without maintaining your own servers or pipelines, you can generate segments at request time using a media platform. For example, with Cloudinary you can transform and deliver clips via a URL or API, and pair the trim with format conversion, bitrate control, or thumbnail generation.<\/p>\n\n\n\n<p>Example: trim 7 seconds starting at 3 seconds using a delivery URL: <\/p>\n\n\n\n<p><a href=\"https:\/\/res.cloudinary.com\/demo\/video\/upload\/so_3,du_7\/sample.mp4\"><code>https:\/\/res.cloudinary.com\/demo\/video\/upload\/so_3,du_7\/sample.mp4<\/code><\/a><\/p>\n\n\n\n<p>Programmatic example using a Node SDK pattern:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-comment\">\/\/ Build a trimmed delivery URL<\/span>\n<span class=\"hljs-comment\">\/\/ start_offset: 3 seconds, duration: 7 seconds<\/span>\n<span class=\"hljs-keyword\">const<\/span> url = cloudinary.url(<span class=\"hljs-string\">'sample'<\/span>, {\n\u00a0 <span class=\"hljs-attr\">resource_type<\/span>: <span class=\"hljs-string\">'video'<\/span>,\n\u00a0 <span class=\"hljs-attr\">transformation<\/span>: &#91;{ <span class=\"hljs-attr\">start_offset<\/span>: <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-attr\">duration<\/span>: <span class=\"hljs-number\">7<\/span>, <span class=\"hljs-attr\">fetch_format<\/span>: <span class=\"hljs-string\">'mp4'<\/span> }]\n});\n<span class=\"hljs-comment\">\/\/ Use this URL in your player or return it from your API.<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><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>This approach offloads encoding and caching, helps standardize outputs, and works well when you dynamically clip highlights or social cuts at scale.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Troubleshooting checklist<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Output length wrong:<\/strong> Make sure you aren\u2019t mixing <code>-to<\/code> and <code>-t<\/code> in confusing ways. Use one or the other.<\/li>\n\n\n\n<li><strong>No audio or missing subtitles:<\/strong> Add <code>-map 0<\/code> to keep all streams or map them explicitly.<\/li>\n\n\n\n<li><strong>Poor quality after re-encode:<\/strong> Adjust <code>-crf<\/code>, <code>-preset<\/code>, or choose a different codec depending on your delivery needs.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">TL;DR<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Need speed and no re-encode: <code>ffmpeg -ss START -i in -t DURATION -c copy out.mp4<\/code> but accept keyframe-based starts.<\/li>\n\n\n\n<li>Need frame accuracy: Put <code>-ss<\/code> after <code>-i<\/code> and re-encode video and audio.<\/li>\n\n\n\n<li>Use <code>-map 0<\/code> to keep all streams and <code>-movflags +faststart<\/code> for web playback.<\/li>\n\n\n\n<li>Cloudinary can trim on the fly and combine with transcoding, thumbnails, and caching.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Learn More<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/cloudinary.com\/tools\/webm-to-mp4\">WebM to MP4 Converter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/tools\/mkv-to-mp4\">MKV to MP4 Converter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/guides\/video\/video-as-a-service\">Video as a Service<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/guides\/video\/video-engineering\">Video Engineering<\/a><\/li>\n<\/ul>\n\n\n\n<p>Ready to trim, transcode, and deliver video at scale with on-the-fly transformations? <a href=\"https:\/\/cloudinary.com\/users\/register_free\">Sign up for a free Cloudinary account<\/a> and start optimizing your video workflow today.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trimming a clip to a specific start and end time is one of those everyday developer tasks that pops up in video workflows, CI jobs, and batch scripts. If you have ever clipped intros, grabbed highlights, or split long recordings, you have probably run into FFmpeg flags that look similar but behave differently.&nbsp; Question: Hi [&hellip;]<\/p>\n","protected":false},"author":88,"featured_media":39197,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[423],"class_list":["post-39196","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-questions"],"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>How to cut a video by time with FFmpeg<\/title>\n<meta name=\"description\" content=\"Trimming a clip to a specific start and end time is one of those everyday developer tasks that pops up in video workflows, CI jobs, and batch scripts. If\" \/>\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\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to cut a video by time with FFmpeg\" \/>\n<meta property=\"og:description\" content=\"Trimming a clip to a specific start and end time is one of those everyday developer tasks that pops up in video workflows, CI jobs, and batch scripts. If\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-08T10:07:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-08T10:07:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1762596430\/how_to_cut_a_video_by_time_using_ffmpeg\/how_to_cut_a_video_by_time_using_ffmpeg.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=\"damjanantevski\" \/>\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\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/\"},\"author\":{\"name\":\"damjanantevski\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e\"},\"headline\":\"How to cut a video by time with FFmpeg\",\"datePublished\":\"2025-11-08T10:07:28+00:00\",\"dateModified\":\"2025-11-08T10:07:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/\"},\"wordCount\":607,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1762596430\/how_to_cut_a_video_by_time_using_ffmpeg\/how_to_cut_a_video_by_time_using_ffmpeg.jpg?_i=AA\",\"keywords\":[\"Questions\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/\",\"url\":\"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/\",\"name\":\"How to cut a video by time with FFmpeg\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1762596430\/how_to_cut_a_video_by_time_using_ffmpeg\/how_to_cut_a_video_by_time_using_ffmpeg.jpg?_i=AA\",\"datePublished\":\"2025-11-08T10:07:28+00:00\",\"dateModified\":\"2025-11-08T10:07:29+00:00\",\"description\":\"Trimming a clip to a specific start and end time is one of those everyday developer tasks that pops up in video workflows, CI jobs, and batch scripts. If\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1762596430\/how_to_cut_a_video_by_time_using_ffmpeg\/how_to_cut_a_video_by_time_using_ffmpeg.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1762596430\/how_to_cut_a_video_by_time_using_ffmpeg\/how_to_cut_a_video_by_time_using_ffmpeg.jpg?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to cut a video by time with FFmpeg\"}]},{\"@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\/43592e43c12520a1e867d456b1e8cf7e\",\"name\":\"damjanantevski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g\",\"caption\":\"damjanantevski\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to cut a video by time with FFmpeg","description":"Trimming a clip to a specific start and end time is one of those everyday developer tasks that pops up in video workflows, CI jobs, and batch scripts. If","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\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/","og_locale":"en_US","og_type":"article","og_title":"How to cut a video by time with FFmpeg","og_description":"Trimming a clip to a specific start and end time is one of those everyday developer tasks that pops up in video workflows, CI jobs, and batch scripts. If","og_url":"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/","og_site_name":"Cloudinary Blog","article_published_time":"2025-11-08T10:07:28+00:00","article_modified_time":"2025-11-08T10:07:29+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1762596430\/how_to_cut_a_video_by_time_using_ffmpeg\/how_to_cut_a_video_by_time_using_ffmpeg.jpg?_i=AA","type":"image\/jpeg"}],"author":"damjanantevski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/"},"author":{"name":"damjanantevski","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e"},"headline":"How to cut a video by time with FFmpeg","datePublished":"2025-11-08T10:07:28+00:00","dateModified":"2025-11-08T10:07:29+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/"},"wordCount":607,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1762596430\/how_to_cut_a_video_by_time_using_ffmpeg\/how_to_cut_a_video_by_time_using_ffmpeg.jpg?_i=AA","keywords":["Questions"],"inLanguage":"en-US","copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/","url":"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/","name":"How to cut a video by time with FFmpeg","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1762596430\/how_to_cut_a_video_by_time_using_ffmpeg\/how_to_cut_a_video_by_time_using_ffmpeg.jpg?_i=AA","datePublished":"2025-11-08T10:07:28+00:00","dateModified":"2025-11-08T10:07:29+00:00","description":"Trimming a clip to a specific start and end time is one of those everyday developer tasks that pops up in video workflows, CI jobs, and batch scripts. If","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1762596430\/how_to_cut_a_video_by_time_using_ffmpeg\/how_to_cut_a_video_by_time_using_ffmpeg.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1762596430\/how_to_cut_a_video_by_time_using_ffmpeg\/how_to_cut_a_video_by_time_using_ffmpeg.jpg?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/questions\/how-to-cut-a-video-by-time-with-ffmpeg\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to cut a video by time with FFmpeg"}]},{"@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\/43592e43c12520a1e867d456b1e8cf7e","name":"damjanantevski","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g","caption":"damjanantevski"}}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1762596430\/how_to_cut_a_video_by_time_using_ffmpeg\/how_to_cut_a_video_by_time_using_ffmpeg.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/39196","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\/88"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=39196"}],"version-history":[{"count":1,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/39196\/revisions"}],"predecessor-version":[{"id":39198,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/39196\/revisions\/39198"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/39197"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=39196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=39196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=39196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}