WhatsApp Video als gif Sharing auf Android programmatisch

8

Wie kann ich eine mp4-Videodatei in eine WhatsApp-gif-Datei konvertieren (es ist einfach als GIF in App-UI angezeigt, aber intern ist ein bestimmtes MP4-Format) in Androide Share Intent, als diese Art von Medien von WhatsApp erkannt werden Chat-App ???

Ich suche viel, aber ich kann keine Informationen aus WhatsApp-Dokumenten finden (sie haben diese Art von Dokument sowieso nicht) oder irgendein Entwickler mit demselben Problem wie ich.

WAS ICH HABE:

Ich habe festgestellt, dass zu Beginn der WhatsApp "gif" MP4-Dateien eine Schleife -Wert vorhanden ist, wenn Sie sie auf Hex-Editor lesen, haben alle Dateien dies. Entfernen Sie diesen Wert, indem Sie whatsapp als normales Video erhalten (nicht als gif freigeben).

Wie kann ich diesen Wert mithilfe der ffmpeg-Codierung hinzufügen? (meine mp4 Dateien manuell mit diesem Wert zu bearbeiten, die Dateien beschädigt, vielleicht muss ich einige mp4 Header-Index beheben, die ich noch nicht weiß ...)


ERSTER 80 BYTES in Hexadezimal (vom Anfang bis zum Anfang des "MOOV" -Atoms von der MP4-Struktur):

00 00 00 1C 66 74 79 70 6D 70 34 32 00 00 00 01 6D 70 34 31 6D 70 34 32 69 73 6F 6D 00 00 00 18 62 65 61 6D 01 00 00 00 01 00 00 00 00 00 00 00 05 00 00 00 00 00 00 0C 6C 6F 6F 70 00 00 00 00 00 00 00 08 77 69 64 65 00 00 04 9F 6D 6F 6F 76

Eine kurze, von WhatsApp generierte mp4-Datei, die intern (bei App) als GIF (mit anderer UI) angezeigt wurde:

Ссылка

    
Razec Luar 03.07.2017, 20:15
quelle

1 Antwort

1
  

"... Das Problem ist, dass ich keine andere MP4-Datei bearbeiten kann, um dieses Atom hinzuzufügen   ohne die Datei zu beschädigen .

Testen Sie small_VC1edit.mp4 in WhatsApp. Wenn es das tut, was du willst, dann lies weiter ...

Um einen spielbaren MP4 zu erstellen :

Verwenden Sie original small.mp4 als Bearbeitungsbeispiel (Download-Datei und öffnen Sie mit einem Hex-Editor).

1) Fügen Sie in einem leeren Byte-Array die ersten 72 Byte des angezeigten MP4-Headers von WhatsApp hinzu.

%Vor%

Sie haben 80 Bytes angezeigt, aber die letzten 8 Bytes werden noch nicht benötigt (auch vier dieser acht Byte-Werte müssen für Ihre Ausgabedatei unterschiedlich sein).

2) Berechnen Sie die Deltas.

  • Beachten Sie, dass der (neue) WhatsApp Header 72 Byte (vor moov atom) ist.

  • Beachten Sie, dass die (ursprüngliche) Small.mp4 160 Byte Header (vor moov atom) hat.

Benutze einfach diese Logik ( a oder b ):

  • a) Wenn der WhatsApp-Header größer ist als der Input MP4:
    delta = ( WhatsApp_header - input_MP4_header)

  • b) Wenn der Eingabe-MP4-Header größer als WhatsApp ist:
    delta = ( input_MP4_header - WhatsApp_header )

Also für die Eingabe small.mp4, die 160 Header-Bytes hat (gefolgt von 4 Bytes von moovs SIZE (als 00 00 0D 83 ) und folgt dann weiteren 4 Bytes von moovs NAME (als 6D 6F 6F 76 oder utf-8 Text von " moov ").

Wir können sagen: 160 MP4 bytes - 72 WhatsApp bytes = Delta of 88 .

Wenn Sie diese ursprünglichen 160 Byte löschen und sie durch die kürzeren 72 WhatsApp-Bytes ersetzen, sind das 88 weniger Byte, die nun in dem anderen Abschnitt von MOOV data berücksichtigt werden müssen. Dieser Abschnitt ist das STCO atom.

3) Aktualisieren Sie das STCO -Atom mit neuen Offsets:

In small.mp4 beginnt das STCO -Atom bei Offset 1579 (als 73 74 63 6F ). Die vorherigen 4 Bytes (Offsets: 1575 bis 1578) sind stco s SIZE Bytes (als 00 00 00 B8 ), was der Dezimalwert 184 ist. Diese Gesamtlänge der Bytes umfasst auch die Berücksichtigung dieser 4 SIZE-Bytes.

Überspringe 12 Bytes vom Startbyte 73 der stco 's NAME Bytes 73 74 63... also überspringe diese:

%Vor%

Jetzt erreichen Sie Punkt, um jede 32-Bit-Ganzzahl (4 Bytes) von Offsets mit dem neuen delta -Wert sequenziell zu aktualisieren. Aber wie viele Offsets zu aktualisieren?

%Vor%

Also gibt es 42 Einträge zu bearbeiten. Unser Delta als 88 also für jede ganze Zahl lesen wir Wert, minus es durch 88, dann schreibe es neuen Wert an der gleichen Stelle, wiederholen Sie 41 weitere Male (mit While loop mit einem if Bedingung zu break; die Schleife).

Beim Testen einer beschädigten Datei reicht es aus, wenn Sie den ersten Eintrag bearbeiten, Frame 1 des Videos (falls keine Audiodatei) zu zeigen.

PS: Nachdem Sie die STCO-Offsets von small.mp4 bearbeitet haben, löschen Sie einfach die Start-Bytes und verbinden / verbinden Sie die verbleibenden MP4-Bytes mit dem Back / Ende des 72-Byte-WhatsApp-Headers. Speichern Sie das Array als neue Datei und testen Sie es.

    
VC.One 02.11.2017 19:53
quelle

Tags und Links