How can I use ffmpeg to split MPEG video into 10 minute chunks?2019 Community Moderator ElectionFFMPEG video to FLV conversion optimizationSplit video file into pieces with ffmpegFFmpeg - Split video multiple partsHow to use a wildcard in FFMPEG?How to split and join without transcoding AVC/MPEG-TS video files?How to encrypt the ffmpeg output when generating video chunks?How to transcode audio of video with ffmpeg?How to stream a local video to webcam using ffmpeg?How I can to cut line segment video with ffmpeg?Splitting up a pcm file into minute using ffmpeg long chunks

Calculating Wattage for Resistor in High Frequency Application?

Why electric field inside a cavity of a non-conducting sphere not zero?

What should you do if you miss a job interview (deliberately)?

Did arcade monitors have same pixel aspect ratio as TV sets?

Delivering sarcasm

Is it possible to have a strip of cold climate in the middle of a planet?

Creature in Shazam mid-credits scene?

Is it improper etiquette to ask your opponent what his/her rating is before the game?

What is the evidence for the "tyranny of the majority problem" in a direct democracy context?

How should I respond when I lied about my education and the company finds out through background check?

What should you do when eye contact makes your subordinate uncomfortable?

Melting point of aspirin, contradicting sources

Travelling outside the UK without a passport

Why is so much work done on numerical verification of the Riemann Hypothesis?

Is it safe to use olive oil to clean the ear wax?

What does chmod -u do?

Energy measurement from position eigenstate

Does an advisor owe his/her student anything? Will an advisor keep a PhD student only out of pity?

Where does the bonus feat in the cleric starting package come from?

On a tidally locked planet, would time be quantized?

How do you make your own symbol when Detexify fails?

Redundant comparison & "if" before assignment

Is there a name for this algorithm to calculate the concentration of a mixture of two solutions containing the same solute?

The screen of my macbook suddenly broken down how can I do to recover



How can I use ffmpeg to split MPEG video into 10 minute chunks?



2019 Community Moderator ElectionFFMPEG video to FLV conversion optimizationSplit video file into pieces with ffmpegFFmpeg - Split video multiple partsHow to use a wildcard in FFMPEG?How to split and join without transcoding AVC/MPEG-TS video files?How to encrypt the ffmpeg output when generating video chunks?How to transcode audio of video with ffmpeg?How to stream a local video to webcam using ffmpeg?How I can to cut line segment video with ffmpeg?Splitting up a pcm file into minute using ffmpeg long chunks










51















There is often a need in the open source or active developer community to publish large video segments online. (Meet-up videos, campouts, tech talks...) Being that I am a developer and not a videographer I have no desire to fork out the extra scratch on a premium Vimeo account. How then do I take a 12.5 GB (1:20:00) MPEG tech talk video and slice it into 00:10:00 segments for easy uploading to video sharing sites?










share|improve this question
























  • Special thanks to @StevenD for accommodating the new tags.

    – Gabriel
    Sep 6 '10 at 17:24















51















There is often a need in the open source or active developer community to publish large video segments online. (Meet-up videos, campouts, tech talks...) Being that I am a developer and not a videographer I have no desire to fork out the extra scratch on a premium Vimeo account. How then do I take a 12.5 GB (1:20:00) MPEG tech talk video and slice it into 00:10:00 segments for easy uploading to video sharing sites?










share|improve this question
























  • Special thanks to @StevenD for accommodating the new tags.

    – Gabriel
    Sep 6 '10 at 17:24













51












51








51


19






There is often a need in the open source or active developer community to publish large video segments online. (Meet-up videos, campouts, tech talks...) Being that I am a developer and not a videographer I have no desire to fork out the extra scratch on a premium Vimeo account. How then do I take a 12.5 GB (1:20:00) MPEG tech talk video and slice it into 00:10:00 segments for easy uploading to video sharing sites?










share|improve this question
















There is often a need in the open source or active developer community to publish large video segments online. (Meet-up videos, campouts, tech talks...) Being that I am a developer and not a videographer I have no desire to fork out the extra scratch on a premium Vimeo account. How then do I take a 12.5 GB (1:20:00) MPEG tech talk video and slice it into 00:10:00 segments for easy uploading to video sharing sites?







ffmpeg video-editing






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 21 '14 at 1:05









Braiam

23.7k2077142




23.7k2077142










asked Sep 6 '10 at 16:16









GabrielGabriel

358138




358138












  • Special thanks to @StevenD for accommodating the new tags.

    – Gabriel
    Sep 6 '10 at 17:24

















  • Special thanks to @StevenD for accommodating the new tags.

    – Gabriel
    Sep 6 '10 at 17:24
















Special thanks to @StevenD for accommodating the new tags.

– Gabriel
Sep 6 '10 at 17:24





Special thanks to @StevenD for accommodating the new tags.

– Gabriel
Sep 6 '10 at 17:24










7 Answers
7






active

oldest

votes


















56














$ ffmpeg -i source-file.foo -ss 0 -t 600 first-10-min.m4v
$ ffmpeg -i source-file.foo -ss 600 -t 600 second-10-min.m4v
$ ffmpeg -i source-file.foo -ss 1200 -t 600 third-10-min.m4v
...


Wrapping this up into a script to do it in a loop wouldn't be hard.



Beware that if you try to calculate the number of iterations based on the duration output from an ffprobe call that this is estimated from the average bit rate at the start of the clip and the clip's file size unless you give the -count_frames argument, which slows its operation considerably.



Another thing to be aware of is that the position of the -ss option on the command line matters. Where I have it now is slow but accurate. The first version of this answer gave the fast but inaccurate alternative. The linked article also describes a mostly-fast-but-still-accurate alternative, which you pay for with a bit of complexity.



All that aside, I don't think you really want to be cutting at exactly 10 minutes for each clip. That will put cuts right in the middle of sentences, even words. I think you should be using a video editor or player to find natural cut points just shy of 10 minutes apart.



Assuming your file is in a format that YouTube can accept directly, you don't have to reencode to get segments. Just pass the natural cut point offsets to ffmpeg, telling it to pass the encoded A/V through untouched by using the "copy" codec:



$ ffmpeg -i source.m4v -ss 0 -t 593.3 -c copy part1.m4v
$ ffmpeg -i source.m4v -ss 593.3 -t 551.64 -c copy part2.m4v
$ ffmpeg -i source.m4v -ss 1144.94 -t 581.25 -c copy part3.m4v
...


The -c copy argument tells it to copy all input streams (audio, video, and potentially others, such as subtitles) into the output as-is. For simple A/V programs, it is equivalent to the more verbose flags -c:v copy -c:a copy or the old-style flags -vcodec copy -acodec copy. You would use the more verbose style when you want to copy only one of the streams, but re-encode the other. For example, many years ago there was a common practice with QuickTime files to compress the video with H.264 video but leave the audio as uncompressed PCM; if you ran across such a file today, you could modernize it with -c:v copy -c:a aac to reprocess just the audio stream, leaving the video untouched.



The start point for every command above after the first is the previous command's start point plus the previous command's duration.






share|improve this answer




















  • 1





    "cutting at exactly 10 minutes for each clip" is a good point.

    – Chris
    Sep 7 '10 at 11:42











  • maybe by using the -show_packets param you can make it more accurate.

    – rogerdpack
    Jun 13 '11 at 21:36











  • I said it in the answer: "using a video editor or player." Load the video file up in one, scrub to near the 10 minute mark, then look for a reasonable place to cut. Record the time showing on the timecode display. Move forward another 10-minutes-minus-a-skosh. Repeat until done.

    – Warren Young
    Sep 14 '12 at 21:47












  • how to put above in a loop?

    – kRazzy R
    Dec 6 '17 at 19:32











  • i Use this cmd ya it split into right but Now the video and audio are not on SYNC any help

    – Sunil Chaudhary
    Mar 16 '18 at 6:08


















41














Here is the one line solution:



ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment output%03d.mp4


Please note that this does not give you accurate splits, but should fit your needs. It will instead cut at the first frame after the time specified after segment_time, in the code above it would be after the 20 minute mark.



If you find that only the first chunk is playable, try adding -reset_timestamps 1 as mentioned in the comments.



ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 output%03d.mp4





