Was genau passiert, wenn Sie den Befehl 'copy / b' verwenden?

13

Heute habe ich gerade entdeckt, dass ich bestimmte Dateien mit dem copy /bBefehl zusammenführen kann. Insbesondere ist mir aufgefallen, dass der VLC-Player beim Zusammenführen von zwei MP3-Dateien ein komisches Verhalten beim Timing zeigte:

             Nimm 1

Hier ist es ganz normal, aber die erste Musik ging zu Ende ... dann folgte der lustige Teil ...

            Nimm 2              Nimm 3

Hier lief die Zeitsuche buchstäblich, während sie spielte.

Beim Kombinieren von Bildern oder PDF mit dieser Technik habe ich festgestellt, dass die Dateigröße korrekt zunimmt, aber nur das erste Bild angezeigt wird.

Meine Frage lautet also: Was genau macht der copy /bBefehl? Ist es wirklich zum Zusammenführen von Dateien gedacht oder ist dies ein Hack?

Chibueze Opata
quelle

Antworten:

17

Das /bFlag des copyBefehls behandelt die Dateien als binär (dh als Rohdatenstrom bedeutungsloser Bytes) und kopiert sie Byte für Byte anstelle des Standardverhaltens (oder des /aVerhaltens), das sie als Textzeilen (mit Zeilenende) behandelt Zeichen, Dateiende usw.)

Sie können Textdateien entweder mit dem Standardtextverhalten oder dem Binärschalter zusammenführen, aber so ziemlich jede Binärdatei funktioniert nicht. Sie können die Bytes nicht einfach aus zwei Binärdateien kopieren und erwarten, dass sie funktionieren, da Binärdateien normalerweise Header , Metadaten und Datenstrukturen habenusw., die das Format der Datei definieren. Wenn Sie eine binäre Kopie erstellen, kopieren Sie einfach alle Bytes so wie sie sind, wodurch diese Strukturen an Stellen platziert werden, an denen sie nicht sein sollten. Wenn Sie sie also öffnen, hat die Analysefunktion Probleme und erkennt, was im Wesentlichen beschädigte Daten sind . Einige Programme ignorieren die Teile, die keinen Sinn ergeben, und zeigen einfach, was sie können (wodurch Stereografie funktioniert), andere geben jedoch einen Fehler aus und beschweren sich, dass die Datei beschädigt ist. Die Fähigkeit, Beschädigungen zu erkennen, hängt vom Dateityp ab.

Lassen Sie uns als Beispiel ein vereinfachtes PDF-Format erfinden:

Byte(s)    Meaning
---------------------

File header:
0-1        # of Pages
2-3        Language
4-5        Font
6-EOF      Data (each page encoded separately)

Page data:
0-1        Page number
2-3        # of characters on page
4-#chars   Letters contained on the page

Wie Sie sehen können, enthält jede Datei einen Header auf Dateiebene mit einigen allgemeinen Informationen, gefolgt von Datenblöcken für jede Seite, die die Seitendaten enthält. Wenn Sie dann zwei Dateien mit jeweils einer Seite als Binärdateien zusammenführen, erstellen Sie nicht eine zweiseitige Datei, sondern eine beschädigte Datei, die mit einer Seite beginnt und dann eine Menge Junk enthält (die Datei) Header macht keinen Sinn, wenn das Programm versucht, Seite zwei zu lesen).

Das gleiche passiert für Ihre MP3s. Wenn Sie sie so kombiniert haben, bleiben die ID3-Tags am Anfang und / oder Ende der zweiten Datei erhalten, und wenn der Player versucht, das nächste Bild zu lesen, erwartet er Audiodaten, findet aber den Header der zweite Datei, die nicht dem erwarteten Format für Audiodaten entspricht, daher weiß sie nicht, was zu tun ist. Einige Player spielen den Header als Audiodaten ab (die wahrscheinlich als statische Daten / Rauschen / Pops / usw. Wiedergegeben werden), andere schneiden den Ton bis zum nächsten richtigen Frame ab, andere hören möglicherweise die Wiedergabe des Songs ganz auf und andere stürzen möglicherweise sogar ab .

