Aufteilen einer MP4-Datei


34

Was ist die schnellste und ressourcenschonendste Methode zum Aufteilen einer MP4-Datei?

Ich habe es mit ffmpeg versucht, habe aber einen Fehler erhalten:

$ 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

Was mache ich falsch und wie teile ich eine mp4-Datei richtig auf?


Können Sie uns bitte mitteilen, warum Sie die Datei aufteilen müssen? Soll es Teile der Datei freigeben oder abspielen? Oder aus irgendeinem anderen Grund?
theTuxRacer

Es ist für das Hochladen auf YouTube, daher Ihr zweiter Vorschlag - spielen Sie Teile der Datei ...
Asaf Chertkoff

Antworten:


62

Mit ffmpeg können Sie Dateien mit dem folgenden Befehl teilen:

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

Dabei beginnt START in Sekunden oder im Format hh: mm: ss. LÄNGE ist die Blocklänge in Sekunden oder im Format hh: mm: ss

Sie müssen diesen Befehl also einige Male ausführen, je nachdem, wie lange Ihr Video dauert. Angenommen, Ihr Video ist 31 Minuten lang und Sie möchten, dass es in 15-Minuten-Blöcke aufgeteilt wird. Gehen Sie dazu wie folgt vor:

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

Es gibt ein Python-Skript, das Sie verwenden können und das dies automatisch ausführt (dh Videodatei, Blockgröße in Sekunden und Erzeugung einzelner abspielbarer Videodateien): http://icephoenix.us/notes-for-myself/auto-splitting-video -Datei-in-gleichen-Stücken-mit-ffmpeg-und-Python /


Danke, aber ich brauche weitere Hilfe. Suchen Sie nach der Bearbeitung, die ich in meiner Antwort gemacht habe.
Asaf Chertkoff

1
Das hat bei mir funktioniert: ffmpeg -ss 00:05:00 -t 00:16:00 -i largfile.MP4 -acodec copy -vcodec copy smallfile.MP4 kann jemand erklären, warum?
Asaf Chertkoff

Ich werde hier ein wenig spekulieren, aber es sieht so aus, als ob Ihre Quelldatei mit einer Framerate codiert ist, die libx264 nicht unterstützt, sodass Frames übersprungen werden. Ich denke, das sollte gut funktionieren, aber es könnte ein paar Pannen mit Audio geben.
Alex

vielleicht. werden sehen ...
Asaf Chertkoff

1
Asafs Befehl funktionierte auch für mich. Es scheint, dass die Codec-Optionen nach der Eingabedatei kommen sollten.
Daithib8

10

Wenn Sie es vorziehen, eine GUI zu verwenden, gibt es Avidemux in den Repositories. Das Definieren der Schnittpunkte ist auf diese Weise viel einfacher!

Die Auswahlmarkierungen definieren den Teil des Videos, der exportiert werden soll. Durch "Kopieren" in Audio und Video wird eine Neukodierung vermieden. Sie können den Container auch auswählen oder ändern (avi, mp4, mkv usw.).

Ich habe einige Videos von einer Kamera geschnitten und es war sofort!


2
Avidemux wurde aus dem Repository von Ubuntu 16.04 entfernt.
naXa

5

Sie sind sich nicht sicher, was Sie brauchen, können dies aber in ein Terminal eingeben: Um ein Terminal zu öffnen, drücken Sie Ctrl+ Alt+T

split -b 4M file.mp4 part_file

Dadurch werden die Dateien in Stücke von 4 Megabyte aufgeteilt. Um die Datei erneut zu erstellen, geben Sie ein

cat part_file[a-c] > file.mp4

Beachten Sie, dass ich a-cin der Klammer eingegeben habe , weil der Split 3 Dateien erstellt. In Ihrem Fall müssen Sie möglicherweise mehr sehen. Ich werde mit einem Beispiel erklären.

$ ls -lh
-rwxr-xr-x 1 root        root        9.3M 2011-04-17 20:09 file.mp4