share|improve this answer




















  • 2





    It actually gives you very accurate splits, if you value video quality. Rather than splitting based on a particular time, it splits on the nearest keyframe following the requested time, so each new segment always starts with a keyframe.

    – Malvineous
    Feb 25 '17 at 6:51






  • 3





    what are the units? 8s? 8min? 8h?

    – user1133275
    Mar 20 '17 at 20:58






  • 1





    @user1133275 its second

    – Jon
    Mar 20 '17 at 21:11






  • 2





    On Mac, I found that this resulted in N output video chunks but only the 1st of them was a valid, viewable MP4. The other N-1 chunks were blank video (all black) with no audio. To make it work, I needed to add the reset_timestamps flag like so: ffmpeg -i input.mp4 -c copy -map 0 -segment_time 8 -f segment -reset_timestamps 1 output%03d.mp4.

    – jarmod
    Jun 5 '17 at 15:32






  • 2





    found that adding -reset_timestamps 1 fixes the issue for me

    – jlarsch
    Oct 30 '17 at 8:27


















6














Faced the same problem earlier and put together a simple Python script to do just that (using FFMpeg). Available here: https://github.com/c0decracker/video-splitter, and pasted below:



#!/usr/bin/env python
import subprocess
import re
import math
from optparse import OptionParser
length_regexp = 'Duration: (d2):(d2):(d2).d+,'
re_length = re.compile(length_regexp)
def main():
(filename, split_length) = parse_options()
if split_length <= 0:
print "Split length can't be 0"
raise SystemExit
output = subprocess.Popen("ffmpeg -i '"+filename+"' 2>&1 | grep 'Duration'",
shell = True,
stdout = subprocess.PIPE
).stdout.read()
print output
matches = re_length.search(output)
if matches:
video_length = int(matches.group(1)) * 3600 +
int(matches.group(2)) * 60 +
int(matches.group(3))
print "Video length in seconds: "+str(video_length)
else:
print "Can't determine video length."
raise SystemExit
split_count = int(math.ceil(video_length/float(split_length)))
if(split_count == 1):
print "Video length is less then the target split length."
raise SystemExit
split_cmd = "ffmpeg -i '"+filename+"' -vcodec copy "
for n in range(0, split_count):
split_str = ""
if n == 0:
split_start = 0
else:
split_start = split_length * n
split_str += " -ss "+str(split_start)+" -t "+str(split_length) +
" '"+filename[:-4] + "-" + str(n) + "." + filename[-3:] +
"'"
print "About to run: "+split_cmd+split_str
output = subprocess.Popen(split_cmd+split_str, shell = True, stdout =
subprocess.PIPE).stdout.read()
def parse_options():
parser = OptionParser()
parser.add_option("-f", "--file",
dest = "filename",
help = "file to split, for example sample.avi",
type = "string",
action = "store"
)
parser.add_option("-s", "--split-size",
dest = "split_size",
help = "split or chunk size in seconds, for example 10",
type = "int",
action = "store"
)
(options, args) = parser.parse_args()
if options.filename and options.split_size:
return (options.filename, options.split_size)
else:
parser.print_help()
raise SystemExit
if __name__ == '__main__':
try:
main()
except Exception, e:
print "Exception occured running main():"
print str(e)





share|improve this answer




















  • 1





    Next time do this please in a comment. Link-only answers aren't really liked here, and the same if you advert your site. If it is an opensource project with source code, maybe it is an exception, but I now risked my reviewing privileges by not voting for the removal of your answer. And yes, you can't post comments, but after you collected 5 upvotes (which seems very fast in your case) you will.

    – peterh
    Nov 21 '14 at 0:40












  • Hi and welcome to the site. Please don't post link only answers. While your script itself would probably make a great answer, a link to it is not an answer. It is a signpost pointing to an answer. More on that here. Since you kindly gave the link, I went ahead and included the script in the body of your answer. If you object to that, please delete the answer altogether.

    – terdon
    Nov 21 '14 at 1:54


















2














Note the exact punctuation of the alternative format is -ss mm:ss.xxx. I struggled for hours trying to use the intuitive-but-wrong mm:ss:xx to no avail.



$ man ffmpeg | grep -C1 position



-ss position

Seek to given time position in seconds. "hh:mm:ss[.xxx]" syntax is also supported.




References here and here.






