'copy / b'コマンドを使用すると、正確にはどうなりますか?


13

今日、私はcopy /bコマンドを使用して特定のファイルをマージできることを発見しました。特に、2つのmp3ファイルをマージすると、VLCプレーヤーはタイミングがおかしい動作をすることに気づきました。

             テイク1

ここはごく普通のことですが、最初の音楽は終わりに近づいていました...そして面白い部分が続きました...

            テイク2              テイク3

ここでは、タイムシークが文字通り実行されていました。

画像またはPDFとこの手法を組み合わせると、ファイルサイズが正しく増加するが、最初の画像のみが表示されることがわかりました。

だから私の質問は:copy /bコマンドは正確には何をするのですか?それは本当にファイルのマージに使用することを意図しているのですか、それともこれはハックですか?

回答:


17

コマンドの/bフラグcopyは、ファイルをバイナリ(つまり、意味のないバイトの生のストリーム)/aとして扱い、デフォルトの(または)動作をテキストの行として扱う(行末で)代わりに、バイトごとにコピーします。文字、ファイルの終わりなど)

あなたは、デフォルトのテキストの動作やバイナリスイッチのいずれかでテキストファイルをマージすることができますが、ほとんどすべてのバイナリファイルは動作しません。バイナリファイルには通常ヘッダーメタデータデータ構造があるため、2つのバイナリファイルからバイトを単純にコピーしてそれらが機能すると期待することはできません。など、ファイルの形式を定義します。バイナリコピーを行う場合は、すべてのバイトをそのままコピーするだけで、これらの構造体を本来あるべきではない場所に配置することになるため、それらを開くと、解析関数に問題が発生し、本質的に破損しているデータがわかります。一部のプログラムは、意味をなさない部分を無視して、それらが何ができるか(ステレオグラフィが機能することを可能にする)を単に表示しますが、エラーをスローし、ファイルが破損していると文句を言うプログラムもあります。破損を検出する機能は、ファイルタイプによって異なります。

例として、簡略化されたPDF形式を発明してみましょう。

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

ご覧のとおり、各ファイルには、いくつかの一般情報を含むファイルレベルのヘッダーが含まれ、その後にページデータを含む各ページのデータブロックが続きます。次に、それぞれが1ページを含む2つのファイルを取得し、それらをバイナリファイルとしてマージすると、2ページのファイルが1つ作成されるのではなく、1つのページで始まり、ジャンクの束(ファイルヘッダーは、プログラムが2ページ目を読み取ろうとしても意味がありません。

同じことがMP3でも起こります。それらをそのように組み合わせた場合、2番目のファイルのの最初および/または最後のID3タグは保持され、プレーヤーが次のフレームを読み取ろうとすると、オーディオデータを予期していますが、オーディオデータの予期される形式と一致しない2番目のファイルなので、何をすべきかわかりません。一部のプレーヤーはヘッダーをオーディオデータとして再生します(静的/ノイズ/ポップスなどとして再生される可能性があります)。一部のプレーヤーは、次の正しいフレームまでサウンドをカットし、一部は完全に曲の再生を停止し、一部はクラッシュする場合もあります。

copyコマンドは、プレーンテキスト(およびその後も、ASCIIテキストのみ)以外のファイル・タイプについて何も知らないので、唯一のプレーンテキストはそれで正しく組み合わせることができます。バイナリファイルは、内容を正しく解析および解釈する方法を知っているエディタを使用して組み合わせる必要があります。


いいですね、VLCは両方のmp3ファイルを再生し、正しくシークしますが、時間の変動を見たいだけではないという問題があります...
Chibueze Opata '25

私が言ったように、いくつかのプログラムは破損したファイルを許容します。VLCの解析アルゴリズムは「破損した」フレームをスキップできますが、実際のフレームではないため、正しい長さを知る方法がないため、ジャンプします。これは、上記で作成した2ページのPDFファイルをロードするようなものです。読者は実際にページがいくつあるかわからないでしょう。MP3を使用する最善の策は、バイナリコピーを実行する前に、オーディオフレームの束のみが存在するようにタグを取り除くことです。
Synetech 2012

1

あなたの例では、MP3の場合、MP3のエンコード方法が原因で、おそらく奇妙な動作が発生します。たとえば、ID3v1タグはMP3の最後の128バイト(アーティスト、アルバムなど)です。この情報は「再生可能」ではありません。VLCまたは別のメディアプレーヤーがMP3を開くと、(おそらく)最初のMP3を再生し、情報に対して面白い動作をし、ファイルの残りの部分を再生します。現在Windowsをロードしていないので、確実にテストすることはできません。

これは画像や映画と同じだと思います。ファイルのエンコード方法によって、ファイルがどのように「結合」されるかによって異なります。この機能はすべてがプレーンテキストであったDOSの時代から来たと思います


1

昔、Win MEの古き良き時代に、単にビデオクリップを連結するために使用していました。それはいつもうまくいったわけではありませんが、時々うまくいきました。

これは私が使用したコマンドの例です:

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

映画が大きすぎず、すべて同じタイプ、フレームレートなどである場合、それらは通常完全にマージされます。最近、このようなことは何も試していません。


-1

MP3については、大まかに言って、ヘッダーの後はすべてデータとして読み取ることができます。このゲーム、セガジェネシスのソニック3とソニック&ナックルズと呼ばれる別のゲームがあります。Sonic&Knucklesのオリジナルカートリッジには他のゲームを挿入するためのスロットがありましたが、Sonic 2と特に3を追加すると、チェックサムが別のポインターセットをトリガーするため、ゲームの動作が異なります。ROMを使用する初期の段階では、2つのカートリッジをハードウェアと同じように機能させたい場合はいつでも使用しましたcopy /b sonick.bin+sonic3.bin sonic3k.bin。このようにして、それらのマージはsonickがsonic3リソースを使用するための命令セット(ポインター)を持つ1つの大きな単一ROMをもたらします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.