米家摄像头标准版的录像文件在内存卡中存储逻辑是
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 即可解决。具体命令在评论区。
附一张运行截图
两层版本:
@echo off& setlocal EnableDelayedExpansion
rem =======================配置=======================
rem 在这里设置你的录像record文件夹和转码视频输出文件夹
rem 文件路径使用 \ 而不是 /
rem 请保持最后是 \ 路径不是中文
set record_dir=%~dp0record\
set output_dir=%~dp0converted\
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 %%s in ('dir /b "!dir!\*.mp4"') do (
set fp=!dir!%%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
)
pause
感谢!! 终于能合并米家而不变大了!
运行框一闪而过,然后发现我的米家摄像头视频是一分钟一个的。。如何修改命令
请问下米家2k的视频怎么合并呢
视频是找到了 但是合并过程1秒就跳过了,最后生成了一个0kb的mp4文件 不知道是什么原因。
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