O que exatamente acontece quando você usa o comando 'copy / b'?

13

Hoje, descobri que podia mesclar certos arquivos usando o copy /bcomando Em particular, notei que, quando mesclei dois arquivos mp3, o VLC player exibiu comportamentos engraçados com o tempo:

             Take 1

Aqui, é bastante normal, mas a primeira música estava chegando ao fim ... então a parte engraçada seguiu ....

            Take 2              Take 3

Aqui, a busca pelo tempo estava literalmente correndo enquanto tocava.

Ao combinar imagens ou PDF com essa técnica, descobri que haverá um aumento correto no tamanho do arquivo, mas apenas a primeira imagem será exibida.

Então, minha pergunta é: O que exatamente o copy /bcomando faz? Ele realmente deve ser usado para mesclar arquivos ou isso é um hack?

Chibueze Opata
fonte

Respostas:

17

O /bsinalizador do copycomando trata os arquivos como binários (isto é, um fluxo bruto de bytes sem sentido) e os copia byte por byte, em vez do /acomportamento padrão (ou ) que os trata como linhas de texto (com final de linha caracteres, fim de arquivo etc.)

Você pode mesclar arquivos de texto com o comportamento de texto padrão ou a opção binária, mas praticamente qualquer arquivo binário não funcionará. Você não pode simplesmente copiar os bytes de dois arquivos binários e esperar que funcionem porque os arquivos binários geralmente têm cabeçalhos , metadados , estruturas de dadosetc. que definem o formato do arquivo. Se você fizer uma cópia binária, simplesmente copiará todos os bytes, como está, o que acaba colocando essas estruturas em locais que não deveriam estar; portanto, quando você as abre, a função de análise terá problemas e verá o que é essencialmente dados corrompidos. . Alguns programas ignoram as partes que não fazem sentido e simplesmente mostram o que podem (o que permite que a estereografia funcione), mas alguns lançam um erro e reclamam que o arquivo está corrompido. A capacidade de detectar corrupção depende do tipo de arquivo.

Como exemplo, vamos inventar um formato PDF simplificado:

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

Como você pode ver, cada arquivo conterá um cabeçalho no nível do arquivo com algumas informações gerais, seguidas por blocos de dados para cada página que contém os dados da página. Se você pegar dois arquivos, cada um contendo uma página, e os mesclar como arquivos binários, não criará um arquivo de duas páginas, mas sim um arquivo corrompido que começa com uma página e então tem um monte de lixo (o arquivo cabeçalho não faz sentido quando o programa tenta ler a página dois).

O mesmo acontece com seus MP3s. Quando você as combina dessa maneira, as tags ID3 no início e / ou no final do segundo arquivo são mantidas e, quando o player tenta ler o próximo quadro, espera dados de áudio, mas encontra o cabeçalho do segundo arquivo que não corresponde ao formato esperado para os dados de áudio e, portanto, não sabe o que fazer. Alguns jogadores tocam o cabeçalho como dados de áudio (que provavelmente tocam como estático / ruído / pop / etc.), Outros cortam o som até o próximo quadro correto, outros podem parar de tocar a música e outros podem até travar .

O copycomando não sabe nada sobre tipos de arquivo além de texto sem formatação (e mesmo assim, apenas texto ASCII); portanto, apenas texto sem formatação pode ser combinado corretamente com ele. Os arquivos binários devem ser combinados usando um editor que saiba analisar e interpretar o conteúdo corretamente.

Synetech
fonte
Bom, VLC reproduz arquivos de MP3 e até mesmo busca corretamente, porém, único problema é que você não apenas quer ver as variações de tempo ...
Chibueze Opata
Bem, como eu disse, alguns programas são tolerantes a arquivos corrompidos. O algoritmo de análise do VLC pode pular os quadros "corrompidos", mas, como não são quadros reais, não há como saber o tamanho correto e, portanto, pula. É como se você carregasse o arquivo PDF de duas páginas acima inventado; o leitor não saberia quantas páginas existem realmente. Sua melhor aposta com MP3s é retirar as tags para que haja apenas um monte de quadros de áudio antes de fazer uma cópia binária.
Synetech
1

No seu exemplo, com MP3s, provavelmente haverá comportamentos estranhos devido à forma como os MP3s são codificados. Por exemplo, as tags ID3v1 são os últimos 128 bytes de um MP3 (ou seja, artista, álbum etc.). Esta informação não é "reproduzível". Quando o VLC ou outro reprodutor de mídia abre o MP3, ele (provavelmente) reproduz o primeiro MP3, age de maneira engraçada pelas informações e, em seguida, reproduz o restante do arquivo. Eu não tenho o Windows carregado agora, então não posso testar com certeza.

Eu diria que isso é o mesmo que imagens e filmes; dependendo de como os arquivos são codificados depende de como os arquivos serão "combinados". Eu imagino que essa funcionalidade veio dos dias do DOS, quando tudo estava em texto simples

Canadian Luke
fonte
1

Há muito tempo, nos bons e velhos dias do Win ME, eu simplesmente concatenava clipes de vídeo. Não funcionava o tempo todo, mas funcionava algumas vezes.

Este é um exemplo do comando que eu usei:

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

Se os filmes não forem muito grandes e todos do mesmo tipo, taxa de quadros etc., eles geralmente se fundem na perfeição. Ultimamente não tentei nada assim.

Terry Hollett
fonte
-1

Em relação ao MP3, aproximadamente, o que está depois do cabeçalho pode ser lido como dados. Existe esse jogo, Sonic 3 em Sega Genesis e outro jogo chamado Sonic & Knuckles. O cartucho original do Sonic & Knuckles tinha um slot destinado a inserir outros jogos, mas, quando adicionados Sonic 2 e especialmente 3, provavelmente a soma de verificação acionaria outro conjunto de indicadores, o jogo se comportaria de maneira diferente. No estágio inicial do uso de ROMs, sempre que queríamos colocar dois cartuchos para funcionar como se fosse no hardware, usamos copy /b sonick.bin+sonic3.bin sonic3k.bin. Dessa forma, sua mesclagem resultaria em uma grande ROM única, na qual sonick teria o conjunto de instruções (ponteiros) para fazê-lo usar os recursos sonic3.

Deise Candido
fonte