Разделение файла 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
Это для загрузки на YouTube, поэтому ваше второе предложение - воспроизвести части файла ...
Асаф Черткофф

Ответы:

62

С помощью ffmpeg вы можете разделить файл, используя следующую команду:

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

где START начинает позиционирование в секундах или в формате чч: мм: сс ДЛИНА - длина фрагмента в секундах или в формате чч: мм: сс

Поэтому вам нужно будет запустить эту команду несколько раз в зависимости от продолжительности вашего видео. Если, скажем, ваше видео длится 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 -file-в-равных-кусковые-с-FFmpeg-и-Python /

Alex
источник
Спасибо, но мне нужна дополнительная помощь с этим. Ищите редактирование, которое я сделал в своем ответе.
Асаф Черткофф,
1
Это сработало для меня: ffmpeg -ss 00:05:00 -t 00:16:00 -i largfile.MP4 -acodec copy -vcodec copy smallfile.MP4 Может кто-нибудь объяснить, почему?
Асаф Черткофф
Я собираюсь немного поразмышлять здесь, но похоже, что ваш исходный файл закодирован с частотой кадров, которую libx264 не поддерживает, поэтому он пропускает кадры. Я думаю, что это должно работать нормально, но из-за этого могут возникнуть некоторые проблемы со звуком.
Алекс
может быть. увидим ...
Асаф Чертков
1
Команда Асафа тоже работала на меня. Казалось бы, параметры кодека должны идти после входного файла.
daithib8
10

Если вы предпочитаете использовать графический интерфейс, в репозиториях есть avidemux. Таким образом, определить точки разреза намного проще!

Маркеры выбора определяют часть видео, которая будет экспортироваться, использование «копирования» в аудио и видео позволяет избежать перекодирования. Вы также можете выбрать контейнер или изменить его (avi, mp4, mkv и т. Д.).

Я сделал несколько снимков видео с камеры, и это было мгновенно!

user24362
источник
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 МБ. Чтобы разделить, я набираю:

$ 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
theTuxRacer
источник
3
Этот метод будет очень быстрым, но не позволит вам играть отдельные фрагменты. Вы можете использовать ffmpeg для извлечения частей видеофайла, но для автоматического разделения его на множество маленьких кусочков, которые можно воспроизводить по отдельности, без повторной сборки их в одно целое, вам, вероятно, потребуется написать скрипт с файлом mp4. Я могу привести вам пример, если хотите, но если просто переместить файл, тогда этот ответ хорош.
Slipstream
@ Slipstream - вы поняли это правильно - мне нужно разделить его для YouTube. моя камера производит MP4, но мне нужно разделить те, потому что они длиннее 15 минут.
Асаф Чертков
тогда вам нужен ответ Алекса ниже ...
Slipstream
5

Используйте mkvmerge из пакета mkvtoolnix. Используйте что-то вроде

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

Это разделит ваш файл на блоки размером 1 ГБ. Вы также можете использовать индикации времени.

rtega
источник
Я никогда не использовал это раньше, но попробовал: блестящий! мгновенная скорость и все становится читаемым. Благодарность!
tuk0z
Это особенно полезно, если вы хотите указать размер. Благодарность!
BBQ Singular
0

Если это MP4 часть 2, то при очень тщательном подходе вы можете обработать файл без кодера / декодера. Этот ответ предназначен для людей с опытом программирования и шестнадцатеричным редактором, которые хотят сохранить файл "" неповрежденным ".

Первая часть файла - это mdat, вторая - это moov, содержащий метаданные, используемые декодером для определения местоположения фрагментов, которые содержат сэмплы (закодированные изображения и звук, которые не важно знать). Тогда есть STCO, STTS, STSC и т. Д. Это называется «атомы». Они указывают, каково смещение, длина и т. Д. Каждого из фрагментов. Если вы делаете чистую работу, вы можете сделать несколько экземпляров вашего видео и разные версии с разными кусками. Затем файл будет воспроизводиться в проигрывателях и перевариваться на видео-сайтах. Если вы кодер, то создайте синтаксический анализатор MP4 или используйте существующий, чтобы отслеживать детали и их смещения. Это поможет вам узнать больше о формате и автоматически перестроить файлы.

Леон Пеллетье
источник
0

Самый простой и надежный способ - использовать MP4Box:

  1. # apt install gpac
  2. $ MP4Box -split 15 /home/asafche/Videos/myVideos/MAH00124.MP4(параметр время в секундах). Для других возможностей разделения, например, по размеру см. Https://gpac.wp.imt.fr/mp4box/mp4box-documentation/ илиMP4Box -h general

Конкатенация также проста.

Чаба Тот
источник
0

Другой инструмент с открытым исходным кодом GUI , который может разделять видео и делать гораздо больше, это ручной тормоз

Например, здесь я делю видео на 24,53 (мм: сс), а также обрезаю рамку с правой стороны: введите описание изображения здесь

Вы можете легко просмотреть предварительный просмотр вывода - с помощью кнопки «Предварительный просмотр».

Ноам Манос
источник