Inhaltsverzeichnis

MP4

siehe auch: MKVToolnix

FFmpeg 4.1.3 (Sept. 2019):

opus in MP4 support is experimental, add '-strict -2' if you want to use it.
Could not write header for output file #0 (incorrect codec parameters ?): Experimental feature
Error initializing output stream 0:1 --

MP4Box

Das MP4-Dateiformat basiert auf dem Apple-QuickTime-Dateiformat. Mit MP4Box kann man MP4-, 3GP- und MOV-Dateien bearbeiten.

MP4Box installieren:

> pkg install multimedia/gpac-mp4box
> pkg info | fgrep -i mp4
gpac-mp4box-0.5.0              Tool for merge mpg4 from Gpac
mp4v2-1.9.1_1                  Library and tools to read, create, and modify mp4 files

Inhalt des Paketes anzeigen:

> pkg info -l multimedia/gpac-mp4box                                                               
gpac-mp4box-0.5.0:
        /usr/local/bin/mp4box
        /usr/local/man/man1/mp4box.1.gz
        /usr/local/share/licenses/gpac-mp4box-0.5.0/LGPL21
        /usr/local/share/licenses/gpac-mp4box-0.5.0/LICENSE
        /usr/local/share/licenses/gpac-mp4box-0.5.0/catalog.mk

Hilfe anzeigen:

> mp4box -h
MP4Box [option] input [option]
 -h general           general options help
 -h hint              hinting options help
 -h import            import options help
 -h encode            encode options help
 -h meta              meta handling options help
 -h extract           extraction options help
 -h dump              dump options help
 -h swf               Flash (SWF) options help
 -h crypt             ISMA E&A options help
 -h format            supported formats help
 -h rtp               file streamer help
 -h live              BIFS streamer help

 -nodes               lists supported MPEG4 nodes
 -node NodeName       gets MPEG4 node syntax and QP info
 -xnodes              lists supported X3D nodes
 -xnode NodeName      gets X3D node syntax
 -snodes              lists supported SVG nodes
 -snode NodeName      gets SVG node syntax
 -languages           lists supported ISO 639 languages

 -quiet                quiet mode
 -noprog               disables progress
 -v                   verbose mode
 -logs                set log tools and levels, formatted as a ':'-separated list of toolX[:toolZ]@levelX
 -version             gets build version

ein Stück aus dem MP4-Film ausschneiden:

> mp4box -splitz 5487:5590 Terry_Pratchett_-_Ab_die_Post_13-05-19_12-40_rtl.mp4
Adjusting chunk start time to previous random access at 5486.60 sec
Adjusting chunk end time to previous random access at 5587.60 sec
Extracting chunk Terry_Pratchett_-_Ab_die_Post_13-05-19_12-40_rtl_5486_5587.mp4 - duration 101.00s (5486.60s->5590.00s)

> ls -lha
-rw-r-----     1 fritz  www   1.2G Jul 29 01:49 Terry_Pratchett_-_Ab_die_Post_13-05-19_12-40_rtl.mp4
-rw-r--r--     1 fritz  www    15M Jul 29 01:51 Terry_Pratchett_-_Ab_die_Post_13-05-19_12-40_rtl_5486_5587.mp4

mehrere MP4-Filme verbinden

mit FFmpeg verbinden

Die Filme, die mit concat zusammengesetzt werden sollen, müssen im Arbeitsverzeichnis liegen (PWD), denn in dem Pfad darf kein Verzeichnis vorkommen. Dateinamen, mit Verzeichnissen gelten als "unsicher", will man die Filme dennoch mit Verzeichnis angeben, dann muss man die Option -safe 0 hinzufügen. Zum Beispiel so ⇒ concat -safe 0 -i filmteile.txt

Es müssen alle zu verbindenden Filme genau den gleichen Aufbau haben. Das heißt, um sicher zu gehen, sollten alle Teile mit genau den gleichen Parametern transkodiert worden sein.

Auch die Reihenfolge der einzelnen Spuren müssen in allen Teilen identisch sein. Es darf also nicht die Audio-Spur in einem Teil die ID "0" und in dem anderen Teil die ID "1" haben. Und auch müssen in allen oder in keinem eine Untertitel-Spur vorhanden sein.

…sie müssen wirklich alle absolut gleich aufgebaut sein!

Als erstes müssen wir eine Liste mit allen Filmteilen im richtigen Format anlegen:

> echo "file 'teil1.mp4'" > filmteile.txt
> echo "file 'teil2.mp4'" >> filmteile.txt
> echo "file 'teil3.mp4'" >> filmteile.txt

jetzt können alle Teile verbunden werden:

> ffmpeg -f concat -i filmteile.txt -c:v copy -c:a copy -c:s copy -f mp4 -y kompletterfilm.mp4

mit mp4box verbinden

eine Video- und eine Audio-Datei zu einem Film zusammenfühgen:

mp4box -add video.h264 -add audio.aac output.mp4

eine Video-Datei mit einer bestimmten FPS-Zahl mit einer Audio-Datei zu einem Film zusammenfühgen:

mp4box -add video.h264:fps=X -add audio.aac output.mp4

eine Video-Datei (alle Video-Spuren) mit einer bestimmten ID und FPS-Zahl mit einer Audio-Datei (alle Audio-Spuren) zu einem Film zusammenfühgen:

mp4box -add 'video.h264#video:trackID=1' -hint -fps 25.000 -add 'audio.aac#audio:trackID=2' video.mp4

eine Video-Datei mit einer bestimmten FPS-Zahl + Namen + Sprachbezeichnung und eine Audio-Datei mit Namen + Sprachbezeichnung zu einem Film zusammenfühgen:

mp4box -add "video.h264:fps=23.976:name=MyMovieMP4:lang=en" -add "audio.aac:lang=en:name=2 Channel Audio" "video.mp4"

eine Video- und eine Audio-Datei mit einer bestimmten FPS-Zahl zu einem Film zusammenfühgen:

mp4box -fps 24 -add video.h264 -add audio.ac3 video.mp4

AVC-H264 import - frame size 1280 x 720 at 24.000 FPS
Import results: 31671 samples - Slices: 5672 I 125048 P 122648 B - 32288 SEI - 4936 IDR
AC3 import - sample rate 48000 - 6 channels
Saving to video.mp4: 0.500 secs Interleaving

mehrere Filme hintereinander zusammenfühgen:

mp4box -cat film1.m2t ... video.mp4

ein Stück aus einem Film rausschneiden (Zeitangabe in Sekunden):

mp4box -split-chunk [Start]:[Ende] video.mp4 ...
mp4box -split-chunk 300:360 video.mp4 ...