使用ffmpeg合并米家摄像头视频文件

发布于 / 未分类 / Comments Off on 使用ffmpeg合并米家摄像头视频文件

米家摄像头标准版的录像文件在内存卡中存储逻辑是

record

|-- day

    |--  hour

        |-- minute

            |-- 3 seconds

每3秒一个mp4文件,让转存后回放十分麻烦。。

于是写了如下CMD脚本,使用ffmpeg合并视频。。

@echo off& setlocal EnableDelayedExpansion

rem =======================配置=======================
rem 在这里设置你的录像record文件夹和转码视频输出文件夹
rem 文件路径使用 \ 而不是 /
rem 请保持最后是 \
set record_dir=G:\record\
set output_dir=F:\converted\
rem ==================================================


set tmp_dir=%~dp0tmp_ffmpeg_txtfiles
rd /s /q !tmp_dir!
mkdir !tmp_dir!
for /f "delims=" %%a in ('dir /ad/b "!record_dir!"') do (
    set dat=%%a
    set dir=!record_dir!!dat!\
    echo 开始处理 !dat!
    echo 正在查找文件......
    
    set files_cnt=0
    for /f "delims=" %%b in ('dir /ad/b "!dir!"') do (
        set dir_1=!dir!%%b
        for /f "delims=" %%d in ('dir /ad/b "!dir_1!"') do (
            set dir_2=!dir_1!\%%d
            for /f %%s in ('dir /b "!dir_2!\*.mp4"') do (
                set fp=!dir_2!/%%s
                echo file !fp:\=/! >> !tmp_dir!\!dat!.txt
                set /A files_cnt=!files_cnt!+1
            )
        )
    )
    echo 文件查找完毕,总共!files_cnt!个视频,命令如下。开启合并进程.......
    echo ffmpeg -f concat -safe 0 -i !tmp_dir!\!dat!.txt -c copy !output_dir!!dat!.mp4
    echo.
    start ffmpeg -f concat -safe 0 -i !tmp_dir!\!dat!.txt -c copy !output_dir!!dat!.mp4
)

配置好record路径和输出路径,运行即可。

之后输出的mp4你有一定概率无法播放,因为米家摄像头采用的视频编码格式为hevc,一些设备对这个编码的支持度不好,因此你看需要多一步命令,把他们都转成h.264

ffmpeg -i inputfile -map 0 -c:a copy -c:s copy -c:v libx264 output.mp4

每个文件都转一下就好啦。。

如果你想一气呵成,把上述脚本的倒数第二行改成

start ffmpeg -f concat -safe 0 -i !tmp_dir!\!dat!.txt -map 0 -c:a copy -c:s copy -c:v libx264 !output_dir!!dat!.mp4

只不过时间会很慢。。

附一张运行截图

image.png

转载原创文章请注明,转载自: 斐斐のBlog » 使用ffmpeg合并米家摄像头视频文件
评论已关闭