done

done

我想编写一个脚本,将相机中的所有无损文件转码为 3mb/s,并将编解码器更改为 h.264。我找到了一个命令,可以将文件导出为一个大文件,但我想要保留名称并将输出放在另一个目录中的东西。请附上注释,描述命令的每个部分的作用,以便我可以根据自己的需要进行修改。

编辑

这有效:

for file in *.avi; do ffmpeg -i "$file" "${file%.avi}".webm; done

我只是想知道每个部分的作用,以便我可以根据自己的需要进行修改。

答案1

for file in *.avi; do ffmpeg -i "$file" "${file%.avi}".webm; done

这是 Bash 的“for 循环”,非常适合重复任务。逐节介绍:

for file in *.avi;

file将成为下一节中的变量,该变量将在每个连续循环中引用当前目录中的每个特定 avi。

定制内容:

  • file可以重新命名任何东西:i并且f似乎被广泛使用。

  • 您可以更改*.avi为您需要的任何输入格式,例如*.mkv

do ffmpeg -i "$file" "${file%.avi}".webm;

这将ffmpeg针对每个 avi 运行。花括号中的部分是使用参数扩展删除.avi文件名的一部分。例如,如果 avi 文件名为dog.avi,则输出将命名为dog.webm。如果仅使用"$file.webm"进行输出,则输出最终将为dog.avi.webm

定制内容:

  • 您可以ffmpeg照常添加任何选项。

  • %.部分应使用与部分相同的扩展名for file in,或者您可以更改%.avi%.*通配符。

  • .webm可以更改为您需要的任何输出容器格式。

如果希望将新文件输出到名为的目录中newvids,则创建新目录并将命令更改为:"newvids/${file%.avi}.webm"

done

这告诉循环命令已完成,现在$file可以参考下一个 avi。

相关内容