Dies zeigt, dass ich eine einzelne Datei von 9,3 MB habe. Zum Teilen gebe ich ein:

$ split -b 2M file.mp4 part_file

Nach dem Aufteilen erhalte ich die Dateien als:

$ 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

Beachten Sie die beiden an den Dateinamen angehängten Zeichen.

So rufen Sie die Datei zurück:

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

3
Diese Methode ist sehr schnell, erlaubt es Ihnen jedoch nicht, die einzelnen Chunks zu spielen. Sie können ffmpeg verwenden, um Teile einer Videodatei zu extrahieren, aber um sie automatisch in viele kleine Teile aufzuteilen, die alle einzeln wiedergegeben werden können, ohne sie zu einem Ganzen zusammenzusetzen. Sie müssen wahrscheinlich ein Skript mit einer mp4-Datei schreiben. Ich kann Ihnen ein Beispiel geben, wenn Sie möchten, aber wenn es nur darum geht, die Datei zu verschieben, ist diese Antwort gut.
Slipstream

@ Slipstream - du hast es richtig gemacht - ich muss es für YouTube teilen. Meine Kamera produziert MP4, aber ich muss diese aufteilen, da sie länger als die zulässigen 15 Minuten sind.
Asaf Chertkoff

dann möchten Sie die Antwort von Alex unten ...
Slipstream

5

Verwenden Sie mkvmerge aus dem Paket mkvtoolnix. Verwenden Sie so etwas wie

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

Dies würde Ihre Datei in 1 GB Blöcke aufteilen. Sie können auch Zeitangaben verwenden.


Ich habe es noch nie benutzt, aber versucht: brillant! Sofortige Geschwindigkeit und alles bleibt lesbar. Vielen Dank!
Tuk0z

Dies ist besonders nützlich, wenn Sie eine Größe angeben möchten. Vielen Dank!
BBQ Singular

0

Wenn dies ein MP4 Teil 2 ist, dann können Sie mit einem sehr sorgfältigen Ansatz die Datei ohne Encoder / Decoder bearbeiten. Diese Antwort richtet sich an Personen mit Programmierhintergrund und Hex-Editor, die die Datei "" intakt "" halten möchten.

Der erste Teil der Datei ist ein mdat, der zweite ein moov, das Metadaten enthält, die vom Decoder zum Auffinden von Blöcken verwendet werden, die Samples enthalten (codierte Bilder und Ton, die nicht wichtig zu wissen sind). Dann gibt es STCO, STTS, STSC usw. Dies nennt man "Atome". Sie geben den Versatz, die Länge usw. der einzelnen Blöcke an. Wenn Sie einen sauberen Job machen, können Sie mehrere Instanzen Ihres Videos und eine andere Version mit verschiedenen Stücken erstellen. Die Datei kann dann in Playern abgespielt und auf Video-Websites verdaut werden. Wenn Sie ein Codierer sind, erstellen Sie einen MP4-Parser oder verwenden Sie einen vorhandenen, um die Teile und ihre Offsets zu verfolgen. Auf diese Weise können Sie mehr über das Format erfahren und Dateien automatisch neu erstellen.


0

Die einfachste und kinderleichte Methode ist die Verwendung von MP4Box:

  1. # apt install gpac
  2. $ MP4Box -split 15 /home/asafche/Videos/myVideos/MAH00124.MP4(der Parameter ist die Zeit in Sekunden). Weitere Aufteilungsmöglichkeiten, zum Beispiel nach Größe, finden Sie unter https://gpac.wp.imt.fr/mp4box/mp4box-documentation/ oderMP4Box -h general

Die Verkettung ist ähnlich einfach.


0

Ein weiteres Open-Source- GUI-Tool , das Videos aufteilen und vieles mehr kann, ist die Handbremse

Zum Beispiel teile ich hier mein Video auf 24.53 (mm: ss) und schneide den Frame auf der rechten Seite ab: Bildbeschreibung hier eingeben

Sie können die Vorschau der Ausgabe leicht sehen - mit der Schaltfläche "Vorschau".

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.