gpt4 book ai didi

linux - 如何使用 shell 脚本对文件对运行多个命令?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:38 27 4
gpt4 key购买 nike

我看过this postthis post等等。他们提供了一些关于如何开始的信息,不幸的是我的用例稍微复杂一些。

我有一对运行 ffmpeg 命令的视频文件。我运行的命令将元数据从原始文件传输到转换后的文件,如下所示:

christian$ ffmpeg -i file_1.mov -i file_1.mp4 -map 1 -map_metadata 0 -c copy file_1_fixed.mp4

This post如果需要解释,则解释该命令的作用。基本上用例是原始文件和转换后的文件具有相同的名称,但扩展名不同。我将如何编写一个 shell 脚本来在一个目录中找到所有这样的对,并为每一对编写和运行上面指定的命令?

我假设,从逻辑的角度来看,我需要遍历所有对,获取文件名,进行某种字符串操作(如果这甚至可以使用 shell 脚本)编写命令并运行它.

如果您能向我指出任何资源,我们将不胜感激。只是为了澄清,一些伪代码:

for (file in directory) {
string name = file.getname
string command = "ffmpeg -i " + name + ".mov -i " + name + ".mp4 -map 1
-map_metadata 0 -c copy " + name + "_fixed.mp4"
run(command)
}

希望这是有道理的,如果我需要进一步澄清,请告诉我。感谢您阅读。

最佳答案

当你用 bash 标记这个问题时,我向你发送了 bash 脚本的草图。这应该可以正常工作,但您可以根据实际需要进行调整:

#!/usr/bin/bash
# for debugging remove the hash from next line:
#set -x
# loop over all .mov files
for FILE in *.mov; do
FILE_MP4="${FILE/.mov/.mp4}"
FILE_FIXED="${FILE/.mov/_fixed.mp4}"
ffmpeg -i "$FILE" -i "$FILE_MP4" -map 1 -map_metadata 0 -c copy "$FILE_FIXED"
done

注释/提示:

  1. for FILE in *.mov 遍历扩展名为 .mov 的所有文件,但没有其他文件。这很好,因为即使在同一目录中多次调用它也能正常工作。

  2. for 循环将在当前目录中搜索。您可以使用 cd 切换到特定目录。 (也可以处理绝对或相对文件路径而不是名称...)

  3. 引文经过精心挑选。在 bash 中引用非常强大,但绝非易事。

  4. 要检查此脚本,您可以在 ffmpeg 命令前加上命令 echo。这就像试运行。 (您将看到没有 echo“前缀”的调用。)

关于linux - 如何使用 shell 脚本对文件对运行多个命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43514027/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com