Der copyBefehl kennt keine anderen Dateitypen als Nur-Text (und selbst dann nur ASCII-Text), sodass nur Nur-Text korrekt damit kombiniert werden kann. Binärdateien müssen mit einem Editor kombiniert werden, der weiß, wie der Inhalt richtig analysiert und interpretiert wird.

Synetech
quelle
Schön, VLC spielt beide MP3-Dateien ab und sucht sogar richtig. Das einzige Problem ist, dass Sie nicht nur die
Zeitvariationen
Wie ich bereits sagte, sind einige Programme tolerant gegenüber korrupten Dateien. Der Parsing-Algorithmus von VLC kann die "beschädigten" Frames überspringen. Da es sich jedoch nicht um tatsächliche Frames handelt, kann er die richtige Länge nicht ermitteln und springt daher herum. Es ist so, als würden Sie die oben erfundene zweiseitige PDF-Datei laden. Der Leser würde nicht wissen, wie viele Seiten es tatsächlich gibt. Bei MP3s ist es am besten, die Tags so zu entfernen, dass nur eine Reihe von Audio-Frames vorhanden sind, bevor Sie eine Binärkopie erstellen.
Synetech
1

In Ihrem Beispiel wird es bei MP3s wahrscheinlich zu seltsamen Verhaltensweisen kommen, da MP3s codiert werden. Beispielsweise sind die ID3v1-Tags die letzten 128 Bytes einer MP3-Datei (z. B. Künstler, Album usw.). Diese Informationen sind nicht "spielbar". Wenn VLC oder ein anderer Media Player die MP3-Datei öffnet, wird sie (wahrscheinlich) die erste MP3-Datei abspielen, sich für die Informationen lustig verhalten und möglicherweise den Rest der Datei abspielen. Ich habe derzeit kein Windows geladen, daher kann ich nicht sicher testen.

Ich würde annehmen, dass dies dasselbe ist wie Bilder und Filme. Je nachdem, wie die Dateien codiert sind, hängt es davon ab, wie die Dateien "kombiniert" werden. Ich stelle mir vor, diese Funktionalität stammt aus den Tagen von DOS, als alles im Klartext war

Kanadischer Luke
quelle
1

Vor langer Zeit habe ich in den guten alten Win ME-Tagen einfach Videoclips verkettet. Es hat nicht die ganze Zeit funktioniert, aber es hat manchmal funktioniert.

Dies ist ein Beispiel für den Befehl, den ich verwendet habe:

copy /b movie1.mpg + movie2.mpg + movie3.mpg movie4.mpg

Wenn die Filme nicht zu groß waren und alle den gleichen Typ, die gleiche Bildrate usw. hatten, wurden sie normalerweise fehlerfrei zusammengeführt. Ich habe so etwas in letzter Zeit nicht versucht.

Terry Hollett
quelle
-1

In Bezug auf MP3 kann ungefähr alles, was nach dem Header steht, als Daten gelesen werden. Es gibt dieses Spiel, Sonic 3 in Sega Genesis und ein anderes Spiel namens Sonic & Knuckles. Die Sonic & Knuckles-Originalkassette hatte einen Steckplatz zum Einfügen anderer Spiele, aber wenn Sonic 2 und speziell 3 hinzugefügt wurden, würde die Prüfsumme wahrscheinlich einen weiteren Satz von Zeigern auslösen, und das Spiel würde sich anders verhalten. In der frühen Phase der Verwendung von ROMs verwendeten wir immer dann, wenn wir zwei Kassetten so einsetzen wollten, wie es in der Hardware der Fall war copy /b sonick.bin+sonic3.bin sonic3k.bin. Auf diese Weise würde ihre Zusammenführung zu einem großen einzelnen ROM führen, in dem sonick über den Befehlssatz (Zeiger) verfügt, mit dem sonic3-Ressourcen verwendet werden können.

Deise Candido
quelle