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

发布于 / Python / 3 条评论

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

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,很多平台没有这个格式的解码器。Windows下可以通过安装Media Player Codec Pack来解决,如果不想安装,则需要多一步命令,把他们都转成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

只不过时间会很慢。。

如果生成了一个0kb大小的mp4,而且报错:

Could not find tag for codec pcm_alaw in stream #0, codec not currently supported in container Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument Error initializing output stream 0:1

说明音频编码有问题,将ffmpeg命令后的 -c:a copy 改为 -c:a aac 即可解决。具体命令在评论区。

附一张运行截图

image.png

转载原创文章请注明,转载自: 斐斐のBlog » 使用ffmpeg合并米家摄像头视频文件
  1. 寂静丶

    视频是找到了 但是合并过程1秒就跳过了,最后生成了一个0kb的mp4文件 不知道是什么原因。

    1. 寂静丶
      @寂静丶 一直报错Could not find tag for codec pcm_alaw in stream #0, codec not currently supported in container Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument Error initializing output stream 0:1 --
      1. kidultff
        @寂静丶 音频编码有误。尝试把倒数第二行的ffmpeg命令换成:
        start ffmpeg -f concat -safe 0 -i !tmp_dir!\!dat!.txt -map 0 -c:a aac -c:s copy -c:v copy !output_dir!!dat!.mp4
        如果生成的视频播放有问题,就用:
        start ffmpeg -f concat -safe 0 -i !tmp_dir!\!dat!.txt -map 0 -c:a aac -c:s copy -c:v libx264 !output_dir!!dat!.mp4