分割MP4档案


34

拆分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文件?


您能告诉我们您需要分割文件的原因吗?是共享文件还是播放文件的一部分?还是其他原因?
theTuxRacer 2011年

它是用于上传到youtube的,因此,您的第二个建议-播放文件的一部分...
Asaf Chertkoff 2011年

Answers:


62

使用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脚本(即,以秒为单位获取视频文件,块大小并生成各个可播放的视频文件):http : //icephoenix.us/notes-for-myself/auto-splitting-video与ffmpeg和python相等的文件/


谢谢,但是我需要进一步的帮助。寻找我在答案中所做的编辑。
2011年

1
这对我有用:ffmpeg -ss 00:05:00 -t 00:16:00 -i largfile.MP4 -acodec复制-vcodec复制smallfile.MP4有人可以解释为什么吗?
2011年

我将在这里进行一些推测,但是看来您的源文件是使用libx264不支持的帧率编码的,因此它会跳过帧。我认为这应该可以正常工作,但是由于这个原因,音频可能会有一些不幸。
亚历克斯(Alex)

也许。将会看到...
Asaf Chertkoff 2011年

1
阿萨夫的命令也为我工作。似乎编解码器选项应该在输入文件之后。
daithib8 2011年

10

如果您更喜欢使用gui,则存储库中提供了avidemux。用这种方法定义切点要容易得多!

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

我对相机上的一些视频进行了大量剪切,这是瞬间的!


2
Avidemux已从Ubuntu 16.04的存储库中删除。
naXa

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

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

$ split -b 2M file.mp4 part_file

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

$ 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

请注意文件名后面的两个字符。

取回文件:

$ cat part_filename[start-end][start-end] > file.mp4

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

@Slipstream-没错-我需要将其拆分给youtube。我的相机正在生产MP4,但我需要将其拆分,因为它们的长度超出了允许的15分钟。
Asaf Chertkoff 2011年

那么您想要下面的alex答案...
Slipstream

5

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

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

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


我以前从未使用过它,但是尝试过:太棒了!即时速度,一切保持可读性。谢谢!
tuk0z

如果要指定尺寸,这特别有用。谢谢!
BBQ单人

0

如果这是MP4第2部分,则采用非常精细的方法,您可以在没有编码器/解码器的情况下继续处理文件。该答案适用于具有编程背景和十六进制编辑器且希望保留文件“完整”的人员。

文件的第一部分是mdat,第二部分是moov,包含解码器用来定位块的元数据,块中包含样本(编码的图像和声音,不重要)。然后是STCO,STTS,STSC等。这称为“原子”。它们指示每个块的偏移量,长度等。如果您做的很干净,则可以制作视频的多个实例,以及具有不同块的不同版本。该文件将可以在播放器中播放,并在视频网站上进行摘要。如果您是一名编码人员,则可以构建一个MP4解析器或使用现有的解析器来跟踪各部分及其偏移量。这将帮助您更多地了解格式,并自动重建文件。



0

另一个可以分割视频并做更多事情的开源GUI工具手刹

例如,在这里,我将视频分割为24.53(mm:ss),并在右侧裁剪帧: 在此处输入图片说明

使用“预览”按钮,您可以轻松查看输出的预览。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.