把安卓动态图片拆分(分解、分开)成图片和视频两个文件(golang)
源码如下
package main
import (
"bytes"
"fmt"
"os"
"path/filepath"
"strings"
)
const (
jpegStartMarker = "\xFF\xD8\xFF" // JPEG的开始标记
jpegEndMarker = "\xFF\xD9" // JPEG的结束标记
mp4StartMarker = "\x00\x00\x00\x18ftyp" // MP4的开始标记
)
func main() {
var files []string
var err error
// 检查是否有命令行参数(文件拖拽)
if len(os.Args) > 1 {
// 使用命令行参数作为文件列表
files = os.Args[1:]
} else {
// 如果没有命令行参数,则搜索当前目录下的MVIMG*.jpg文件
files, err = filepath.Glob("MVIMG*.jpg")
if err != nil {
fmt.Printf("查找文件失败: %v\n", err)
return
}
}
// 检查是否找到文件
if len(files) == 0 {
fmt.Println("未找到要处理的文件")
fmt.Println("请将MVIMG文件拖到程序上,或将程序放在包含MVIMG文件的目录中运行")
fmt.Println("按任意键退出...")
fmt.Scanln() // 等待用户按键
return
}
// 处理每个文件
for _, file := range files {
if err := processMVIMGFile(file); err != nil {
fmt.Printf("处理文件 %s 失败: %v\n", file, err)
continue
}
}
// 处理完成后等待用户按键
fmt.Println("\n所有文件处理完成,按任意键退出...")
fmt.Scanln()
}
// 处理MVIMG文件
func processMVIMGFile(filename string) error {
// 读取文件内容
data, err := os.ReadFile(filename)
if err != nil {
return fmt.Errorf("读取文件失败: %v", err)
}
// 查找JPEG图片部分
jpegStart := bytes.Index(data, []byte(jpegStartMarker))
if jpegStart == -1 {
return fmt.Errorf("未找到JPEG开始标记")
}
// 从JPEG开始位置之后查找结束标记
jpegEndSearchData := data[jpegStart:]
jpegEndOffset := bytes.Index(jpegEndSearchData, []byte(jpegEndMarker))
if jpegEndOffset == -1 {
return fmt.Errorf("未找到JPEG结束标记")
}
jpegEnd := jpegStart + jpegEndOffset + 2 // 包含结束标记
// 查找MP4视频部分
mp4Start := bytes.Index(data, []byte(mp4StartMarker))
if mp4Start == -1 {
return fmt.Errorf("未找到MP4开始标记")
}
// 提取文件名(不包含扩展名)
baseName := strings.TrimSuffix(filename, filepath.Ext(filename))
// 保存JPEG图片
jpegFilename := baseName + "_image.jpg"
if err := os.WriteFile(jpegFilename, data[jpegStart:jpegEnd], 0644); err != nil {
return fmt.Errorf("保存JPEG文件失败: %v", err)
}
fmt.Printf("已保存图片: %s\n", jpegFilename)
// 保存MP4视频
mp4Filename := baseName + "_video.mp4"
if err := os.WriteFile(mp4Filename, data[mp4Start:], 0644); err != nil {
return fmt.Errorf("保存MP4文件失败: %v", err)
}
fmt.Printf("已保存视频: %s\n", mp4Filename)
// 返回
return nil
}
下载
源码:MvimgUnpack_Code.7z
程序 Windows_x64:MvimgUnpack_win_amd64.7z
程序 Linux_amd64:MvimgUnpack_linux_amd64.7z
程序 Darwin_amd64:MvimgUnpack_darwin_amd64.7z
程序 Darwin_arm64:MvimgUnpack_darwin_arm64.7z
版权属于:zgcwkj
本文链接:https://zgcwkj.cn/archives/246.html
转载声明:请注明本文章的标题及内容的出处和声明,谢谢
评论已关闭