【发布时间】:2020-06-29 00:43:01
【问题描述】:
我正在尝试重命名来自我使用 find 和 xargs 生成的 ffmpeg 进程的输出文件。我有一个文件目录,我想将其转换为某种格式,所有这些文件最终都应命名为 .mov。所以我过滤掉 .mp4 & .mov 文件,然后使用 xargs 将其传递给 ffmpeg。
假设当前工作目录中有 abc.mp4、abcd.mp4、abcde.mp3、bcd.mov 等文件,然后我正在做这样的事情来过滤掉 mp4 和 mov 文件并传递它转到ffmpeg进行编码:
find . -type f -name "*.mp4" -o -name "*.mov" | xargs -n 1 -p 5 -I '{}' ffmpeg -i '{}' ....... $PWD/{}"_h264.mov"
这将做我想让 ffmpeg 做的事情,但它会将文件命名为
abc.mp4_h264.mov,abcd.mp4_h264.mov,bcd.mov_h264.mov
我最理想的目标是将输出文件命名为
abc_h264.mov,abcd_h264.mov,bcd_h264.mov
在我指定 ffmpeg 的输出文件的地方,我没有想到如何做到这一点。我知道我可以像这样使用 xargs 调用 basename 命令
find . -type f -name "*.mp4" -o -name "*.mov" | xargs -n 1 basename | rev | cut -d . -f 2 | rev
并提取不带扩展名的文件名,但如果我使用它,那么我如何将其作为输入文件传递给 ffmpeg,因为当它从 xargs 出来时会丢失扩展名,而 ffmpeg 会抛出错误。
谁能帮我一次性实现这一点,我可以指定“basename”在做什么,但我在哪里指定 ffmpeg 的输出文件名?
非常感谢您提供的任何帮助。非常感谢社区。p>
【问题讨论】:
-
最好制作一个小脚本来处理输入和输出名称的所有处理,然后使用更正的参数调用
ffmpeg。祝你好运。
标签: bash file find rename xargs