Linux 如何使用ffmpeg bash脚本从一个文件夹中的多个视频中提取单个图像(每次使用不同的名称)
让我们从这个开始。。。我对Linux相当陌生 我一直在研究ffmpeg,以便使用终端从视频中提取图像。我已经使用这段代码完成了这项工作:Linux 如何使用ffmpeg bash脚本从一个文件夹中的多个视频中提取单个图像(每次使用不同的名称),linux,image,bash,video,ffmpeg,Linux,Image,Bash,Video,Ffmpeg,让我们从这个开始。。。我对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.
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 -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
从本网站:
我在终端中运行它,它给出错误:“bash:syntax error near unexpected token”(“”)
我试着删除“()”,但它只是把我带到了一个新的行上。这是我遇到的问题最多的地方,因为我对linux命令比较陌生
任何建议或建议都会非常有用。您在那里发布的一行代码看起来像Windows shell代码 等效的bash转换(尽管您的命令和参数可能不同)如下所示:
for i in $(ls *.mp4); do ffmpeg -ss 20 -i $i -t 1 -s 590x340 -f image2 ${i//.mp4/}.jpg; done
我重写了你的命令
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
选项(初始命令的一部分),因为它可能不是您想要的。没有提取它们ffmpeg
本身的其他问题最好在上讨论。关于您的具体需求,请参见示例
编辑:如果您是从Windows环境提交的,请注意大多数类似Unix的文件系统都区分大小写。默认情况下,名为“XXX.MP4”的fale与全局模式“*.MP4”不匹配 如果这是您的问题,使用
bash
您可以使用shopt-s nocaseglob
强制不区分大小写。使用shopt-u nocaseglob
恢复正常行为
以下是我的系统(ext4 fs)上的一个示例:
我相信在*.mp4中为I使用
比解析ls
的输出更好,这被认为是一种不好的做法。这对你有用吗?我不确定bash是否是这样工作的:)另外,为什么这是一种“不好的做法”?ls是GNU coreutils的一部分!这正是bash的工作原理——它是bash的优势之一ls
输出是为人类安排的,计算机有更好的方法知道目录中的内容。请尝试将代码粘贴到此处,在此处阅读,然后思考文件名中是否包含空格和换行符。顺便说一句,您还应该在$i
周围添加双引号,如“$i”
@LiviuChircufor i in$(ls*.mp4)如果某些文件名中有空格,代码>将失败。它仍然只拍摄第一个mp4视频。我看看能不能从那里开始工作。非常感谢@morriscotty_sd如果某些文件未经处理,则ffmpeg
就是无法处理它们(编码错误?)。最近,一些发行版从ffmpeg
切换到avconv
——这可能有其不兼容之处。或者,由于区分大小写,各种文件名可能与*.mp4 glob模式不匹配。我编辑了我的答案,指出了以后可能出现的问题。@morriscotty_sd BTW,你不想在这里!!!我刚刚意识到一件非常愚蠢的事情。没有生成图像的视频只有5秒长,因此-ss 20不会输出图像!!现在完全可以用了。谢谢