bash - 对多个目录中的视频文件进行递归编码

标签 bash loops file recursion ffmpeg

我想一次性对多个目录中的视频文件进行编码。在每个目录中,当至少有一个 *.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/

相关文章:

file - 使用小 RAM 在 Go 中读取大文件的最快方法

java - 从 spring Controller 下载文件

bash - 运行 Wine 安装程序时禁用 GUI

c - 如何保持C程序运行

java - 如何在java中找到非常大的文件复制状态

jquery - 如何使用 jquery 循环 iframe?

excel - #VBA - 私有(private)子 Worksheet_Change 错误 : Method 'Hidden' of Object 'Range' Field

bash - 从 bash 脚本更改 xterm 的标题

bash - 在 ssh 之后从 lsof 杀死一个进程

linux - rm -r 和 rm -R 有区别吗?