需要编写一个bash脚本,它将获取文件夹中的每个视频文件并对它们应用ffmpeg操作


1

基本上是以下命令的批处理应用程序:

ffmpeg -i "01.mkv" -map 0:a? -map 0:s? -map 0:v -c:v copy -c:a ac3 -c:s copy "test.mkv"

我希望只是在一个目录中运行它,并将所有新修复的文件与旧文件名和旧文件附加“old_”或类似内容。我对bash几乎一无所知,但对c ++和java有一些经验,所以术语不是问题,我以前从未看过bash。谢谢!

编辑:要清楚,我希望新文件为“01.mkv”,并将旧文件重命名为“old_01.mkv”。我的研究告诉我,这可能需要傻瓜,但我对此的了解甚至比我做的还要少。

EDIT2:我意识到我应该提供迄今为止我自己能够整理的东西。

#!/bin/bash
    for i in $( ls ); do
        ffmpeg -i $i -map 0:a? -map 0:s? -map 0:v -c:v copy -c:a ac3 -c:s copy $i
    done

所以你想让我们为你编码吗?
JakeGould

我建议你开始学习 bash 通过调查 for 声明。
AFH

我上面编辑过。我理论上有什么用,我想我不明白的是如何更改文件名?是否像简单的说法一样容易 $i = old_$i?或者我会像普通终端一样使用命令行吗?喜欢 for (blah blah) cp $i old_$i。我也看到人们在相关问题上谈论gawk,但这对我正在做的事情来说似乎过于复杂。无论如何,我似乎无法将上述想法付诸实践,除非我可能只是做错了
Jason Murray

Answers:


4

好吧,在得到一个我以前从未见过的幸运谷歌搜索结果几个小时后,我终于解决了这个问题。这是答案,以防其他人出现并需要做这样的事情。

#!/bin/bash
for file in *.mkv;
    do
        oldFile=old_"$file"
        mv "$file" "$oldFile"
        ffmpeg -i "$oldFile" -map 0:a? -map 0:s? -map 0:v -c:v copy -c:a ac3 -c:s copy "$file"
    done
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.