Bash 脚本根据子目录中的特定标题从视频生成图像

Bash 脚本根据子目录中的特定标题从视频生成图像

我有以下 bash 脚本,可生成与视频文件同名的 jpg 文件。现在我需要更改 bash 脚本,以生成名为 image.jpg 的 jpg 文件,而不是与视频同名的 jpg 文件。

我尝试了很多不同的方法来做到这一点,但我不太擅长编写 bash 脚本,而且我在基本名称和子目录方面遇到了一些问题。

你能帮助我吗?

#!/bin/bash
for i in */*.mp4; do 
j=`basename $i .mp4`; 
/usr/bin/ffmpeg -i "$i" -r 1 -f image2 -vframes 1 -s 640x360 -ss 0:0:30 $j.jpg;
done

按照目录树

/
/a/video1.mp4
/b/video2.mp4
/c/video3.mp4

按照我需要的结果

/
/a/video1.mp4
/a/image.jpg
/b/video2.mp4
/b/image.jp4
/c/video3.mp4
/c/image.jpg

非常感谢!

答案1

有一个问题for i in */*.mp4:您不能像这样循环遍历子目录中的文件(试试看:for i in */*.mp4; do echo $i; done,这只会打印*/*.mp4)。

对于这种情况,没有其他办法find

一个班轮解决方案find

find /your/base/directory -type f -iname "*.mp4" -execdir /usr/bin/ffmpeg -i "{}" -r 1 -f image2 -vframes 1 -s 640x360 -ss 0:0:30 image.jpg \;

答案2

只需设置j为所需的名称

j=image

而不是将其设置为视频的基本名称。

答案3

更改你的 bash 代码;)

#!/bin/bash
for i in */*.mp4; do 
DIR=$(dirname ${i})
/usr/bin/ffmpeg -i "$i" -r 1 -f image2 -vframes 1 -s 640x360 -ss 0:0:30 $DIR/image.jpg;
done

需要解释如下: https://stackoverflow.com/a/6121114

相关内容