gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:37:44 25 4
gpt4 key购买 nike

让我们从这个开始...我是 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

来自本网站:Trying-to-extract-1-image-from-multiple-videos-with-FFMPEG

我在终端中运行它,它给了我错误:'bash: syntax error near unexpected token `(''我尝试删除“( )”,但它只是让我换了一行。由于对 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 is for demuxing image而不是提取它们。

关于 ffmpeg 本身的其他问题最好在 http://superuser.com 上讨论.
关于您的具体需求,请参阅https://superuser.com/a/302203/224101例如。


编辑:如果您来自 Windows 环境,请注意大多数类 Unix 文件系统都区分大小写。默认情况下,名为“XXX.MP4”的文件将不匹配 glob 模式“*.mp4”。

如果这是您的问题,使用 bash 您可以使用 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

关于linux - 如何使用ffmpeg bash脚本从一个文件夹中的多个视频中提取单个图像(每次名称不同),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24753377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com