[英]How to delete multiple folders by comparing folder name and system timestamp as reference, using a bash script?
[英]How to extract single image (with different name each time) from multiple videos in the one folder using ffmpeg bash script
让我们开始吧……我是Linux的新手。
我一直在研究ffmpeg,以使用终端从视频中提取图像。 我已经使用以下代码完成了此操作:
ffmpeg -itsoffset -4 -i oggvideo.ogg -vcodec mjpeg -vframes 1 -an -f rawvideo -s 320x240 oggThumb.jpg
我在将视频保存在项目中的目录中时运行此程序。 但是我想要的是同时从该文件夹中的所有视频中提取图像,并命名与其提取的视频名称相对应的图像。 我的最终目标是要创建一个文件夹,该文件夹将保存用户上传的视频,并且脚本将在特定时间运行并从上传的视频中提取图像,并将图像路径保存到数据库中。
我发现以下代码行:
for %%i in (*.mp4) do ffmpeg -ss 20 -i %%i -t 1 -s 590x340 -f image2 %%i.jpg
从此站点: 尝试从具有FFMPEG的多个视频中提取1个图像
我在终端中运行它,它给了我错误:'bash:意外令牌'('附近的语法错误,我尝试删除'()',但随后它把我带到了新的一行。由于Linux命令相对较新,因此出现的问题最多。
任何建议或意见将非常有帮助。
我改写了你的命令
for i in *.mp4
do
echo Processing "$i" # Just to visually keep track of what's going on
ffmpeg -ss 20 -i "$i" -t 1 -s 590x340 "${i%.mp4}".jpg
done
请注意:
ffmpeg
在处理时可能会产生警告和/或错误。 此命令只是忽略它们。 i
,以便处理文件名中的空格。 ${parameter%word}
)删除文件扩展名,因为这是它自己的目的 ;
在第一,第三和第四行的末尾。 -f image2
选项(初始命令的一部分),因为它可能不是您想要的。 image2
用于对不提取 图像的图像进行解胶 。 有关ffmpeg
本身的其他问题最好在http://superuser.com上进行讨论。
关于您的特定需求,例如,请参见https://superuser.com/a/302203/224101 。
编辑:如果您来自Windows环境,请注意,大多数类Unix的文件系统都是区分大小写的。 默认情况下,名为“ XXX.MP4”的苍蝇与“ * .mp4”球形匹配。
如果这是您的问题,那么使用bash
可能会使用shopt -s nocaseglob
强制区分shopt -s nocaseglob
。 使用shopt -u nocaseglob
恢复为正常行为。
这是我的系统(ext4 fs)上的示例:
sh$ touch a.mp4
sh$ touch B.MP4
sh$ touch C.Mp4
sh$ touch D.mp4
# default settings
sh$ ls *.mp4
a.mp4 D.mp4
# force case insensitive glob
sh$ shopt -s nocaseglob
sh$ ls *.mp4
a.mp4 B.MP4 C.Mp4 D.mp4
# force case sensitive glob (back to defaults)
sh$ shopt -u nocaseglob
sh$ ls *.mp4
a.mp4 D.mp4
您在此处发布的那一行代码看起来像Windows Shell代码。
等效的bash转换(尽管您的命令和参数可能有所不同)如下所示:
for i in $(ls *.mp4); do ffmpeg -ss 20 -i $i -t 1 -s 590x340 -f image2 ${i//.mp4/}.jpg; done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.