You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无法用FFmpeg将三星动态照片(JPEG格式)转换为完整MP4视频

无法用FFmpeg将三星动态照片(JPEG格式)转换为完整MP4视频

兄弟,我之前也踩过三星动态照片的这个坑!你遇到的问题根源在于:三星的Motion Photo并不是把视频数据作为常规的视频流嵌入JPEG,而是把几秒的动态视频偷偷藏在了JPEG的EXIF元数据里。FFmpeg默认只会解析JPEG的静态图像部分,所以你之前的命令只能转出来单帧的静止MP4,完全没碰到底层的动态视频数据。

从你贴的ffmpeg -i输出也能看出来:FFmpeg把这个JPEG识别成了一个只有0.04秒时长的MJPEG流(其实就是单帧画面),自然转不出动态内容。

下面给你两个可行的解决方案,都是Windows 11下能用的:

方法一:先提取隐藏视频,再用FFmpeg优化(推荐)

三星动态照片的视频部分是标准MP4格式,我们可以用exiftool先把它从EXIF里抠出来,再用FFmpeg编码优化:

步骤1:安装ExifTool

Windows上直接去ExifTool官网下载便携版(exiftool.exe),把它放到你的照片文件夹里,或者加到系统PATH里方便全局调用。

步骤2:单文件测试

先拿一张照片试试提取,确认能拿到动态视频:

exiftool -b -MotionPhotoVideo "20240623_233601.jpg" > "20240623_233601_extracted.mp4"

打开这个提取出来的MP4,应该就能看到完整的动态内容了!

步骤3:批量处理整个文件夹

写个bat脚本(把下面内容存成convert_motion_photos.bat,放到照片文件夹里双击运行),一键处理所有文件:

@echo off
setlocal enabledelayedexpansion

for %%i in (*.jpg) do (
    echo 正在处理:%%i
    exiftool -b -MotionPhotoVideo "%%i" > "%%~ni_temp.mp4"
    
    rem 检查是否成功提取到视频(避免空文件)
    if %%~zi gtr 0 (
        ffmpeg -i "%%~ni_temp.mp4" -c:v libx264 -preset veryslow -crf 18 "%%~ni.mp4"
        del "%%~ni_temp.mp4"
        echo 完成:%%~ni.mp4
    ) else (
        echo 警告:%%i 不是三星动态照片,跳过
        del "%%~ni_temp.mp4"
    )
)

echo 所有文件处理完成!
pause

方法二:偷懒版——用支持Motion Photo的工具直接转

如果你不想折腾命令行,也可以用专门支持三星动态照片的工具:比如把照片上传到Google Photos,再下载回来就是完整的MP4;或者用三星官方的Galaxy Studio工具,也能直接导出动态视频。不过批量处理的话,还是命令行效率更高。

为什么你之前的命令不行?

再回头说下你的原命令:

for %i in (*.jpg) do ffmpeg -i "%i" -c:v libx264 -map 0:0 -preset veryslow -crf 18 "%~ni.mp4"

FFmpeg把JPEG解析成了一个单帧的MJPEG视频流(从你贴的输出看,Duration只有0.04秒,就是一帧的时长),-map 0:0也只指定了这个单帧流,所以转出来的自然是静止MP4,完全没触碰到藏在EXIF里的真实动态视频。

备注:内容来源于stack exchange,提问作者welbeebee

火山引擎 最新活动