我目前能够使用以下行从文件中提取图像
ffmpeg -i inputfile.avi -r 1 image-%d.jpeg
但是,我想将其应用于文件夹中的所有文件,并将其放在输出文件夹中。
假设我有当前文件夹包含所有视频:
输入视频/
---- subfolder1 /
------ video.avi
---- subfolder2 /
------ video.avi
我想要输出文件夹中的所有内容:
输出/
---- subfolder1 /
------视频/
---------- *。JPEG
---- subfolder2 /
------视频/
---------- *。JPEG
使用bash脚本进行此操作的最简单方法是什么? (或其他更好的东西)
答案 0 :(得分:2)
如果文件夹深度不变,则文件扩展名始终为avi,顶部文件夹称为“input-videos”和“output”:
#!/bin/bash
for file in input-videos/*/*.avi; do
destination="output${file:12:${#file}-17}";
mkdir -p "$destination";
ffmpeg -i "$file" -r 1 "$destination/image-%d.jpeg";
done
如果顶级文件夹只是被调用,可以在任何地方,文件扩展名不同,这里有一个你可以调用的脚本./script.sh <input folder> <output folder> <file extension>
:
#!/bin/bash
if [ "$1" == '' ] || [ "$2" == '' ] || [ "$3" == '' ]; then
echo "Usage: $0 <input folder> <output folder> <file extension>";
exit;
fi
for file in "$1"/*/*."$3"; do
destination="$2${file:${#1}:${#file}-${#1}-${#3}-1}";
mkdir -p "$destination";
ffmpeg -i "$file" -r 1 "$destination/image-%d.jpeg";
done