拆分 MP4 文件

Asa*_*off 43 video file-format

拆分 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
Run Code Online (Sandbox Code Playgroud)

我做错了什么,如何正确拆分 mp4 文件?

Ale*_*lex 81

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

ffmpeg -i ORIGINALFILE.mp4 -acodec copy -vcodec copy -ss START -t LENGTH OUTFILE.mp4
Run Code Online (Sandbox Code Playgroud)

其中 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
Run Code Online (Sandbox Code Playgroud)

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


小智 10

如果您更喜欢使用 gui,则存储库中有 avidemux 可用。通过这种方式定义切点要容易得多!

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

我已经对来自相机的一些视频进行了大量剪辑,而且是即时的!

  • Avidemux 已从 Ubuntu 16.04 的存储库中删除。 (2认同)

小智 8

使用 mkvtoolnix 包中的 mkvmerge。使用类似的东西

mkvmerge -o outputprefix --split 1G origfile.mp4
Run Code Online (Sandbox Code Playgroud)

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


the*_*cer 5

不确定您的需求是什么,但您可以在终端中输入:要打开终端,请按Ctrl+ Alt+T

split -b 4M file.mp4 part_file

这会将文件分成 4 兆字节的块。要再次重新创建文件,请键入

cat part_file[a-c] > file.mp4

请注意,我输入a-c了括号,因为拆分创建了 3 个文件。在你的情况下,你可能需要看到更多。我会用一个例子来解释。

$ ls -lh
-rwxr-xr-x 1 root        root        9.3M 2011-04-17 20:09 file.mp4
Run Code Online (Sandbox Code Playgroud)

这表明我有一个 9.3 MB 的文件。要拆分,我输入:

$ split -b 2M file.mp4 part_file
Run Code Online (Sandbox Code Playgroud)

拆分后,我得到的文件为:

$ ls -lh
-rwxr-xr-x 1 root        root        9.3M 2011-04-17 20:09 file.mp4
-rw-r--r-- 1 thetuxracer thetuxracer 2.0M 2011-04-17 20:12 part_fileaa
-rw-r--r-- 1 thetuxracer thetuxracer 2.0M 2011-04-17 20:12 part_fileab
-rw-r--r-- 1 thetuxracer thetuxracer 2.0M 2011-04-17 20:12 part_fileac
-rw-r--r-- 1 thetuxracer thetuxracer 2.0M 2011-04-17 20:12 part_filead
-rw-r--r-- 1 thetuxracer thetuxracer 1.3M 2011-04-17 20:12 part_fileae
Run Code Online (Sandbox Code Playgroud)

请注意附加到文件名的两个字符。

要取回文件:

$ cat part_filename[start-end][start-end] > file.mp4
Run Code Online (Sandbox Code Playgroud)

  • 这种方法非常快,但不允许您播放单个块。您可以使用 ffmpeg 来提取视频文件的一部分,但要将其自动拆分为许多小块,这些小块都可以单独播放,而无需将它们重新组合成一个整体,您可能需要使用 mp4 文件编写脚本。如果你愿意,我可以给你一个例子,但如果它只是为了移动文件,那么这个答案很好。 (3认同)

小智 5

我认为超越最初的问题“如何正确分割 mp4 文件?”可能会有所帮助。指出如何有效地做到这一点。对于大型视频,它可能特别有用,正如我在遵循上面 Alex 的答案时在 13.7 GB 文件中发现的那样。

技巧是在 之前使用该选项-ss以便ffmpeg 跳过输入中的指定时间,而不是通过它进行查找。更多详细信息请参见ffmpeg文档https://www.ffmpeg.org/ffmpeg.html#Main-options,但相关解释是:-i

-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.
Run Code Online (Sandbox Code Playgroud)