侧边栏壁纸
  • 累计撰写 54 篇文章
  • 累计创建 31 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

小米摄像机视频延时处理与合并:‌FFmpeg实战指南

nankle
2024-08-10 / 0 评论 / 0 点赞 / 26 阅读 / 8021 字
温馨提示:
本文最后更新于 2024-08-14,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

引言

为什么想要制作小米摄像机的延时视频

之前使用过群晖的SurveillanceStation,就是网络摄像机,可以对接onvif协议的摄像头,里面有个延时视频的功能特别喜欢,延时视频就相当于倍速播放。

家里有米家摄像头,对接了NAS,存了很多视频,想保留一下宝宝小时候的视频。本来想放到闲置的硬盘里,后来发现占用空间比较大,就想到了制作延时视频,又好玩又好看,又能减少空间占用

经过实验,群晖中的软件无法实现,网上也找不到免费的批量制作软件,无意间找到了ffmpeg这个工具,

合并多个延时视频的需求

由于小米摄像机保存的视频文件是每小时一个文件夹,每分钟一个视频,视频文件实在是太多了,于是就想能不能将视频拼接到一起,不要那么多视频文件,看起来也不方便,查了一下ffmpeg有这个功能。

一、‌FFmpeg简介与安装

FFmpeg是什么:‌强大的多媒体处理工具,这个自行搜索,可以直接用命令进行多媒体的处理。

安装FFmpeg:‌

Windows:‌下载FFmpeg可执行文件,‌解压并添加到系统路径

下载地址:Download FFmpeg

注意:要添加环境变量,否则在批处理中是无法找到命令的。

二、‌为什么要使用FFmpeg处理小米摄像机视频

首先是本人能力有限没找到好用的批量生成延时视频的免费软件

小米摄像机视频的格式都是一样的(‌H.264编码的MP4文件)‌,FFmpeg处理相同格式的视频比较容易,限制比较少

FFmpeg对视频处理的强大功能,使用FFmpeg实现延时视频制作,‌主要是利用其后期合成能力。‌首先,‌将拍摄的照片导入电脑,‌并使用FFmpeg进行预处理,‌如重命名、‌修片等。‌然后,‌使用FFmpeg的命令行工具,‌将这些照片按照设定的帧率和分辨率编码成视频。‌在此过程中,‌可以通过调整FFmpeg的参数来控制视频的播放速度、‌画质等,‌从而实现延时效果

三、‌使用FFmpeg生成延时视频

准备工作:‌

将小米摄像机视频文件传输到计算机(当然也可以是其他的视频,多个文件最好视频的格式要一致),准备测试视频,最好测试一下,防止命令不对把原视频破坏了,或者生成的效果不好可以调整下。

FFmpeg延时命令解析:‌

ffmpeg -i "27M55S_1641436075.mp4" -filter:a "atempo=5" -vf "setpts=0.2*PTS" -c:v libx264 -preset veryfast -crf 23 -c:a aac "delayed_27M55S_1641436075.mp4"

上面的参数分析:

-filter:a "atempo=5":‌这个参数用于调整音频的播放速度。‌atempo是音频滤镜,‌用于控制音频播放速度的快慢。‌这里的5表示将音频速度调整为原来的5倍。我用的不一定标准,感觉音频加快太多有点听不清声音,但是视频都加快了5倍,声音听不清也正常,有个动静就行。

-vf "setpts=0.2*PTS":‌这个参数用于调整视频的播放速度。‌setpts是视频滤镜,‌通过改变每一个pts时间戳来实现倍速效果。‌这里的0.2*PTS表示将每帧视频的pts时间戳都乘以0.2,‌即实现5倍速播放(‌因为1除以0.2等于5)‌。‌实测这种方式不会跳帧,‌效果还可以。‌

遇到的问题与解决方案:‌

问题1:‌帧率设置不当导致视频过快或过慢

解决方案:‌调整-vf "setpts=PTS/SPEED"中的SPEED值

问题2:‌音频处理不当导致杂音或无声

解决方案:‌使用-c:a aac 生成新的音频

四、‌合并多个延时视频

FFmpeg合并视频命令解析:‌

使用concat滤镜或concat协议

首先创建一个文本文件,‌例如outputFile.txt,‌在文件中按照以下格式列出要拼接的音视频文件路径:‌

  • file 'path/to/file1'

  • file 'path/to/file2'

  • file 'path/to/file3'

执行以下命令,‌将输入文件作为参数传递给ffmpeg,‌并指定输出文件的路径:‌

  • ffmpeg -f concat -safe 0 -i "outputFile.txt" -c:v copy -c:a aac "%cd%\%%d.mp4"

