如何使用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
我目前可以使用以下行从文件中提取图像
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