如何使用ffmpeg从文件夹中的所有视频中提取帧

How to extract frames from all videos in a folder using ffmpeg

我目前可以使用以下行从文件中提取图像

ffmpeg -i inputfile.avi -r 1 image-%d.jpeg

但是,我想将它应用到文件夹中的所有文件,并将其放在输出文件夹中。

假设我的当前文件夹包含所有视频:

输入视频/

----子文件夹1/

------video.avi

----子文件夹2/

------video.avi

我想要输出文件夹中的所有内容:

输出/

----子文件夹1/

------视频/

------------*.jpeg

----子文件夹2/

------视频/

------------*.jpeg

使用 bash 脚本最简单的方法是什么? (或其他更好的东西)

如果文件夹深度不变,文件扩展名始终为 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 [ "" == '' ] || [ "" == '' ] || [ "" == '' ]; then
    echo "Usage: [=11=] <input folder> <output folder> <file extension>";
    exit;
fi
for file in ""/*/*.""; do
    destination="${file:${#1}:${#file}-${#1}-${#3}-1}";
    mkdir -p "$destination";
    ffmpeg -i "$file" -r 1 "$destination/image-%d.jpeg";
done