分割 MP4 文件

分割 MP4 文件

分割 MP4 文件最快且耗费资源最少的方法是什么?

我尝试了 ffmpeg 但出现错误:

$ ffmpeg -vcodec copy -ss 0 -t 00:10:00 -i /home/asafche/Videos/myVideos/MAH00124.MP4 /home/asafche/Videos/myVideos/eh.mp4
FFmpeg version SVN-r0.5.1-4:0.5.1-1ubuntu1.1, Copyright (c) 2000-2009 Fabrice Bellard, et al.
configuration: --extra-version=4:0.5.1-1ubuntu1.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 1 / 52.20. 1
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Mar 31 2011 18:53:20, gcc: 4.4.3

Seems stream 0 codec frame rate differs from container frame rate: 119.88 (120000/1001) -> 59.94 (60000/1001)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/asafche/Videos/myVideos/MAH00124.MP4':
  Duration: 00:15:35.96, start: 0.000000, bitrate: 5664 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 1280x720, 59.94 tbr, 59.94 tbn, 119.88 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16
Output #0, mp4, to '/home/asafche/Videos/myVideos/eh.mp4':
    Stream #0.0(und): Video: libx264, yuv420p, 1280x720, q=2-31, 90k tbn, 59.94 tbc
    Stream #0.1(und): Audio: 0x0000, 48000 Hz, stereo, s16, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Unsupported codec for output stream #0.1

我做错了什么以及如何正确分割 mp4 文件?

答案1

使用 ffmpeg 您可以使用以下命令分割文件:

ffmpeg -i ORIGINALFILE.mp4 -acodec copy -vcodec copy -ss START -t LENGTH OUTFILE.mp4

其中 START 是以秒为单位的起始位置,格式为 hh:mm:ss LENGTH 是以秒为单位的块长度,格式为 hh:mm:ss

因此,您需要根据视频的长度多次运行此命令。假设您的视频长度为 31 分钟,并且您希望将其分成 15 分钟的片段,请按照以下方式运行它:

ffmpeg -i ORIGINALFILE.mp4 -acodec copy -vcodec copy -ss 0 -t 00:15:00 OUTFILE-1.mp4
ffmpeg -i ORIGINALFILE.mp4 -acodec copy -vcodec copy -ss 00:15:00 -t 00:15:00 OUTFILE-2.mp4
ffmpeg -i ORIGINALFILE.mp4 -acodec copy -vcodec copy -ss 00:30:00 -t 00:15:00 OUTFILE-3.mp4

您可以使用一个 Python 脚本自动执行此操作(即获取视频文件、以秒为单位的块大小并生成单独的可播放视频文件):https://github.com/c0decracker/video-splitter

答案2

使用 mkvtoolnix 软件包中的 mkvmerge。使用类似

mkvmerge -o outputprefix --split 1G origfile.mp4

这会将您的文件分割成 1 GB 的块。您也可以使用时间指示。

答案3

如果您更喜欢使用 GUI,那么存储库中提供了 avidemux。这样定义切点就容易多了!

选择标记定义了要导出的视频部分,在音频和视频中使用“复制”可避免重新编码。您还可以选择容器或更改它(avi、mp4、mkv 等)。

我对一些摄像机拍摄的视频进行了大量剪辑,而且都是即时的!

答案4

我认为,通过指出如何正确分割 mp4 文件,可能会对“如何正确分割 mp4 文件?”这个问题有所帮助。有效率的对于大型视频,它可能特别有用,正如我在按照上述 Alex 的回答操作时在一个 13.7 GB 的文件上发现的那样。

诀窍是使用-ss选项以便-iffmpeg 跳过超过输入中指定的时间,而不是寻找通过它。请参阅 ffmpeg 文档https://www.ffmpeg.org/ffmpeg.html#Main-options了解更多详细信息,但相关解释是:

-ss position (input/output)
When used as an input option (before -i), seeks in this input file to position. 
...
When used as an output option (before an output url), decodes but discards input until the timestamps reach position.

相关内容