Розщеплення файлу 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 починає позиціонувати в секундах або у форматі 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 -file-in-enako-chunks-with-ffmpeg-and-python /


Дякую, але мені потрібна подальша допомога з цим. Шукайте правки, яку я зробив у своїй відповіді.
Асаф Черткофф

1
Це працювало для мене: ffmpeg -ss 00:05:00 -t 00:16:00 -i largfile.MP4 -acodec копія -vcodec копія smallfile.MP4 може хтось пояснити, чому?
Асаф Черткофф

Я збираюся трохи розмірковувати тут, але схоже, що ваш вихідний файл закодований з частотою кадрів, що libx264 не підтримує, тому він пропускає кадри. Я думаю, це має спрацювати нормально, але через це можуть виникнути неполадки зі звуком.
Олексій

можливо. побачимо ...
Асаф Черткофф

1
Команда Асафа працювала і на мене. Здавалося б, параметри кодека повинні з’явитися після вхідного файлу.
daithib8

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 Мб. Щоб розділити, я набираю:

$ 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 хв.
Асаф Черткофф

тоді ви хочете відповідь
Алекса

5

Використовуйте mkvmerge з пакету mkvtoolnix. Використовуйте щось подібне

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

Це розділить ваш файл на 1 ГБ блоків. Ви також можете використовувати індикатори часу.


Я ніколи не використовував його раніше, але намагався: блискучий! миттєва швидкість і все читається. Спасибі!
tuk0z

Це особливо корисно, якщо ви хочете вказати розмір. Спасибі!
Барбекю Синглу

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

Інший інструмент з відкритим кодом графічного інтерфейсу , який може розділяти відео та робити багато іншого, - це ручне гальмо

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

Попередній перегляд результатів можна побачити легко - за допомогою кнопки «Попередній перегляд».

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.