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 --
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
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
ffmpeg -i "concat:teil1.mp4|teil2.mp4|teil3.mp4" -c:v copy -c:a copy -c:s copy -f mp4 -y ausgabe.mp4ffmpeg -safe 0 -f concat -i <(printf "file '$PWD/%s'\n" *.mp4) -c copy -y ausgabe.mp4ffmpeg -f concat -i filmteile.txt -c:v copy -c:a copy -c:s copy -f mp4 -y ausgabe.mp4Es 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
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 ...