我使用由ftp复制的服务器(Synology NAS),来自CCTV系统录像机的视频片段。复制文件时,小脚本使用以下语句将其从DAV格式转换为AVI:
find ./ -type f -name "*.dav" -exec ffmpeg -y -i {} -vcodec copy -movflags +faststart {}.avi \;
问题是从CCTV录像机到Synology不断传输的剪辑很多。那就是许多片段同时从录音机传输到Synology。因此,上述声明将尝试转换传输尚未结束的剪辑。如何从转换中排除此类非完整剪辑?我不能使用“inotify”或“lsof”功能,因为Synology Linux中没有这样的功能(因为很多原因我无法在Synology上安装optware)。我认为有必要知道特定文件仍然可以写入并将其排除在外。不知道该怎么办?
答案 0 :(得分:0)
最后我解决了我的问题。单个视频剪辑的大小不到10MB。因此,sigle文件的转换时间最短不超过1分钟。因为我添加了find命令,修改时间作为参数。它解决了我的问题。我遇到的所有问题都是因为Synology Linux的功能有限。请参阅新命令语法:
find ./ -type f -mmin +10 -name "*.dav" -exec ffmpeg -y -i {} -vcodec copy -movflags +faststart {}.avi \;
请注意,如果文件在过去10分钟内没有修改,这意味着传输过程已经结束,实际上我的应用程序(CCTV视频剪辑收集)没有必要检查文件是否打开。