我正在尝试使用 FFmpeg 将视频转换为 Bash 中的图像。我想使用视频的文件名来命名相应的图像(后跟一个整数)。
如果我在同一目录中导出文件,我能够做到这一点:
for file in `find . -name "*.mp4"`; do ffmpeg -i $file -q 1 $file'_'%d.jpeg; done
但是,如果我要将图像导出到所需的目录,则会出现错误。看起来 $file 的值不仅仅是文件名,而是一个目录。
我在尝试什么:
for file in `find . -name "*.mp4"`; do ffmpeg -i $file -q 1 ~/testfolder/$file'_'%d.jpeg; done
我的问题是:我怎样才能正确提取要在此处使用的文件名?
最佳答案
这样做,因为它可以处理包含任何特殊字符(包括换行符,很少使用但在文件名中有效)的文件。
destdir=~/testfolder/
while read -u 5 -r -d '' file
do
name=$(basename "$file")
ffmpeg -i "$file" -q 1 "$destdir/${file}_%d.jpeg" </dev/null
done 5< <(find . -name "*.mp4" -print0)
basename
命令是一个外部程序。您可以仅使用 shell 扩展通过以下行获得相同的结果:
name=${file%/}
name=${name##*/}
关于bash - 提取文件名以命名其他文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42462690/