share|improve this answer
































    2














    If you want to create really same Chunks must force ffmpeg to create i-frame on the every chunks' first frame so you can use this command for create 0.5 second chunk.



    ffmpeg -hide_banner -err_detect ignore_err -i input.mp4 -r 24 -codec:v libx264 -vsync 1 -codec:a aac -ac 2 -ar 48k -f segment -preset fast -segment_format mpegts -segment_time 0.5 -force_key_frames "expr: gte(t, n_forced * 0.5)" out%d.mkv





    share|improve this answer






























      0














      An Alternate more readable way would be



      ffmpeg -i input.mp4 -ss 00:00:00 -to 00:10:00 -c copy output1.mp4
      ffmpeg -i input.mp4 -ss 00:10:00 -to 00:20:00 -c copy output2.mp4

      /**
      * -i input file
      * -ss start time in seconds or in hh:mm:ss
      * -to end time in seconds or in hh:mm:ss
      * -c codec to use
      */


      Here's the source and list of Commonly used FFmpeg commands.






      share|improve this answer








      New contributor




      Niket Pathak is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.



























        -2














        You shouldn't really be following any of the answers in this thread, instead just use what is built into ffmpeg to do exactly this.



        ffmpeg -i invid.mp4 -threads 3 -vcodec copy -f segment -segment_time 2 cam_out_h264%04d.mp4


        This will split it into roughly 2 second chucks, split at the relevant keyframes, and will output to the files
        cam_out_h2640001.mp4, cam_out_h2640002.mp4, etc.






        share|improve this answer
























          Your Answer








          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "106"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f1670%2fhow-can-i-use-ffmpeg-to-split-mpeg-video-into-10-minute-chunks%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          7 Answers
          7






          active

          oldest

          votes








          7 Answers
          7






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          56














          $ ffmpeg -i source-file.foo -ss 0 -t 600 first-10-min.m4v
          $ ffmpeg -i source-file.foo -ss 600 -t 600 second-10-min.m4v
          $ ffmpeg -i source-file.foo -ss 1200 -t 600 third-10-min.m4v
          ...


          Wrapping this up into a script to do it in a loop wouldn't be hard.



          Beware that if you try to calculate the number of iterations based on the duration output from an ffprobe call that this is estimated from the average bit rate at the start of the clip and the clip's file size unless you give the -count_frames argument, which slows its operation considerably.



          Another thing to be aware of is that the position of the -ss option on the command line matters. Where I have it now is slow but accurate. The first version of this answer gave the fast but inaccurate alternative. The linked article also describes a mostly-fast-but-still-accurate alternative, which you pay for with a bit of complexity.



          All that aside, I don't think you really want to be cutting at exactly 10 minutes for each clip. That will put cuts right in the middle of sentences, even words. I think you should be using a video editor or player to find natural cut points just shy of 10 minutes apart.



          Assuming your file is in a format that YouTube can accept directly, you don't have to reencode to get segments. Just pass the natural cut point offsets to ffmpeg, telling it to pass the encoded A/V through untouched by using the "copy" codec:



          $ ffmpeg -i source.m4v -ss 0 -t 593.3 -c copy part1.m4v
          $ ffmpeg -i source.m4v -ss 593.3 -t 551.64 -c copy part2.m4v
          $ ffmpeg -i source.m4v -ss 1144.94 -t 581.25 -c copy part3.m4v
          ...


          The -c copy argument tells it to copy all input streams (audio, video, and potentially others, such as subtitles) into the output as-is. For simple A/V programs, it is equivalent to the more verbose flags -c:v copy -c:a copy or the old-style flags -vcodec copy -acodec copy. You would use the more verbose style when you want to copy only one of the streams, but re-encode the other. For example, many years ago there was a common practice with QuickTime files to compress the video with H.264 video but leave the audio as uncompressed PCM; if you ran across such a file today, you could modernize it with -c:v copy -c:a aac to reprocess just the audio stream, leaving the video untouched.



          The start point for every command above after the first is the previous command's start point plus the previous command's duration.






          share|improve this answer




















          • 1





            "cutting at exactly 10 minutes for each clip" is a good point.

            – Chris
            Sep 7 '10 at 11:42











          • maybe by using the -show_packets param you can make it more accurate.

            – rogerdpack
            Jun 13 '11 at 21:36











          • I said it in the answer: "using a video editor or player." Load the video file up in one, scrub to near the 10 minute mark, then look for a reasonable place to cut. Record the time showing on the timecode display. Move forward another 10-minutes-minus-a-skosh. Repeat until done.

            – Warren Young
            Sep 14 '12 at 21:47












          • how to put above in a loop?

            – kRazzy R
            Dec 6 '17 at 19:32











          • i Use this cmd ya it split into right but Now the video and audio are not on SYNC any help

            – Sunil Chaudhary
            Mar 16 '18 at 6:08















          56














          $ ffmpeg -i source-file.foo -ss 0 -t 600 first-10-min.m4v
          $ ffmpeg -i source-file.foo -ss 600 -t 600 second-10-min.m4v
          $ ffmpeg -i source-file.foo -ss 1200 -t 600 third-10-min.m4v
          ...


          Wrapping this up into a script to do it in a loop wouldn't be hard.



          Beware that if you try to calculate the number of iterations based on the duration output from an ffprobe call that this is estimated from the average bit rate at the start of the clip and the clip's file size unless you give the -count_frames argument, which slows its operation considerably.



          Another thing to be aware of is that the position of the -ss option on the command line matters. Where I have it now is slow but accurate. The first version of this answer gave the fast but inaccurate alternative. The linked article also describes a mostly-fast-but-still-accurate alternative, which you pay for with a bit of complexity.



          All that aside, I don't think you really want to be cutting at exactly 10 minutes for each clip. That will put cuts right in the middle of sentences, even words. I think you should be using a video editor or player to find natural cut points just shy of 10 minutes apart.



          Assuming your file is in a format that YouTube can accept directly, you don't have to reencode to get segments. Just pass the natural cut point offsets to ffmpeg, telling it to pass the encoded A/V through untouched by using the "copy" codec:



          $ ffmpeg -i source.m4v -ss 0 -t 593.3 -c copy part1.m4v
          $ ffmpeg -i source.m4v -ss 593.3 -t 551.64 -c copy part2.m4v
          $ ffmpeg -i source.m4v -ss 1144.94 -t 581.25 -c copy part3.m4v
          ...


          The -c copy argument tells it to copy all input streams (audio, video, and potentially others, such as subtitles) into the output as-is. For simple A/V programs, it is equivalent to the more verbose flags -c:v copy -c:a copy or the old-style flags -vcodec copy -acodec copy. You would use the more verbose style when you want to copy only one of the streams, but re-encode the other. For example, many years ago there was a common practice with QuickTime files to compress the video with H.264 video but leave the audio as uncompressed PCM; if you ran across such a file today, you could modernize it with -c:v copy -c:a aac to reprocess just the audio stream, leaving the video untouched.



          The start point for every command above after the first is the previous command's start point plus the previous command's duration.






          share|improve this answer




















          • 1





            "cutting at exactly 10 minutes for each clip" is a good point.

            – Chris
            Sep 7 '10 at 11:42











          • maybe by using the -show_packets param you can make it more accurate.

            – rogerdpack
            Jun 13 '11 at 21:36











          • I said it in the answer: "using a video editor or player." Load the video file up in one, scrub to near the 10 minute mark, then look for a reasonable place to cut. Record the time showing on the timecode display. Move forward another 10-minutes-minus-a-skosh. Repeat until done.

            – Warren Young
            Sep 14 '12 at 21:47












          • how to put above in a loop?

            – kRazzy R
            Dec 6 '17 at 19:32











          • i Use this cmd ya it split into right but Now the video and audio are not on SYNC any help

            – Sunil Chaudhary
            Mar 16 '18 at 6:08













          56












          56








          56







          $ ffmpeg -i source-file.foo -ss 0 -t 600 first-10-min.m4v
          $ ffmpeg -i source-file.foo -ss 600 -t 600 second-10-min.m4v
          $ ffmpeg -i source-file.foo -ss 1200 -t 600 third-10-min.m4v
          ...


          Wrapping this up into a script to do it in a loop wouldn't be hard.



          Beware that if you try to calculate the number of iterations based on the duration output from an ffprobe call that this is estimated from the average bit rate at the start of the clip and the clip's file size unless you give the -count_frames argument, which slows its operation considerably.



          Another thing to be aware of is that the position of the -ss option on the command line matters. Where I have it now is slow but accurate. The first version of this answer gave the fast but inaccurate alternative. The linked article also describes a mostly-fast-but-still-accurate alternative, which you pay for with a bit of complexity.



          All that aside, I don't think you really want to be cutting at exactly 10 minutes for each clip. That will put cuts right in the middle of sentences, even words. I think you should be using a video editor or player to find natural cut points just shy of 10 minutes apart.



          Assuming your file is in a format that YouTube can accept directly, you don't have to reencode to get segments. Just pass the natural cut point offsets to ffmpeg, telling it to pass the encoded A/V through untouched by using the "copy" codec:



          $ ffmpeg -i source.m4v -ss 0 -t 593.3 -c copy part1.m4v
          $ ffmpeg -i source.m4v -ss 593.3 -t 551.64 -c copy part2.m4v
          $ ffmpeg -i source.m4v -ss 1144.94 -t 581.25 -c copy part3.m4v
          ...


          The -c copy argument tells it to copy all input streams (audio, video, and potentially others, such as subtitles) into the output as-is. For simple A/V programs, it is equivalent to the more verbose flags -c:v copy -c:a copy or the old-style flags -vcodec copy -acodec copy. You would use the more verbose style when you want to copy only one of the streams, but re-encode the other. For example, many years ago there was a common practice with QuickTime files to compress the video with H.264 video but leave the audio as uncompressed PCM; if you ran across such a file today, you could modernize it with -c:v copy -c:a aac to reprocess just the audio stream, leaving the video untouched.



          The start point for every command above after the first is the previous command's start point plus the previous command's duration.






          share|improve this answer















          $ ffmpeg -i source-file.foo -ss 0 -t 600 first-10-min.m4v
          $ ffmpeg -i source-file.foo -ss 600 -t 600 second-10-min.m4v
          $ ffmpeg -i source-file.foo -ss 1200 -t 600 third-10-min.m4v
          ...


          Wrapping this up into a script to do it in a loop wouldn't be hard.



          Beware that if you try to calculate the number of iterations based on the duration output from an ffprobe call that this is estimated from the average bit rate at the start of the clip and the clip's file size unless you give the -count_frames argument, which slows its operation considerably.



          Another thing to be aware of is that the position of the -ss option on the command line matters. Where I have it now is slow but accurate. The first version of this answer gave the fast but inaccurate alternative. The linked article also describes a mostly-fast-but-still-accurate alternative, which you pay for with a bit of complexity.



          All that aside, I don't think you really want to be cutting at exactly 10 minutes for each clip. That will put cuts right in the middle of sentences, even words. I think you should be using a video editor or player to find natural cut points just shy of 10 minutes apart.



          Assuming your file is in a format that YouTube can accept directly, you don't have to reencode to get segments. Just pass the natural cut point offsets to ffmpeg, telling it to pass the encoded A/V through untouched by using the "copy" codec:



          $ ffmpeg -i source.m4v -ss 0 -t 593.3 -c copy part1.m4v
          $ ffmpeg -i source.m4v -ss 593.3 -t 551.64 -c copy part2.m4v
          $ ffmpeg -i source.m4v -ss 1144.94 -t 581.25 -c copy part3.m4v
          ...


          The -c copy argument tells it to copy all input streams (audio, video, and potentially others, such as subtitles) into the output as-is. For simple A/V programs, it is equivalent to the more verbose flags -c:v copy -c:a copy or the old-style flags -vcodec copy -acodec copy. You would use the more verbose style when you want to copy only one of the streams, but re-encode the other. For example, many years ago there was a common practice with QuickTime files to compress the video with H.264 video but leave the audio as uncompressed PCM; if you ran across such a file today, you could modernize it with -c:v copy -c:a aac to reprocess just the audio stream, leaving the video untouched.



          The start point for every command above after the first is the previous command's start point plus the previous command's duration.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Sep 23 '16 at 15:24

























          answered Sep 6 '10 at 17:49









          Warren YoungWarren Young

          55.9k11143148




          55.9k11143148







          • 1





            "cutting at exactly 10 minutes for each clip" is a good point.

            – Chris
            Sep 7 '10 at 11:42











          • maybe by using the -show_packets param you can make it more accurate.

            – rogerdpack
            Jun 13 '11 at 21:36











          • I said it in the answer: "using a video editor or player." Load the video file up in one, scrub to near the 10 minute mark, then look for a reasonable place to cut. Record the time showing on the timecode display. Move forward another 10-minutes-minus-a-skosh. Repeat until done.

            – Warren Young
            Sep 14 '12 at 21:47












          • how to put above in a loop?

            – kRazzy R
            Dec 6 '17 at 19:32











          • i Use this cmd ya it split into right but Now the video and audio are not on SYNC any help

            – Sunil Chaudhary
            Mar 16 '18 at 6:08












          • 1





            "cutting at exactly 10 minutes for each clip" is a good point.

            – Chris
            Sep 7 '10 at 11:42











          • maybe by using the -show_packets param you can make it more accurate.

            – rogerdpack
            Jun 13 '11 at 21:36











          • I said it in the answer: "using a video editor or player." Load the video file up in one, scrub to near the 10 minute mark, then look for a reasonable place to cut. Record the time showing on the timecode display. Move forward another 10-minutes-minus-a-skosh. Repeat until done.

            – Warren Young
            Sep 14 '12 at 21:47












          • how to put above in a loop?

            – kRazzy R
            Dec 6 '17 at 19:32











          • i Use this cmd ya it split into right but Now the video and audio are not on SYNC any help

            – Sunil Chaudhary
            Mar 16 '18 at 6:08







          1




          1





          "cutting at exactly 10 minutes for each clip" is a good point.

          – Chris
          Sep 7 '10 at 11:42





          "cutting at exactly 10 minutes for each clip" is a good point.

          – Chris
          Sep 7 '10 at 11:42













          maybe by using the -show_packets param you can make it more accurate.

          – rogerdpack
          Jun 13 '11 at 21:36





          maybe by using the -show_packets param you can make it more accurate.

          – rogerdpack
          Jun 13 '11 at 21:36













          I said it in the answer: "using a video editor or player." Load the video file up in one, scrub to near the 10 minute mark, then look for a reasonable place to cut. Record the time showing on the timecode display. Move forward another 10-minutes-minus-a-skosh. Repeat until done.

          – Warren Young
          Sep 14 '12 at 21:47






          I said it in the answer: "using a video editor or player." Load the video file up in one, scrub to near the 10 minute mark, then look for a reasonable place to cut. Record the time showing on the timecode display. Move forward another 10-minutes-minus-a-skosh. Repeat until done.

          – Warren Young
          Sep 14 '12 at 21:47














          how to put above in a loop?

          – kRazzy R
          Dec 6 '17 at 19:32





          how to put above in a loop?

          – kRazzy R
          Dec 6 '17 at 19:32













          i Use this cmd ya it split into right but Now the video and audio are not on SYNC any help

          – Sunil Chaudhary
          Mar 16 '18 at 6:08





          i Use this cmd ya it split into right but Now the video and audio are not on SYNC any help

          – Sunil Chaudhary
          Mar 16 '18 at 6:08













          41














          Here is the one line solution:



          ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment output%03d.mp4


          Please note that this does not give you accurate splits, but should fit your needs. It will instead cut at the first frame after the time specified after segment_time, in the code above it would be after the 20 minute mark.



          If you find that only the first chunk is playable, try adding -reset_timestamps 1 as mentioned in the comments.



          ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 output%03d.mp4





          share|improve this answer




















          • 2





            It actually gives you very accurate splits, if you value video quality. Rather than splitting based on a particular time, it splits on the nearest keyframe following the requested time, so each new segment always starts with a keyframe.

            – Malvineous
            Feb 25 '17 at 6:51






          • 3





            what are the units? 8s? 8min? 8h?

            – user1133275
            Mar 20 '17 at 20:58






          • 1





            @user1133275 its second

            – Jon
            Mar 20 '17 at 21:11






          • 2





            On Mac, I found that this resulted in N output video chunks but only the 1st of them was a valid, viewable MP4. The other N-1 chunks were blank video (all black) with no audio. To make it work, I needed to add the reset_timestamps flag like so: ffmpeg -i input.mp4 -c copy -map 0 -segment_time 8 -f segment -reset_timestamps 1 output%03d.mp4.

            – jarmod
            Jun 5 '17 at 15:32






          • 2





            found that adding -reset_timestamps 1 fixes the issue for me

            – jlarsch
            Oct 30 '17 at 8:27















          41














          Here is the one line solution:



          ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment output%03d.mp4


          Please note that this does not give you accurate splits, but should fit your needs. It will instead cut at the first frame after the time specified after segment_time, in the code above it would be after the 20 minute mark.



          If you find that only the first chunk is playable, try adding -reset_timestamps 1 as mentioned in the comments.



          ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 output%03d.mp4





          share|improve this answer




















          • 2





            It actually gives you very accurate splits, if you value video quality. Rather than splitting based on a particular time, it splits on the nearest keyframe following the requested time, so each new segment always starts with a keyframe.

            – Malvineous
            Feb 25 '17 at 6:51






          • 3





            what are the units? 8s? 8min? 8h?

            – user1133275
            Mar 20 '17 at 20:58






          • 1





            @user1133275 its second

            – Jon
            Mar 20 '17 at 21:11






          • 2





            On Mac, I found that this resulted in N output video chunks but only the 1st of them was a valid, viewable MP4. The other N-1 chunks were blank video (all black) with no audio. To make it work, I needed to add the reset_timestamps flag like so: ffmpeg -i input.mp4 -c copy -map 0 -segment_time 8 -f segment -reset_timestamps 1 output%03d.mp4.

            – jarmod
            Jun 5 '17 at 15:32






          • 2





            found that adding -reset_timestamps 1 fixes the issue for me

            – jlarsch
            Oct 30 '17 at 8:27













          41












          41








          41







          Here is the one line solution:



          ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment output%03d.mp4


          Please note that this does not give you accurate splits, but should fit your needs. It will instead cut at the first frame after the time specified after segment_time, in the code above it would be after the 20 minute mark.



          If you find that only the first chunk is playable, try adding -reset_timestamps 1 as mentioned in the comments.



          ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 output%03d.mp4





          share|improve this answer















          Here is the one line solution:



          ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment output%03d.mp4


          Please note that this does not give you accurate splits, but should fit your needs. It will instead cut at the first frame after the time specified after segment_time, in the code above it would be after the 20 minute mark.



          If you find that only the first chunk is playable, try adding -reset_timestamps 1 as mentioned in the comments.



          ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:20:00 -f segment -reset_timestamps 1 output%03d.mp4






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Jan 18 at 18:52









          joelfischerr

          1032




          1032










          answered Jun 27 '15 at 1:39









          JonJon

          55248




          55248







          • 2





            It actually gives you very accurate splits, if you value video quality. Rather than splitting based on a particular time, it splits on the nearest keyframe following the requested time, so each new segment always starts with a keyframe.

            – Malvineous
            Feb 25 '17 at 6:51






          • 3





            what are the units? 8s? 8min? 8h?

            – user1133275
            Mar 20 '17 at 20:58






          • 1





            @user1133275 its second

            – Jon
            Mar 20 '17 at 21:11






          • 2





            On Mac, I found that this resulted in N output video chunks but only the 1st of them was a valid, viewable MP4. The other N-1 chunks were blank video (all black) with no audio. To make it work, I needed to add the reset_timestamps flag like so: ffmpeg -i input.mp4 -c copy -map 0 -segment_time 8 -f segment -reset_timestamps 1 output%03d.mp4.

            – jarmod
            Jun 5 '17 at 15:32






          • 2





            found that adding -reset_timestamps 1 fixes the issue for me

            – jlarsch
            Oct 30 '17 at 8:27












          • 2





            It actually gives you very accurate splits, if you value video quality. Rather than splitting based on a particular time, it splits on the nearest keyframe following the requested time, so each new segment always starts with a keyframe.

            – Malvineous
            Feb 25 '17 at 6:51






          • 3





            what are the units? 8s? 8min? 8h?

            – user1133275
            Mar 20 '17 at 20:58






          • 1





            @user1133275 its second

            – Jon
            Mar 20 '17 at 21:11






          • 2





            On Mac, I found that this resulted in N output video chunks but only the 1st of them was a valid, viewable MP4. The other N-1 chunks were blank video (all black) with no audio. To make it work, I needed to add the reset_timestamps flag like so: ffmpeg -i input.mp4 -c copy -map 0 -segment_time 8 -f segment -reset_timestamps 1 output%03d.mp4.

            – jarmod
            Jun 5 '17 at 15:32






          • 2





            found that adding -reset_timestamps 1 fixes the issue for me

            – jlarsch
            Oct 30 '17 at 8:27







          2




          2





          It actually gives you very accurate splits, if you value video quality. Rather than splitting based on a particular time, it splits on the nearest keyframe following the requested time, so each new segment always starts with a keyframe.

          – Malvineous
          Feb 25 '17 at 6:51





          It actually gives you very accurate splits, if you value video quality. Rather than splitting based on a particular time, it splits on the nearest keyframe following the requested time, so each new segment always starts with a keyframe.

          – Malvineous
          Feb 25 '17 at 6:51




          3




          3





          what are the units? 8s? 8min? 8h?

          – user1133275
          Mar 20 '17 at 20:58





          what are the units? 8s? 8min? 8h?

          – user1133275
          Mar 20 '17 at 20:58




          1




          1





          @user1133275 its second

          – Jon
          Mar 20 '17 at 21:11





          @user1133275 its second

          – Jon
          Mar 20 '17 at 21:11




          2




          2





          On Mac, I found that this resulted in N output video chunks but only the 1st of them was a valid, viewable MP4. The other N-1 chunks were blank video (all black) with no audio. To make it work, I needed to add the reset_timestamps flag like so: ffmpeg -i input.mp4 -c copy -map 0 -segment_time 8 -f segment -reset_timestamps 1 output%03d.mp4.

          – jarmod
          Jun 5 '17 at 15:32





          On Mac, I found that this resulted in N output video chunks but only the 1st of them was a valid, viewable MP4. The other N-1 chunks were blank video (all black) with no audio. To make it work, I needed to add the reset_timestamps flag like so: ffmpeg -i input.mp4 -c copy -map 0 -segment_time 8 -f segment -reset_timestamps 1 output%03d.mp4.

          – jarmod
          Jun 5 '17 at 15:32




          2




          2





          found that adding -reset_timestamps 1 fixes the issue for me

          – jlarsch
          Oct 30 '17 at 8:27





          found that adding -reset_timestamps 1 fixes the issue for me

          – jlarsch
          Oct 30 '17 at 8:27











          6














          Faced the same problem earlier and put together a simple Python script to do just that (using FFMpeg). Available here: https://github.com/c0decracker/video-splitter, and pasted below:



          #!/usr/bin/env python
          import subprocess
          import re
          import math
          from optparse import OptionParser
          length_regexp = 'Duration: (d2):(d2):(d2).d+,'
          re_length = re.compile(length_regexp)
          def main():
          (filename, split_length) = parse_options()
          if split_length <= 0:
          print "Split length can't be 0"
          raise SystemExit
          output = subprocess.Popen("ffmpeg -i '"+filename+"' 2>&1 | grep 'Duration'",
          shell = True,
          stdout = subprocess.PIPE
          ).stdout.read()
          print output
          matches = re_length.search(output)
          if matches:
          video_length = int(matches.group(1)) * 3600 +
          int(matches.group(2)) * 60 +
          int(matches.group(3))
          print "Video length in seconds: "+str(video_length)
          else:
          print "Can't determine video length."
          raise SystemExit
          split_count = int(math.ceil(video_length/float(split_length)))
          if(split_count == 1):
          print "Video length is less then the target split length."
          raise SystemExit
          split_cmd = "ffmpeg -i '"+filename+"' -vcodec copy "
          for n in range(0, split_count):
          split_str = ""
          if n == 0:
          split_start = 0
          else:
          split_start = split_length * n
          split_str += " -ss "+str(split_start)+" -t "+str(split_length) +
          " '"+filename[:-4] + "-" + str(n) + "." + filename[-3:] +
          "'"
          print "About to run: "+split_cmd+split_str
          output = subprocess.Popen(split_cmd+split_str, shell = True, stdout =
          subprocess.PIPE).stdout.read()
          def parse_options():
          parser = OptionParser()
          parser.add_option("-f", "--file",
          dest = "filename",
          help = "file to split, for example sample.avi",
          type = "string",
          action = "store"
          )
          parser.add_option("-s", "--split-size",
          dest = "split_size",
          help = "split or chunk size in seconds, for example 10",
          type = "int",
          action = "store"
          )
          (options, args) = parser.parse_args()
          if options.filename and options.split_size:
          return (options.filename, options.split_size)
          else:
          parser.print_help()
          raise SystemExit
          if __name__ == '__main__':
          try:
          main()
          except Exception, e:
          print "Exception occured running main():"
          print str(e)





          share|improve this answer




















          • 1





            Next time do this please in a comment. Link-only answers aren't really liked here, and the same if you advert your site. If it is an opensource project with source code, maybe it is an exception, but I now risked my reviewing privileges by not voting for the removal of your answer. And yes, you can't post comments, but after you collected 5 upvotes (which seems very fast in your case) you will.

            – peterh
            Nov 21 '14 at 0:40












          • Hi and welcome to the site. Please don't post link only answers. While your script itself would probably make a great answer, a link to it is not an answer. It is a signpost pointing to an answer. More on that here. Since you kindly gave the link, I went ahead and included the script in the body of your answer. If you object to that, please delete the answer altogether.

            – terdon
            Nov 21 '14 at 1:54















          6














          Faced the same problem earlier and put together a simple Python script to do just that (using FFMpeg). Available here: https://github.com/c0decracker/video-splitter, and pasted below:



          #!/usr/bin/env python
          import subprocess
          import re
          import math
          from optparse import OptionParser
          length_regexp = 'Duration: (d2):(d2):(d2).d+,'
          re_length = re.compile(length_regexp)
          def main():
          (filename, split_length) = parse_options()
          if split_length <= 0:
          print "Split length can't be 0"
          raise SystemExit
          output = subprocess.Popen("ffmpeg -i '"+filename+"' 2>&1 | grep 'Duration'",
          shell = True,
          stdout = subprocess.PIPE
          ).stdout.read()
          print output
          matches = re_length.search(output)
          if matches:
          video_length = int(matches.group(1)) * 3600 +
          int(matches.group(2)) * 60 +
          int(matches.group(3))
          print "Video length in seconds: "+str(video_length)
          else:
          print "Can't determine video length."
          raise SystemExit
          split_count = int(math.ceil(video_length/float(split_length)))
          if(split_count == 1):
          print "Video length is less then the target split length."
          raise SystemExit
          split_cmd = "ffmpeg -i '"+filename+"' -vcodec copy "
          for n in range(0, split_count):
          split_str = ""
          if n == 0:
          split_start = 0
          else:
          split_start = split_length * n
          split_str += " -ss "+str(split_start)+" -t "+str(split_length) +
          " '"+filename[:-4] + "-" + str(n) + "." + filename[-3:] +
          "'"
          print "About to run: "+split_cmd+split_str
          output = subprocess.Popen(split_cmd+split_str, shell = True, stdout =
          subprocess.PIPE).stdout.read()
          def parse_options():
          parser = OptionParser()
          parser.add_option("-f", "--file",
          dest = "filename",
          help = "file to split, for example sample.avi",
          type = "string",
          action = "store"
          )
          parser.add_option("-s", "--split-size",
          dest = "split_size",
          help = "split or chunk size in seconds, for example 10",
          type = "int",
          action = "store"
          )
          (options, args) = parser.parse_args()
          if options.filename and options.split_size:
          return (options.filename, options.split_size)
          else:
          parser.print_help()
          raise SystemExit
          if __name__ == '__main__':
          try:
          main()
          except Exception, e:
          print "Exception occured running main():"
          print str(e)





          share|improve this answer




















          • 1





            Next time do this please in a comment. Link-only answers aren't really liked here, and the same if you advert your site. If it is an opensource project with source code, maybe it is an exception, but I now risked my reviewing privileges by not voting for the removal of your answer. And yes, you can't post comments, but after you collected 5 upvotes (which seems very fast in your case) you will.

            – peterh
            Nov 21 '14 at 0:40












          • Hi and welcome to the site. Please don't post link only answers. While your script itself would probably make a great answer, a link to it is not an answer. It is a signpost pointing to an answer. More on that here. Since you kindly gave the link, I went ahead and included the script in the body of your answer. If you object to that, please delete the answer altogether.

            – terdon
            Nov 21 '14 at 1:54













          6












          6








          6







          Faced the same problem earlier and put together a simple Python script to do just that (using FFMpeg). Available here: https://github.com/c0decracker/video-splitter, and pasted below:



          #!/usr/bin/env python
          import subprocess
          import re
          import math
          from optparse import OptionParser
          length_regexp = 'Duration: (d2):(d2):(d2).d+,'
          re_length = re.compile(length_regexp)
          def main():
          (filename, split_length) = parse_options()
          if split_length <= 0:
          print "Split length can't be 0"
          raise SystemExit
          output = subprocess.Popen("ffmpeg -i '"+filename+"' 2>&1 | grep 'Duration'",
          shell = True,
          stdout = subprocess.PIPE
          ).stdout.read()
          print output
          matches = re_length.search(output)
          if matches:
          video_length = int(matches.group(1)) * 3600 +
          int(matches.group(2)) * 60 +
          int(matches.group(3))
          print "Video length in seconds: "+str(video_length)
          else:
          print "Can't determine video length."
          raise SystemExit
          split_count = int(math.ceil(video_length/float(split_length)))
          if(split_count == 1):
          print "Video length is less then the target split length."
          raise SystemExit
          split_cmd = "ffmpeg -i '"+filename+"' -vcodec copy "
          for n in range(0, split_count):
          split_str = ""
          if n == 0:
          split_start = 0
          else:
          split_start = split_length * n
          split_str += " -ss "+str(split_start)+" -t "+str(split_length) +
          " '"+filename[:-4] + "-" + str(n) + "." + filename[-3:] +
          "'"
          print "About to run: "+split_cmd+split_str
          output = subprocess.Popen(split_cmd+split_str, shell = True, stdout =
          subprocess.PIPE).stdout.read()
          def parse_options():
          parser = OptionParser()
          parser.add_option("-f", "--file",
          dest = "filename",
          help = "file to split, for example sample.avi",
          type = "string",
          action = "store"
          )
          parser.add_option("-s", "--split-size",
          dest = "split_size",
          help = "split or chunk size in seconds, for example 10",
          type = "int",
          action = "store"
          )
          (options, args) = parser.parse_args()
          if options.filename and options.split_size:
          return (options.filename, options.split_size)
          else:
          parser.print_help()
          raise SystemExit
          if __name__ == '__main__':
          try:
          main()
          except Exception, e:
          print "Exception occured running main():"
          print str(e)





          share|improve this answer















          Faced the same problem earlier and put together a simple Python script to do just that (using FFMpeg). Available here: https://github.com/c0decracker/video-splitter, and pasted below:



          #!/usr/bin/env python
          import subprocess
          import re
          import math
          from optparse import OptionParser
          length_regexp = 'Duration: (d2):(d2):(d2).d+,'
          re_length = re.compile(length_regexp)
          def main():
          (filename, split_length) = parse_options()
          if split_length <= 0:
          print "Split length can't be 0"
          raise SystemExit
          output = subprocess.Popen("ffmpeg -i '"+filename+"' 2>&1 | grep 'Duration'",
          shell = True,
          stdout = subprocess.PIPE
          ).stdout.read()
          print output
          matches = re_length.search(output)
          if matches:
          video_length = int(matches.group(1)) * 3600 +
          int(matches.group(2)) * 60 +
          int(matches.group(3))
          print "Video length in seconds: "+str(video_length)
          else:
          print "Can't determine video length."
          raise SystemExit
          split_count = int(math.ceil(video_length/float(split_length)))
          if(split_count == 1):
          print "Video length is less then the target split length."
          raise SystemExit
          split_cmd = "ffmpeg -i '"+filename+"' -vcodec copy "
          for n in range(0, split_count):
          split_str = ""
          if n == 0:
          split_start = 0
          else:
          split_start = split_length * n
          split_str += " -ss "+str(split_start)+" -t "+str(split_length) +
          " '"+filename[:-4] + "-" + str(n) + "." + filename[-3:] +
          "'"
          print "About to run: "+split_cmd+split_str
          output = subprocess.Popen(split_cmd+split_str, shell = True, stdout =
          subprocess.PIPE).stdout.read()
          def parse_options():
          parser = OptionParser()
          parser.add_option("-f", "--file",
          dest = "filename",
          help = "file to split, for example sample.avi",
          type = "string",
          action = "store"
          )
          parser.add_option("-s", "--split-size",
          dest = "split_size",
          help = "split or chunk size in seconds, for example 10",
          type = "int",
          action = "store"
          )
          (options, args) = parser.parse_args()
          if options.filename and options.split_size:
          return (options.filename, options.split_size)
          else:
          parser.print_help()
          raise SystemExit
          if __name__ == '__main__':
          try:
          main()
          except Exception, e:
          print "Exception occured running main():"
          print str(e)






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Feb 8 '16 at 16:00









          Community

          1




          1










          answered Nov 20 '14 at 23:28









          c0decrackerc0decracker

          6711




          6711







          • 1





            Next time do this please in a comment. Link-only answers aren't really liked here, and the same if you advert your site. If it is an opensource project with source code, maybe it is an exception, but I now risked my reviewing privileges by not voting for the removal of your answer. And yes, you can't post comments, but after you collected 5 upvotes (which seems very fast in your case) you will.

            – peterh
            Nov 21 '14 at 0:40












          • Hi and welcome to the site. Please don't post link only answers. While your script itself would probably make a great answer, a link to it is not an answer. It is a signpost pointing to an answer. More on that here. Since you kindly gave the link, I went ahead and included the script in the body of your answer. If you object to that, please delete the answer altogether.

            – terdon
            Nov 21 '14 at 1:54












          • 1





            Next time do this please in a comment. Link-only answers aren't really liked here, and the same if you advert your site. If it is an opensource project with source code, maybe it is an exception, but I now risked my reviewing privileges by not voting for the removal of your answer. And yes, you can't post comments, but after you collected 5 upvotes (which seems very fast in your case) you will.

            – peterh
            Nov 21 '14 at 0:40












          • Hi and welcome to the site. Please don't post link only answers. While your script itself would probably make a great answer, a link to it is not an answer. It is a signpost pointing to an answer. More on that here. Since you kindly gave the link, I went ahead and included the script in the body of your answer. If you object to that, please delete the answer altogether.

            – terdon
            Nov 21 '14 at 1:54







          1




          1





          Next time do this please in a comment. Link-only answers aren't really liked here, and the same if you advert your site. If it is an opensource project with source code, maybe it is an exception, but I now risked my reviewing privileges by not voting for the removal of your answer. And yes, you can't post comments, but after you collected 5 upvotes (which seems very fast in your case) you will.

          – peterh
          Nov 21 '14 at 0:40






          Next time do this please in a comment. Link-only answers aren't really liked here, and the same if you advert your site. If it is an opensource project with source code, maybe it is an exception, but I now risked my reviewing privileges by not voting for the removal of your answer. And yes, you can't post comments, but after you collected 5 upvotes (which seems very fast in your case) you will.

          – peterh
          Nov 21 '14 at 0:40














          Hi and welcome to the site. Please don't post link only answers. While your script itself would probably make a great answer, a link to it is not an answer. It is a signpost pointing to an answer. More on that here. Since you kindly gave the link, I went ahead and included the script in the body of your answer. If you object to that, please delete the answer altogether.

          – terdon
          Nov 21 '14 at 1:54





          Hi and welcome to the site. Please don't post link only answers. While your script itself would probably make a great answer, a link to it is not an answer. It is a signpost pointing to an answer. More on that here. Since you kindly gave the link, I went ahead and included the script in the body of your answer. If you object to that, please delete the answer altogether.

          – terdon
          Nov 21 '14 at 1:54











          2














          Note the exact punctuation of the alternative format is -ss mm:ss.xxx. I struggled for hours trying to use the intuitive-but-wrong mm:ss:xx to no avail.



          $ man ffmpeg | grep -C1 position



          -ss position

          Seek to given time position in seconds. "hh:mm:ss[.xxx]" syntax is also supported.




          References here and here.






          share|improve this answer





























            2














            Note the exact punctuation of the alternative format is -ss mm:ss.xxx. I struggled for hours trying to use the intuitive-but-wrong mm:ss:xx to no avail.



            $ man ffmpeg | grep -C1 position



            -ss position

            Seek to given time position in seconds. "hh:mm:ss[.xxx]" syntax is also supported.




            References here and here.






            share|improve this answer



























              2












              2








              2







              Note the exact punctuation of the alternative format is -ss mm:ss.xxx. I struggled for hours trying to use the intuitive-but-wrong mm:ss:xx to no avail.



              $ man ffmpeg | grep -C1 position



              -ss position

              Seek to given time position in seconds. "hh:mm:ss[.xxx]" syntax is also supported.




              References here and here.






              share|improve this answer















              Note the exact punctuation of the alternative format is -ss mm:ss.xxx. I struggled for hours trying to use the intuitive-but-wrong mm:ss:xx to no avail.



              $ man ffmpeg | grep -C1 position



              -ss position

              Seek to given time position in seconds. "hh:mm:ss[.xxx]" syntax is also supported.




              References here and here.







              share|improve this answer














              share|improve this answer



              share|improve this answer








              edited Jun 11 '11 at 12:49









              Caleb

              51.7k9150194




              51.7k9150194










              answered Jun 11 '11 at 2:43









              Mark HudsonMark Hudson

              258310




              258310





















                  2














                  If you want to create really same Chunks must force ffmpeg to create i-frame on the every chunks' first frame so you can use this command for create 0.5 second chunk.



                  ffmpeg -hide_banner -err_detect ignore_err -i input.mp4 -r 24 -codec:v libx264 -vsync 1 -codec:a aac -ac 2 -ar 48k -f segment -preset fast -segment_format mpegts -segment_time 0.5 -force_key_frames "expr: gte(t, n_forced * 0.5)" out%d.mkv





                  share|improve this answer



























                    2














                    If you want to create really same Chunks must force ffmpeg to create i-frame on the every chunks' first frame so you can use this command for create 0.5 second chunk.



                    ffmpeg -hide_banner -err_detect ignore_err -i input.mp4 -r 24 -codec:v libx264 -vsync 1 -codec:a aac -ac 2 -ar 48k -f segment -preset fast -segment_format mpegts -segment_time 0.5 -force_key_frames "expr: gte(t, n_forced * 0.5)" out%d.mkv





                    share|improve this answer

























                      2












                      2








                      2







                      If you want to create really same Chunks must force ffmpeg to create i-frame on the every chunks' first frame so you can use this command for create 0.5 second chunk.



                      ffmpeg -hide_banner -err_detect ignore_err -i input.mp4 -r 24 -codec:v libx264 -vsync 1 -codec:a aac -ac 2 -ar 48k -f segment -preset fast -segment_format mpegts -segment_time 0.5 -force_key_frames "expr: gte(t, n_forced * 0.5)" out%d.mkv





                      share|improve this answer













                      If you want to create really same Chunks must force ffmpeg to create i-frame on the every chunks' first frame so you can use this command for create 0.5 second chunk.



                      ffmpeg -hide_banner -err_detect ignore_err -i input.mp4 -r 24 -codec:v libx264 -vsync 1 -codec:a aac -ac 2 -ar 48k -f segment -preset fast -segment_format mpegts -segment_time 0.5 -force_key_frames "expr: gte(t, n_forced * 0.5)" out%d.mkv






                      share|improve this answer












                      share|improve this answer



                      share|improve this answer










                      answered Aug 23 '18 at 7:27









                      alireza akbaribayatalireza akbaribayat

                      211




                      211





















                          0














                          An Alternate more readable way would be



                          ffmpeg -i input.mp4 -ss 00:00:00 -to 00:10:00 -c copy output1.mp4
                          ffmpeg -i input.mp4 -ss 00:10:00 -to 00:20:00 -c copy output2.mp4

                          /**
                          * -i input file
                          * -ss start time in seconds or in hh:mm:ss
                          * -to end time in seconds or in hh:mm:ss
                          * -c codec to use
                          */


                          Here's the source and list of Commonly used FFmpeg commands.






                          share|improve this answer








                          New contributor




                          Niket Pathak is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.
























                            0














                            An Alternate more readable way would be



                            ffmpeg -i input.mp4 -ss 00:00:00 -to 00:10:00 -c copy output1.mp4
                            ffmpeg -i input.mp4 -ss 00:10:00 -to 00:20:00 -c copy output2.mp4

                            /**
                            * -i input file
                            * -ss start time in seconds or in hh:mm:ss
                            * -to end time in seconds or in hh:mm:ss
                            * -c codec to use
                            */


                            Here's the source and list of Commonly used FFmpeg commands.






                            share|improve this answer








                            New contributor




                            Niket Pathak is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                            Check out our Code of Conduct.






















                              0












                              0








                              0







                              An Alternate more readable way would be



                              ffmpeg -i input.mp4 -ss 00:00:00 -to 00:10:00 -c copy output1.mp4
                              ffmpeg -i input.mp4 -ss 00:10:00 -to 00:20:00 -c copy output2.mp4

                              /**
                              * -i input file
                              * -ss start time in seconds or in hh:mm:ss
                              * -to end time in seconds or in hh:mm:ss
                              * -c codec to use
                              */


                              Here's the source and list of Commonly used FFmpeg commands.






                              share|improve this answer








                              New contributor




                              Niket Pathak is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                              Check out our Code of Conduct.










                              An Alternate more readable way would be



                              ffmpeg -i input.mp4 -ss 00:00:00 -to 00:10:00 -c copy output1.mp4
                              ffmpeg -i input.mp4 -ss 00:10:00 -to 00:20:00 -c copy output2.mp4

                              /**
                              * -i input file
                              * -ss start time in seconds or in hh:mm:ss
                              * -to end time in seconds or in hh:mm:ss
                              * -c codec to use
                              */


                              Here's the source and list of Commonly used FFmpeg commands.







                              share|improve this answer








                              New contributor




                              Niket Pathak is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                              Check out our Code of Conduct.









                              share|improve this answer



                              share|improve this answer






                              New contributor




                              Niket Pathak is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                              Check out our Code of Conduct.









                              answered yesterday









                              Niket PathakNiket Pathak

                              1012




                              1012




                              New contributor




                              Niket Pathak is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                              Check out our Code of Conduct.





                              New contributor





                              Niket Pathak is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                              Check out our Code of Conduct.






                              Niket Pathak is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                              Check out our Code of Conduct.





















                                  -2














                                  You shouldn't really be following any of the answers in this thread, instead just use what is built into ffmpeg to do exactly this.



                                  ffmpeg -i invid.mp4 -threads 3 -vcodec copy -f segment -segment_time 2 cam_out_h264%04d.mp4


                                  This will split it into roughly 2 second chucks, split at the relevant keyframes, and will output to the files
                                  cam_out_h2640001.mp4, cam_out_h2640002.mp4, etc.






                                  share|improve this answer





























                                    -2














                                    You shouldn't really be following any of the answers in this thread, instead just use what is built into ffmpeg to do exactly this.



                                    ffmpeg -i invid.mp4 -threads 3 -vcodec copy -f segment -segment_time 2 cam_out_h264%04d.mp4


                                    This will split it into roughly 2 second chucks, split at the relevant keyframes, and will output to the files
                                    cam_out_h2640001.mp4, cam_out_h2640002.mp4, etc.






                                    share|improve this answer



























                                      -2












                                      -2








                                      -2







                                      You shouldn't really be following any of the answers in this thread, instead just use what is built into ffmpeg to do exactly this.



                                      ffmpeg -i invid.mp4 -threads 3 -vcodec copy -f segment -segment_time 2 cam_out_h264%04d.mp4


                                      This will split it into roughly 2 second chucks, split at the relevant keyframes, and will output to the files
                                      cam_out_h2640001.mp4, cam_out_h2640002.mp4, etc.






                                      share|improve this answer















                                      You shouldn't really be following any of the answers in this thread, instead just use what is built into ffmpeg to do exactly this.



                                      ffmpeg -i invid.mp4 -threads 3 -vcodec copy -f segment -segment_time 2 cam_out_h264%04d.mp4


                                      This will split it into roughly 2 second chucks, split at the relevant keyframes, and will output to the files
                                      cam_out_h2640001.mp4, cam_out_h2640002.mp4, etc.







                                      share|improve this answer














                                      share|improve this answer



                                      share|improve this answer








                                      edited Dec 15 '16 at 15:00









                                      Jeff Schaller

                                      43.8k1161141




                                      43.8k1161141










                                      answered Mar 22 '16 at 5:48









                                      John AllardJohn Allard

                                      563518




                                      563518



























                                          draft saved

                                          draft discarded
















































                                          Thanks for contributing an answer to Unix & Linux Stack Exchange!


                                          • Please be sure to answer the question. Provide details and share your research!

                                          But avoid


                                          • Asking for help, clarification, or responding to other answers.

                                          • Making statements based on opinion; back them up with references or personal experience.

                                          To learn more, see our tips on writing great answers.




                                          draft saved


                                          draft discarded














                                          StackExchange.ready(
                                          function ()
                                          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f1670%2fhow-can-i-use-ffmpeg-to-split-mpeg-video-into-10-minute-chunks%23new-answer', 'question_page');

                                          );

                                          Post as a guest















                                          Required, but never shown





















































                                          Required, but never shown














                                          Required, but never shown












                                          Required, but never shown







                                          Required, but never shown

































                                          Required, but never shown














                                          Required, but never shown












                                          Required, but never shown







                                          Required, but never shown







                                          Popular posts from this blog

                                          Àrd-bhaile Cathair chruinne/Baile mòr cruinne | Artagailean ceangailte | Clàr-taice na seòladaireachd

                                          Cannot Extend partition with GParted The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) 2019 Community Moderator Election ResultsCan't increase partition size with GParted?GParted doesn't recognize the unallocated space after my current partitionWhat is the best way to add unallocated space located before to Ubuntu 12.04 partition with GParted live?I can't figure out how to extend my Arch home partition into free spaceGparted Linux Mint 18.1 issueTrying to extend but swap partition is showing as Unknown in Gparted, shows proper from fdiskRearrange partitions in gparted to extend a partitionUnable to extend partition even though unallocated space is next to it using GPartedAllocate free space to root partitiongparted: how to merge unallocated space with a partition

                                          대한민국 목차 국명 지리 역사 정치 국방 경제 사회 문화 국제 순위 관련 항목 각주 외부 링크 둘러보기 메뉴북위 37° 34′ 08″ 동경 126° 58′ 36″ / 북위 37.568889° 동경 126.976667°  / 37.568889; 126.976667ehThe Korean Repository문단을 편집문단을 편집추가해Clarkson PLC 사Report for Selected Countries and Subjects-Korea“Human Development Index and its components: P.198”“http://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EA%B5%AD%EA%B8%B0%EB%B2%95”"한국은 국제법상 한반도 유일 합법정부 아니다" - 오마이뉴스 모바일Report for Selected Countries and Subjects: South Korea격동의 역사와 함께한 조선일보 90년 : 조선일보 인수해 혁신시킨 신석우, 임시정부 때는 '대한민국' 국호(國號) 정해《우리가 몰랐던 우리 역사: 나라 이름의 비밀을 찾아가는 역사 여행》“남북 공식호칭 ‘남한’‘북한’으로 쓴다”“Corea 대 Korea, 누가 이긴 거야?”국내기후자료 - 한국[김대중 前 대통령 서거] 과감한 구조개혁 'DJ노믹스'로 최단기간 환란극복 :: 네이버 뉴스“이라크 "韓-쿠르드 유전개발 MOU 승인 안해"(종합)”“해외 우리국민 추방사례 43%가 일본”차기전차 K2'흑표'의 세계 최고 전력 분석, 쿠키뉴스 엄기영, 2007-03-02두산인프라, 헬기잡는 장갑차 'K21'...내년부터 공급, 고뉴스 이대준, 2008-10-30과거 내용 찾기mk 뉴스 - 구매력 기준으로 보면 한국 1인당 소득 3만弗과거 내용 찾기"The N-11: More Than an Acronym"Archived조선일보 최우석, 2008-11-01Global 500 2008: Countries - South Korea“몇년째 '시한폭탄'... 가계부채, 올해는 터질까”가구당 부채 5000만원 처음 넘어서“‘빚’으로 내몰리는 사회.. 위기의 가계대출”“[경제365] 공공부문 부채 급증…800조 육박”“"소득 양극화 다소 완화...불평등은 여전"”“공정사회·공생발전 한참 멀었네”iSuppli,08年2QのDRAMシェア・ランキングを発表(08/8/11)South Korea dominates shipbuilding industry | Stock Market News & Stocks to Watch from StraightStocks한국 자동차 생산, 3년 연속 세계 5위자동차수출 '현대-삼성 웃고 기아-대우-쌍용은 울고' 과거 내용 찾기동반성장위 창립 1주년 맞아Archived"중기적합 3개업종 합의 무시한 채 선정"李대통령, 사업 무분별 확장 소상공인 생계 위협 질타삼성-LG, 서민업종인 빵·분식사업 잇따라 철수상생은 뒷전…SSM ‘몸집 불리기’ 혈안Archived“경부고속도에 '아시안하이웨이' 표지판”'철의 실크로드' 앞서 '말(言)의 실크로드'부터, 프레시안 정창현, 2008-10-01“'서울 지하철은 안전한가?'”“서울시 “올해 안에 모든 지하철역 스크린도어 설치””“부산지하철 1,2호선 승강장 안전펜스 설치 완료”“전교조, 정부 노조 통계서 처음 빠져”“[Weekly BIZ] 도요타 '제로 이사회'가 리콜 사태 불러들였다”“S Korea slams high tuition costs”““정치가 여론 양극화 부채질… 합리주의 절실””“〈"`촛불집회'는 민주주의의 질적 변화 상징"〉”““촛불집회가 민주주의 왜곡 초래””“국민 65%, "한국 노사관계 대립적"”“한국 국가경쟁력 27위‥노사관계 '꼴찌'”“제대로 형성되지 않은 대한민국 이념지형”“[신년기획-갈등의 시대] 갈등지수 OECD 4위…사회적 손실 GDP 27% 무려 300조”“2012 총선-대선의 키워드는 '국민과 소통'”“한국 삶의 질 27위, 2000년과 2008년 연속 하위권 머물러”“[해피 코리아] 행복점수 68점…해외 평가선 '낙제점'”“한국 어린이·청소년 행복지수 3년 연속 OECD ‘꼴찌’”“한국 이혼율 OECD중 8위”“[통계청] 한국 이혼율 OECD 4위”“오피니언 [이렇게 생각한다] `부부의 날` 에 돌아본 이혼율 1위 한국”“Suicide Rates by Country, Global Health Observatory Data Repository.”“1. 또 다른 차별”“오피니언 [편집자에게] '왕따'와 '패거리 정치' 심리는 닮은꼴”“[미래한국리포트] 무한경쟁에 빠진 대한민국”“대학생 98% "외모가 경쟁력이라는 말 동의"”“특급호텔 웨딩·200만원대 유모차… "남보다 더…" 호화病, 고질병 됐다”“[스트레스 공화국] ① 경쟁사회, 스트레스 쌓인다”““매일 30여명 자살 한국, 의사보다 무속인에…””“"자살 부르는 '우울증', 환자 중 85% 치료 안 받아"”“정신병원을 가다”“대한민국도 ‘묻지마 범죄’,안전지대 아니다”“유엔 "학생 '성적 지향'에 따른 차별 금지하라"”“유엔아동권리위원회 보고서 및 번역본 원문”“고졸 성공스토리 담은 '제빵왕 김탁구' 드라마 나온다”“‘빛 좋은 개살구’ 고졸 취업…실습 대신 착취”원본 문서“정신건강, 사회적 편견부터 고쳐드립니다”‘소통’과 ‘행복’에 목 마른 사회가 잠들어 있던 ‘심리학’ 깨웠다“[포토] 사유리-곽금주 교수의 유쾌한 심리상담”“"올해 한국인 평균 영화관람횟수 세계 1위"(종합)”“[게임연중기획] 게임은 문화다-여가활동 1순위 게임”“영화속 ‘영어 지상주의’ …“왠지 씁쓸한데””“2월 `신문 부수 인증기관` 지정..방송법 후속작업”“무료신문 성장동력 ‘차별성’과 ‘갈등해소’”대한민국 국회 법률지식정보시스템"Pew Research Center's Religion & Public Life Project: South Korea"“amp;vwcd=MT_ZTITLE&path=인구·가구%20>%20인구총조사%20>%20인구부문%20>%20 총조사인구(2005)%20>%20전수부문&oper_YN=Y&item=&keyword=종교별%20인구& amp;lang_mode=kor&list_id= 2005년 통계청 인구 총조사”원본 문서“한국인이 좋아하는 취미와 운동 (2004-2009)”“한국인이 좋아하는 취미와 운동 (2004-2014)”Archived“한국, `부분적 언론자유국' 강등〈프리덤하우스〉”“국경없는기자회 "한국, 인터넷감시 대상국"”“한국, 조선산업 1위 유지(S. Korea Stays Top Shipbuilding Nation) RZD-Partner Portal”원본 문서“한국, 4년 만에 ‘선박건조 1위’”“옛 마산시,인터넷속도 세계 1위”“"한국 초고속 인터넷망 세계1위"”“인터넷·휴대폰 요금, 외국보다 훨씬 비싸”“한국 관세행정 6년 연속 세계 '1위'”“한국 교통사고 사망자 수 OECD 회원국 중 2위”“결핵 후진국' 한국, 환자가 급증한 이유는”“수술은 신중해야… 자칫하면 생명 위협”대한민국분류대한민국의 지도대한민국 정부대표 다국어포털대한민국 전자정부대한민국 국회한국방송공사about korea and information korea브리태니커 백과사전(한국편)론리플래닛의 정보(한국편)CIA의 세계 정보(한국편)마리암 부디아 (Mariam Budia),『한국: 하늘이 내린 한 폭의 그림』, 서울: 트랜스라틴 19호 (2012년 3월)대한민국ehehehehehehehehehehehehehehWorldCat132441370n791268020000 0001 2308 81034078029-6026373548cb11863345f(데이터)00573706ge128495