我想一次性对多个目录中的视频文件进行编码。在每个目录中,当至少有一个 *.mp4
文件时,ffmpeg
应用程序应使用正确的参数运行。假设视频文件名为 01_file.mp4
。我希望输出文件与源位于同一目录中,名称后缀 processed
位于文件名末尾,但在扩展名 之前。因此源
01_file.mp4将保存为
01_file_processed.mp4`。
我非常接近正确的解决方案。这是我的一句话:
find -mindepth 2 -type f ! -path '*processed.mp4' -name '*.mp4' -exec bash -c 'ffmpeg -loglevel 警告 -i "$1"-vf fps=23.976025 "${1%/*}/${1##*/}_processed"' _ {}\;
由于输出文件不正确,我从 ffmpeg
收到错误。文件不是以 01_file_processed.mp4
结尾的正确路径,而是 01_file.mp4_processed
。我相信错误出现在以下部分 ${1%/*}/output/${1##*/}"
中。如何修复此问题?
最佳答案
如果您对这种分割所做的唯一事情就是重新连接它,为什么要尝试将 dirname 与 basename 分开?
我觉得您试图模仿具有另一个目标的另一个代码。
就您而言,如果我理解正确,您不需要提取基本名称或目录名称。但您想要删除扩展以在其前面添加 _processed
。
根据您的技术,这很容易做到,因为您知道扩展名是 .mp4
。因此,只需删除尾随的 .mp4
,就像删除尾随的 /*
以提取目录名一样。然后将 .mp4
替换为您想要的内容,即 _processed.mp4
find -mindepth 2 -type f ! -path '*processed.mp4' -name '*.mp4' -exec bash -c 'ffmpeg -loglevel warning -i "$1" -vf fps=23.976025 "${1%.mp4}_processed.mp4"' _ {} \;
关于bash - 对多个目录中的视频文件进行递归编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76694345/