繁体   English   中英

如何使用ffmpeg bash脚本从一个文件夹中的多个视频中提取单个图像(每次使用不同的名称)

[英]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

请注意:

  1. ffmpeg在处理时可能会产生警告和/或错误。 此命令只是忽略它们。
  2. 我引用了所有出现的变量i ,以便处理文件名中的空格。
  3. 我使用(bash) 删除匹配的后缀运算符${parameter%word} )删除文件扩展名,因为这是它自己的目的
  4. 我将您的声明改写为多行表达式,以使其更具可读性(根据我的口味)。 如果出于某种原因要将其重写为单行,请添加; 在第一,第三和第四行的末尾。
  5. 我删除了-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM