gpt4 book ai didi

loops - 循环连接两个文件的ffmpeg命令

转载 作者:行者123 更新时间:2023-12-04 23:12:06 25 4
gpt4 key购买 nike

命令 ffmpeg -i file-1.mp4 -vf ass=file-1a.ass burned-1.mp4用于在 file-1.mp4 视频上刻录 file-1a.ass 字幕。
但每次我必须对 40 多个不同的视频和字幕重复相同的命令,每次我都必须等待渲染输出。
因此,也许有一种方法可以自动对所有文件重复相同的命令。
找回复发现loop命令for f in *; do ffmpeg $f;但我很困惑如何将它与 2 个文件一起使用,.mp4 和 .ass 文件,以及应该具有相同编号的输出文件
我想应该在每对文件上放置相同的名称,例如:
1.mp4 1.ass
2.mp4 2.屁股
3.mp4 3.屁股
ETC
接着for f in *; do ffmpeg -i $f.mp4 -vf ass=$f.ass $f-output.mp4但我没有明确的想法

最佳答案

你有正确的想法。但是如果循环使用 f == 1.mp4 执行,它将不起作用,然后再次使用 f == 1.ass , 等等。
因此,您想修改循环以仅迭代 .mp4 文件。然后你想剥离 .mp4 f 的值的扩展,即从 f 的值中去除最后 4 个字符, 使用 ${f:0: -4} (这意味着“获取 f 的子字符串,从字符 0 开始,到结束前的 5 个字符结束”)。
您显然想用 done 终止循环.我还建议将参数括在引号中,以防止分词(也就是说,如果文件名包含某些字符,它们可能会被拆分为 ffmpeg 的多个参数)。
把它们放在一起:for f in *.mp4; do f=${f%.*}; ffmpeg -i "$f.mp4" -vf ass="$f.ass" "$f-output.mp4"; done当然,一旦你运行了它,你需要删除所有的输出文件,然后才能再次运行它。或者您可以将输出文件放在不同的目录中开始。

编辑:另一位用户发布了一个答案,该答案似乎已被删除。这是一个很好的答案,但缺乏解释。和我的回答基本一样,只是用了${f%.mp4}剥离 .mp4扩大。我的答案可能稍微复杂一些,但效率更高一些,所以这基本上是个人喜好问题。

编辑 2:基于 the link provided by llogan’s comment ,我做了这些改变:

  • 删除作业中的引号,因为作业不受分词的影响(这在 bash 手册页中也有说明)。
  • 使用${f%.*}剥离扩展名。这会从末尾删除一个点,后跟任何字符序列。它寻找可能的最短匹配,所以它实际上是在寻找一个点,然后是任何末尾的非点字符序列。
  • 关于loops - 循环连接两个文件的ffmpeg命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64537847/

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