上面的参数分析:

上面的命令是经过实验的出的,其中outputFile需要提前创建,是告诉ffmpeg把哪些文件合并用的,最后的文件名根据实际情况修改

-c:v copy -c:a aac 这个命令如果不加可能会没有声音

遇到的问题与解决方案:‌

问题1:‌合并的视频之间有黑屏或闪烁

解决方案:‌确保所有视频具有相同的编码设置和帧率

问题2:‌合并后的视频文件过大

解决方案:‌调整输出视频的编码参数或使用-crf值进行压缩

五、‌将两个步骤合并,同时生成延时视频并合并视频文件,批处理代码编写与一键生成脚本

FFmpeg合并视频并生成延时视频一步命令:

ffmpeg -f concat -safe 0 -i "outputFile.txt" -filter:a "atempo=5" -vf "setpts=0.2*PTS" -c:v libx264 -preset veryfast -crf 25 -c:a aac "delayed_%%d.mp4"

这个命令是将上面的2个命令合到了一起,我也是突发奇想,试了一下发现完全可以,毕竟参数不同。

一键生成脚本分享:‌

根据上面的命令我编写了一键生成脚本,放到视频文件夹里面执行就自动生成了。非常方便。

下面的脚本可以直接点击下载

循环文件夹并生成文件-一步版.bat

批处理脚本:

@echo off
setlocal enabledelayedexpansion

:: 遍历当前目录下的所有目录
for /d %%d in (*) do (
    :: 设置输出文件的路径(以目录名命名)
    set "outputFile=%cd%\%%d.txt"
    echo !outputFile!
    :: 如果输出文件已存在,则删除它(可选)
    if exist "!outputFile!" del "!outputFile!"
    echo "if exist !outputFile! delete"
    cd %%d
echo "jinru %%d"
    :: 遍历当前目录下的所有文件(非递归)
    for %%f in (*) do (
echo "zhaodao %%f"
        :: 输出带有 'file' 关键字的文件路径到输出文件
        echo file '%%d\%%f' >> !outputFile!"
    )
echo "%%d xun huan jie shu"
    cd ..
echo "tui chu %%d"

:: 如果需要,可以在这里调用 FFmpeg(但请注意,这将在每个目录后都尝试调用)
::ffmpeg -f concat -safe 0 -i "!outputFile!" -c:v copy -c:a aac "%cd%\%%d.mp4"
:: 进行延时处理 这里合并+处理一步完成
ffmpeg -f concat -safe 0 -i "!outputFile!" -filter:a "atempo=5" -vf "setpts=0.2*PTS" -c:v libx264 -preset veryfast -crf 25 -c:a aac "delayed_%%d.mp4"

::删除原视频
::del "%%d.mp4"
::删除文件列表
del "%%d.txt"

::删除源文件
rd %%d /s /q
)

echo 完成。
pause

脚本使用说明:‌

该脚本遍历文件夹中的所有视频文件,‌合并视频,应用延时处理并保存新视频文件。

该脚本是在window下执行的

脚本是放在小米视频文件夹,日期文件夹目录下的(遍历了当前目录下的日期文件夹,没找到一个文件夹就处理一个,每个文件夹内每分钟有一个视频文件,本脚本将这些小文件合并成了一个),使用的时候可以根据实际情况调整

该脚本中包含删除原视频的命令,危险操作,请测试好后再使用,不要直接使用!

该脚本生成的视频是5倍的倍速,可以调整里面的参数,某些视频播放器可以慢速播放,我试过调成0.25x就和正常视频没什么区别,但是声音缺失了,所有这个压缩损失还是挺大的。

脚本运行的时候非常占用cpu,我试过性能越高的cpu生成越快,为了发热小一点,功率小一点,我在电源选项中限制了cpu的主频,兼顾了性能和效率。

六、‌总结

最近刚刚尝试使用ffmpeg这个工具,对于上面的说明如果有任何不准确的地方,还请大家多多谅解,我们一起学习,共同进步。

视频处理完成后我跟高兴,经过尝试,视频文件的大小得到了显著减少,存储空间也节省了近5倍。

对于这个脚本,我相信还有更多的提升空间。例如,硬件加速功能我目前还没有使用,如果有显卡的话,应该能够进一步提升效率。然而,我这个电脑是AMD的小主机,虽然核显性能不错,但与这个软件的兼容性可能不是那么好。

最后,我要感谢百度AI助手,我在使用的过程中产生的许多命令都是向它询问的,它在我遇到问题时也给了我很多改进的建议。虽然它的智能程度还有待提高,但它仍然为我提供了宝贵的技术支持。

0

评论区