Entwickler-Ecke
Off Topic - mp4-Dateien verbinden
Mathematiker - Mo 14.09.15 21:47
Titel: mp4-Dateien verbinden
Hallo,
im Moment bin ich gerade mit dem "Retten" von Videodaten auf selbstgebrannten DVDs beschäftigt. Da die doch schon ein paar Jahre alt sind, gab's die ersten Verluste. Leider.
Ich transformiere die VOB-Daten in mp4 mit einer Videobitrate von 2400 kb/s und einer Audiorate von 192 kb/s. Funktioniert perfekt, wenn gleich für eine 2 Stunden-DVD locker 60 Minuten Kodierungszeit auftreten.
Mein Problem ist, dass das verwendete Programm XMediaRecode leider keine Möglichkeit besitzt, mehrere mp4-Dateien (Jobs) zu einer zusammenzufügen. Dadurch habe ich mitunter mehrere kleine Dateien, die eigentlich zusammengehören.
Über das Movie Studio Platinum wollte ich die Dateien verbinden, musste aber feststellen, das alles neu gerendert wird und dort der Zeitbedarf noch größer ist. Außerdem gibt es beim erneuten Kodieren Qualitätsverluste.
Und damit meine Frage:
Kennt jemand von euch eine Möglichkeit zwei mp4-Dateien "einfach" aneinander zu hängen, d.h. eine daraus zu machen, so dass sie aber noch abspielbar bleibt. Zwischen den einzelnen Dateien benötige ich keine eleganten Übergänge, es reicht wenn sie hintereinander abgespielt werden.
Danke
Mathematiker
Delete - Mo 14.09.15 22:00
Man kann COPY von CMD.exe nutzen - arbeitet auch unsichtbar im Hintergrund - das Hauptprogramm bleibt bedienbar.
Mit /B wird binär kopiert, COPY kann beliebig viele Files aneinander hängen.
Stark gekürzter Auszug:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var FullOutputFileName, SummaryLine, CommandProcLine, FILETOCOPY: string;
SummaryLine:= '/Y /B "'; SummaryLine:=SummaryLine + FILETOCOPY +'" '; CommandProcLine:='copy '+ SummaryLine +' "'+ FullOutputFileName+'"'; ExecAndWait(PChar('cmd.exe /C '+ CommandProcLine)); |
Ich füttere die Procedure mit dem Inhalt einer Listbox:
Delphi-Quelltext
1:
| UniteFile(LB2.Items, TargetFile); |
Alternative in CMD.exe
copy /B X:\*.mp4 NEU.mp4
Bei grossen Files braucht man natürlich NTFS.
Zitat:
Um Dateien aneinander zu hängen, geben Sie eine einzelne Datei als Ziel an,
aber mehrere Dateien als Quelle (unter Verwendung von Platzhaltern oder
in der Form: Datei1 + Datei2 + Datei3
Mathematiker - Mo 14.09.15 22:31
Hallo Hathor,
Danke für den Hinweis. Ich habe es erst einmal mit cmd versucht und er kopiert auch zwei Dateien zusammen.
Beim Abspielen erkennt der Mediaplayer aber nur das erste Video, das zweite wird ignoriert. Leider.
Obwohl ich keine Ahnung vom Aufbau einer mp4-Datei habe, vermute ich, dass irgendetwas in einer Art Datei-Header eingetragen werden muss. Aber was?
Die Delphi-Variante geht bei mir nicht, da D7 bei ExecandWait protestiert. Die ExeandWait-Lösungen, z.B. im Swiss Delphi Center, sind irgendetwas anderes. :nixweiss:
Beste Grüße
Mathematiker
Narses - Mo 14.09.15 22:35
Moin!
Ich hab ja erst gedacht: :rofl:
:nixweiss:
:suspect: (das geht doch nicht wirklich... oder?) :gruebel:
*klimper* *test*
:shock: Das geht wirklich! :hair: Krasses Fileformat. 8) (zumindest VLC spielt die Videos hintereinander ab)
cu
Narses
PS: hier manuell zum selbst testen:
Quelltext
1:
| copy file1.mp4 /b +file2.mp4 /b neu.mp4 /b |
Mathematiker - Mo 14.09.15 22:43
Hallo Narses,
Narses hat folgendes geschrieben : |
:shock: Das geht wirklich! :hair: Krasses Fileformat. 8) (zumindest VLC spielt die Videos hintereinander ab) |
Der normale Mediaplayer von Windows macht es leider nicht. :cry: Aus einem 6 min Video und einem 5 min Video werden nur die ersten 6 min, obwohl die Datei alles enthält.
Im Movie Studio wird das Mix-File mit einer Fehlermeldung gar nicht erst geladen.
Ob es mein Blu Ray-Player über USB korrekt abspielt, muss ich noch testen.
Beste Grüße
Mathematiker
Narses - Mo 14.09.15 22:51
Moin!
Mathematiker hat folgendes geschrieben : |
Der normale Mediaplayer von Windows macht es leider nicht. |
Das wundert mich auch nicht. ;) Wird eine spezielle Situation beim VLC sein, dessen IO-Handler-Schicht eben streamorientiert arbeitet und damit klar kommt. :nixweiss:
Hiermit empfehle ich diese Vorgehensweise ausdrücklich nicht (egal für welches strukturierte Dateiformat; bei einer Textdatei mag das ja noch gehen)!
Das "Problem" mit dem Verketten liegt hier leider wirklich tiefer: das geht nur dann, wenn du Containerformate hast und die enthaltenen Codec-Daten die gleichen Sampleraten und Interleaves haben. Das wird in den seltensten Fällen so sein, weshalb die meisten Videobearbeitungstools auch gleich resamplen. :? Das ist nicht schön, geht aber immer (meint: führt zu einem Ziel; das reicht den meisten Leuten, die nicht wissen [wollen], was in den Dateien wirklich drin ist). :idea:
cu
Narses
Delete - Mo 14.09.15 22:56
Bei problematischen Media-Files:
AVSMediaPlayer
http://download.avs4you.com/distributives/AVSMediaPlayer.exe
Zitat:
Hinweis: Die Software enthält Adware. Bitte verfolgen Sie die Installation aufmerksam und wählen Sie, wenn möglich, eine benutzerdefinierte Installation. Lehnen Sie alle nicht benötigten Zusatz-Angebote ab, oder entfernen Sie die entsprechenden Haken aus den Checkboxen.
MediaInfo gibt Infos über Format:
https://mediaarea.net/de/MediaInfo
Delete - Mo 14.09.15 23:26
Grundsätzlich kann man da schon mit Delphi was basteln, denke ich, wenn man davon ausgeht, daß die jeweiligen Header der verschiedenen Videoformate oder auch irgend eine Dateiende-Markierung dafür verantwortlich sind, daß die zusammenkopierten Videos nicht alle zu sehen sind beim Abspielen. Dazu müßte man allerdings die Dateistrukturen der Video-Formate kennen und dann lediglich den Video-Inhalt speichern. Voraussetzung für diese Vorgehensweise ist selbstverständlich, daß die Quellvideos, die zusammenkopiert werden sollen, alle im selben Format vorliegen, nicht nur was den VideoCodec betrifft, sondern ebenso Auflösung und Qualität.
Delete - Di 15.09.15 08:44
Ich nutze COPY von CMD.EXE, aufgerufen in einem DELPHI-Programm, um DVR-Files zusammenzufügen.
Diese DVR-Files sind von Satelliten-Empfängern.
Das Ergebnis ist ein grosses File, das problemlos von VLC u.a. Mediaplayern abgespielt wird.
Sinspin - Di 15.09.15 09:48
Ich verwende seit Jahren
Freemake Video Converter [
http://www.freemake.com/de]. Soweit ich mich erinnern kann wird auch keine Adware bei der Installation mit installiert. Aber aufpassen ist auf alle Fälle besser.
Habe damit schon ettliche Videos konvertiert und DVDs umgewandelt.
Das Programm arbeitet sehr schnell und mit einfachen Optionen zum Einstellen der Video/Ton Qualität. Da gibt es auch eine Option mit der man einzelne Videos aneinander hängen kann.
Der einzige Nachteil in der Free Version ist, dass ans Ende des Videos das Freemake Logo angehangen wird.
Delete - Di 15.09.15 14:19
hathor hat folgendes geschrieben : |
Ich nutze COPY von CMD.EXE, aufgerufen in einem DELPHI-Programm, um DVR-Files zusammenzufügen. Diese DVR-Files sind von Satelliten-Empfängern. Das Ergebnis ist ein grosses File, das problemlos von VCL u.a. Mediaplayern abgespielt wird. |
Funktioniert aber leider nicht mit MP4-Dateien, da spielt auch der VLC nur das erste Video ab ... hab ich eben ausprobiert.
Es ging aber doch gerade darum, diese lange Renderzeit, die so ein Konverter benötigt, zu vermeiden. Mathematiker hat doch bereits einen Konverter im Einsatz.
Delete - Di 15.09.15 15:15
MP4 ist nur ein Container.
Was drin ist, zeigt das obengenannte MEDIAINFO-Programm an, z.B. MPEG-PS, AVC und MPEG2-Audio.
Meine SAT-Empfänger mit PVR speichern die Files in kleinen Häppchen ohne bei jedem neue File-Header zu schreiben.
Theoretisch könnte ein SAT-Empfänger bei NTFS-HDDs auch in einem Stück speichern - tut er aber nicht...
Natürlich haben die Video-Packets Header, aber darum geht es hier nicht.
Es gibt auch Programme, die etwas Ähnliches tun: einfach suchen nach APPEND VIDEO, CONCAT VIDEO, ALIDVR,
MERGE VIDEO, DVRMERGE (ist geeignet für Receiver, die überlappend speichern), DVR2TS...
SMO - Di 15.09.15 15:45
MP4-Dateien einfach nur aneinanderhängen (copy /b +) ist eine schlechte Idee.
Manche Player kommen damit klar, aber es ist eigentlich Pfusch.
Wie hathor schrieb, mp4 ist ein Container. Man müsste also zuerst "demuxen" - die enthaltenen Datenströme (Video, Audio, ...) entpacken. Die könnte man dann jeweils binär aneinanderhängen, aber natürlich nur wenn die Codecs und Codeceinstellungen identisch sind. Das Ergebnis dann neu "muxen" / in einen Container packen.
Es gibt diverse Software, die das kann.
Sollte z.B. mit ffmpeg möglich sein [
https://trac.ffmpeg.org/wiki/Concatenate] (Kommandozeilentool für Linux, auch für Windows verfügbar).
Alternativ: Mathematiker, probiere mal die
VOB-Dateien der DVDs zu konkatenieren (copy /b +). Das sollte besser klappen, und damit bekommst du dann pro DVD auch nur ein Ausgabevideo.
Mathematiker - Di 15.09.15 16:46
Hallo,
vielen Dank an Alle für die vielen Hinweise.
Ich werde nacheinander alles ausprobieren, wobei ich mal mit dem Zusammenfügen der VOB-Dateien anfange. Da muss ich zwar noch einmal transformieren, aber mal sehen, ob's geht.
Anschließend teste ich die Programmvorschläge.
Nochmals besten Dank
Mathematiker
Sinspin - Di 15.09.15 19:35
Perlsau hat folgendes geschrieben : |
Es ging aber doch gerade darum, diese lange Renderzeit, die so ein Konverter benötigt, zu vermeiden. Mathematiker hat doch bereits einen Konverter im Einsatz. |
Das ist schon Glasklar, aber mit dem Konverter spart er sich das zusammenfügen, da es gleich als Option gewählt werden kann.
Und, selbst auf meiner alten Kiste haben 4 mal 45 Minuten direkt von DVD hohlen mit umcodieren in mp4 in orginal Qualität nie über zwei Stunden gedauert. Also ist es auf neueren Kisten nochmal schneller.
Mathematiker - Di 15.09.15 23:34
Hallo,
hathor hat folgendes geschrieben : |
DVDVob2Mpg is a simple, free, straightforward and very fast VOB (or VRO) file to MPG converter ... It does not re-encode the video and audio. |
Ich habe es getestet.
Die Transformation geschieht in wenigen Sekunden, auch bei aneinander gefügten VOB-Dateien. Leider wird im Mediaplayer nur noch der Audioteil abgespielt. VLC zeigt auch Bild.
Nebenbei: Ich kannte den VLC-Player noch nicht, habe ihn installiert und werde den Windows-Mediaplayer wohl nicht mehr nutzen. :wink:
Beste Grüße
Mathematiker
Delphi-Laie - Mi 16.09.15 04:47
Mathematiker hat folgendes geschrieben : |
Nebenbei: Ich kannte den VLC-Player noch nicht, habe ihn installiert und werde den Windows-Mediaplayer wohl nicht mehr nutzen. :wink: |
Der VLC-Mediaplayer ist seit Jahr und Tag die erste Adresse für Videodateien, der Mediaplayer hingegen bestenfalls drittklassig.
SMO - Mi 16.09.15 14:44
Delphi-Laie hat folgendes geschrieben : |
Der VLC-Mediaplayer ist seit Jahr und Tag die erste Adresse für Videodateien, der Mediaplayer hingegen bestenfalls drittklassig. |
Da muss ich widersprechen. Wenn es um Videowiedergabe in Windows geht, hat
MPC-HC (Media Player Classic Home Cinema) [
https://mpc-hc.org/] die Nase vorn.
Schlanker als VLC, effizienter, bessere Unterstützung von hardwarebeschleunigter Dekodierung.
VLC hat natürlich auch ein paar Vorteile (Cross-Platform, Konvertierungsoptionen, Netzwerkstreaming - VLC steht schließlich für VideoLAN Client).
Aber wenn man diese Zusätze nicht braucht (oder andere Programme dafür hat), dann ist seit jeher MPC-HC die erste Adresse. ;)
Narses - Mi 16.09.15 15:06
Moin!
Auch wenn das hier schon OffTopic ist :P könnten wir bitte die Diskussion um den besten Media-Player unter Windows in einen anderen Thread verlagern? Danke. :|
Alternativ trenne ich das auch gerne jetzt schon ab und mach einen eigenen Thread draus (was
Mathematiker als TE z.B. gerne wünschen dürfte). ;)
cu
Narses
Mathematiker - Mi 16.09.15 15:20
Hallo,
Narses hat folgendes geschrieben : |
Alternativ trenne ich das auch gerne jetzt schon ab und mach einen eigenen Thread draus (was Mathematiker als TE z.B. gerne wünschen dürfte). ;) |
Nicht unbedingt.
Ich habe mit meiner "Nebenbei"-Bemerkung über VLC das Off-Topic im Off-Topic losgetreten. Sorry. :oops:
Mir geht's nur um die mp4-Dateien. Die Qualität verschiedener Player ist wohl individuelle Geschmackssache.
Beste Grüße
Mathematiker
Delete - Mi 16.09.15 15:49
Weil das Kopieren von DVD-Files (VOB) aber auch zum Thema gehört, habe ich mal VLC getestet.
Der Aufruf in einem Batch-File ist
Quelltext
1: 2:
| VLC.exe G:\VIDEO_TS\VTS_01_1.VOB G:\VIDEO_TS\VTS_01_2.VOB --sout #gather:std{access=file,dst=F:\VTS.MPG} --sout-keep @pause |
Dieses Batch-File sollte im Verzeichnis von VLC sein, bei mir
C:\Program Files (x86)\VideoLAN\VLC\
dann spart man sich die Pfadangabe.
Man kann auch mehr VOB-Files angeben.
G: ist mein DVD-Player.
Auf F: habe ich Schreibrechte. Der Name des MPG-Files ist beliebig, sollte aber keine Leerzeichen enthalten.
Geschwindigkeit: ca. 6-fach.
Das Ergebnis lässt sich abspielen, aber die Länge in Min und Sek ist nur beim AVSMediaPlayer korrekt.
Anderer Test:
Handbrake
https://handbrake.fr/downloads.php
Viele Einstellungen möglich, aber hohe Geschwindigkeit: etwa 5-fach.
Codec mp42, Filegröße fast halbiert, Längenangabe richtig!
Delete - Mi 16.09.15 16:31
- Nachträglich durch die Entwickler-Ecke gelöscht -
Martok - Mi 16.09.15 20:35
Avidemux kann das auch.
Ansonsten, aus der Kategorie "komische Idee, funktioniert aber": Kopiere (also für alle Streams "Copy" einstellen) die VOB-Dateien mit XMR in MPEG-TS-Container, die kannst du dann direkt verketten (
copy /B o.ä.), und das so entstandene Gebilde neu codieren. Ja, innerhalb eines DVB-TS darf auch das Format nach Belieben wechseln ;)
Wenn du
weißt, dass die alle das gleiche Format hatten, kannst du das auch direkt umkopieren und ggf. das rekomprimieren sparen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!