WhatsAppvideo作为GIF在编程上共享

我怎样才能将MP4video文件转换为WhatsApp的GIF文件(它简单地显示为应用程序用户界面内的GIF,但内部是一个特定的MP4格式)在Android共享意图,通过WhatsApp聊天应用程序被认可为这种types的媒体? ??

我search了很多,但是我找不到任何来自WhatsApp文档的信息(他们没有这种types的文档)或者任何与我有同样问题的开发者。

我拥有的:

我发现,如果你在hex编辑器上阅读它们,在whatsapp“gif”mp4文件的开始处显示一个循环值,所有文件都有这个。 删除这个值使得whatsapp作为普通video接收(不共享为gif)。

我怎样才能使用ffmpeg编码添加此值? (用这个值手动编辑我的mp4文件损坏的文件,也许我必须修复一些我还不知道的mp4头索引…)

在这里输入图像说明

以hex表示的第一个80字节(从mp4结构开始到“moov”primefaces开始):

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

由WhatsApp在内部(在应用程序)生成的短mp4文件显示为一个Gif(具有不同的用户界面):

https://www.dropbox.com/s/kpynmx1bg3z76lz/VID-20171024-WA0009.mp4?dl=0

Solutions Collecting From Web of "WhatsAppvideo作为GIF在编程上共享"

“…问题是我不能编辑另一个MP4文件来添加这个primefaces而不会损坏文件

在WhatsApp中testing这个small_VC1edit.mp4 。 如果它做你想要的然后阅读…

制作可播放的MP4

使用原始的small.mp4作为编辑示例(下载文件并使用hex编辑器打开)。

1)在一个空白字节数组中,添加显示的WhatsApp风格的MP4标头的前72个字节。

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 

你已经显示了80个字节,但最后的8个字节是不需要的(8个字节的值中的4个必须与你的输出文件不同)。

2)计算三angular洲。

  • 注意(新) WhatsApp头是72个字节(在moovprimefaces之前)。

  • 请注意(原始) Small.mp4具有160个字节的标题(在moovprimefaces之前)。

所以就用这个逻辑( ab ):

  • a)如果WhatsApp头大于inputMP4:
    delta = ( WhatsApp_header - input_MP4_header)

  • b)如果input的MP4标题比WhatsApp大:
    delta = ( input_MP4_header - WhatsApp_header )

因此,对于有160个标题字节的inputsmall.mp4(接下来是moov的SIZE的4个字节(如00 00 0D 83 ),然后跟着另外4个字节,现在是moov的NAME(如6D 6F 6F 76或utf-8文本“ moov ”)。

我们可以说: 160 MP4 bytes - 72 WhatsApp bytes = Delta of 88

如果删除这些原始的160个字节并用较短的72个WhatsApp字节replace它们,则它们将减less88个字节,现在必须在另一个MOOV数据部分中进行说明。 那部分是STCOprimefaces。

3)用新的偏移更新STCOprimefaces:

在small.mp4中, STCOprimefaces开始于偏移1579(如73 74 63 6F )。 前4个字节(偏移量:1575到1578)是stco的SIZE字节(如00 00 00 B8 ),它是十进制值184 。 这个字节长度的总大小也包括那些4个SIZE字节。

stco的NAME字节的起始字节73跳过12个字节73 74 63...所以跳过这些:

 73 74 63 6F 00 00 00 00 00 00 00 2A 

现在你到达点,用新的delta值按顺序更新每个32位整数(4字节)的偏移量。 但有多less补偿更新?

 atomEditTotal = ( (stco_SIZE - 16) / 4); //gives 42 //PS: Minus by 16 is to trim off non-offset bytes. 

所以有42个条目要编辑。 我们的Delta88,所以我们读取每个整数的值,减去88,然后在相同的地方写回新值,重复另外41次(使用While循环, if条件break;循环)。

对于testing,给定一个损坏的文件,如果你编辑第一个条目,它应该足以显示video帧1(如果非audio文件)。

PS:在编辑small.mp4的STCO偏移量之后,只需删除其起始的160个字节,并将剩余的MP4字节连接/连接到72字节WhatsApp标头的后端/尾端。 将数组保存为新文件并进行testing。