如何将音频文件的文件夹转换为单个文件(遍历多个文件夹)?

皮哈尔比

我有几个不同系列的广播剧。有些已经是单轨,有些是多轨。我希望所有人都是单轨的。我不介意重新编码;实际上,我想将它们传输到我的移动设备上,并且更喜欢opus输出。

从单个有声读物的文件夹内部,这似乎可以解决问题,将mp3转换为作品:

ffmpeg -i "concat:$(ls *.mp3 | tr '\n' '|')" -acodec opus test.opus

现在,我确实有很多想要转换的多轨广播剧。我想定义一个可以与我一起使用的函数,也可以find将结果通过它传递给ls

我无意中发现了这样的变体:

function audioconcat { folder=$1; iformat=$2; oformat=$3; echo $folder; echo $iformat; echo $oformat; ffmpeg -i \'concat:$(find "$folder" -name *.$iformat | tr '\n' '|' | tr ' ' '\ ' | head -c -1)\' -acodec $oformat \'$folder.$oformat\'; }

因此,其想法是在文件夹内查找具有给定输入格式的文件,将它们放入ffmpeg并置,将流编码为给定的输出格式,并使用文件夹名称将其保存为单个文件。

但是,我似乎总是在空格和/或嵌套函数调用方面遇到问题。

我该怎么做才能修复我的功能?或者,如上所述,有什么更好的方法可以进行转换?

伊尼安

您已经在代码中演示了多个反模式,可以对其进行改进。请参阅为什么不应该解析ls(1)的输出您无需解析lscommand的输出,并避免将多条shell管道与trcommand和一起使用find

建议更好地使用本机外壳程序提供的glob选项,在您的情况下应为bash外壳程序。

这段代码$(ls *.mp3 | tr '\n' '|')可以很好地用bash它提供的文件遍历选项来编写,如下所示:

shopt -s nullglob
mp3FileList=(*.mp3)

启用此扩展外壳程序选项可确保在填充到数组中时跳过空的glob结果,而不是对其进行处理。您应该cd进入该文件夹,然后在下面执行。请注意|数组后的最后一个,因为您最初也将其包含在列表中。如果不需要,将其删除。

fileString=$( IFS='|'; echo "${mp3FileList[*]}|" )

现在,上面的变量将包含一个|单独格式的文件列表,|最后一个带有,然后可以ffmpeg作为以下形式传递给您的命令

ffmpeg -i "concat:${fileString}" -acodec opus test.opus

关于将脚本的多个选项传递给您的第二个要求。您可以扩展此脚本来执行

audioConcat() {
    (( "$#" < 3 )) && { printf 'insufficient arguments supplied' >&2; exit 1 ; }
    cd "$1" || { printf 'unable to navigate to target\n' >&2; exit 2 ; }

    shopt -q nullglob; nullglob_set=$?
    ((nullglob_set)) && shopt -s nullglob

    local fileList
    local fileString

    fileList=(*."${2}")

    if (( ${#fileList[@]} )); then
        fileString=$( IFS='|'; echo "${fileList[*]}" )
        ffmpeg -i "concat:${fileString}" -acodec "$3" "$1.$3"  
    else
        printf 'unable to find files of extension %s\n' "$2" >&2
        exit 3 
    fi

    ((nullglob_set)) && shopt -u nullglob      
}

请记住,在调用函数时,将您的参数传递为

audioConcat '/path/to/mp3files/' 'mp3' 'opus'

强烈建议您ffmpeg在上面的函数中注释掉该行,并在调用实际命令之前查看是否根据需要创建了变量还要确认您是否需要|文件列表中的结尾

功能中使用的构造的快速摘要

  1. nullglob在路径名扩展过程中设置选项将避免扩展空的glob,即,在未.mp3找到文件的情况下,扩展时数组将为空,而不是未扩展的glob
  2. $(IFS='|'; echo "${mp3FileList[*]})这是一个精巧的技巧,可以产生以|单独的格式打印输出我们正在IFS子外壳(输入字段分隔符)中修改,因此不会在全局范围内对其进行修改。数组扩展使用[*]将字符串与IFS设置连接在一起

一些杂项。需要考虑的注意事项:-exit在函数中使用from实际上会退出您正在运行该函数的当前shell。从命令行使用时,建议不要使用它,而从带有适当解释器she-bang设置的脚本运行时,则不建议使用它,在这种情况下,它将退出为运行脚本而启动的子外壳。如果您打算更频繁地从命令行使用该命令,请用替换这些exit调用return

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从文件夹将音频文件拆分为多个音频WAV文件

来自分类Dev

如何将多个文件夹中的pdf文件转换为与文件夹名称匹配的多个pdf文件

来自分类Dev

如何将文件夹和子文件夹的列表转换为JSOn FOrmat

来自分类Dev

如何将 git 存储库文件夹转换为常规文件夹?

来自分类Dev

如何将.pst批量转换为单个邮件和文件夹结构?

来自分类Dev

使用ffmpeg将文件夹中的所有mp4音频文件转换为mp3

来自分类Dev

如何将文件夹中的所有.csv文件转换为具有多个工作表标签(每个.csv 1个)的单个.xlsx文件?

来自分类Dev

如何将文件夹中的所有odt文件转换为Microsoft Word文件?

来自分类Dev

如何将文件夹中的文件复制到多个文件夹中

来自分类Dev

如何将同一文件夹中的所有音频文件同时转换为另一种格式

来自分类Dev

如何将文件夹中存在的多个 PPM 文件加载为单个 Numpy ndarray?

来自分类Dev

如何遍历文件夹?

来自分类Dev

JAVA - 遍历音频文件文件夹,将另一个音频文件连接到每个文件

来自分类Dev

使用R将多个文件从多个文件夹复制到单个文件夹

来自分类Dev

如何将.pdf文件转换为图像文件夹?

来自分类Dev

如何将.pdf文件转换为图像文件夹?

来自分类Dev

从其他文件夹访问音频文件

来自分类Dev

是否可以将文件夹转换为文件

来自分类Dev

如何构建将音频文件下载到本地文件夹或从Silverlight应用程序下载文件夹的功能?

来自分类Dev

如何将包含文本文件的文件夹转换为xml文件进行haar培训

来自分类Dev

如何将文件夹中的多个文件压缩到一个压缩文件夹中?

来自分类Dev

将音频文件保存到新创建的文件夹中-Android开发

来自分类Dev

将音频文件保存到新创建的文件夹中-Android开发

来自分类Dev

用于将音频文件递归转换为 mp3 的脚本在另一个具有相同子文件夹名称的文件夹中

来自分类Dev

如何将文件从子文件夹移动到父文件夹?

来自分类Dev

如何将一百个文件从文件夹复制到文件夹?

来自分类Dev

设置背景颜色时,如何将.png的文件夹转换为.jpgs?

来自分类Dev

如何将整个文件夹或程序包从Java转换为Objective-C?

来自分类Dev

如何将URL数组转换为树/文件夹结构数据?

Related 相关文章

  1. 1

    如何从文件夹将音频文件拆分为多个音频WAV文件

  2. 2

    如何将多个文件夹中的pdf文件转换为与文件夹名称匹配的多个pdf文件

  3. 3

    如何将文件夹和子文件夹的列表转换为JSOn FOrmat

  4. 4

    如何将 git 存储库文件夹转换为常规文件夹?

  5. 5

    如何将.pst批量转换为单个邮件和文件夹结构?

  6. 6

    使用ffmpeg将文件夹中的所有mp4音频文件转换为mp3

  7. 7

    如何将文件夹中的所有.csv文件转换为具有多个工作表标签(每个.csv 1个)的单个.xlsx文件?

  8. 8

    如何将文件夹中的所有odt文件转换为Microsoft Word文件?

  9. 9

    如何将文件夹中的文件复制到多个文件夹中

  10. 10

    如何将同一文件夹中的所有音频文件同时转换为另一种格式

  11. 11

    如何将文件夹中存在的多个 PPM 文件加载为单个 Numpy ndarray?

  12. 12

    如何遍历文件夹?

  13. 13

    JAVA - 遍历音频文件文件夹,将另一个音频文件连接到每个文件

  14. 14

    使用R将多个文件从多个文件夹复制到单个文件夹

  15. 15

    如何将.pdf文件转换为图像文件夹?

  16. 16

    如何将.pdf文件转换为图像文件夹?

  17. 17

    从其他文件夹访问音频文件

  18. 18

    是否可以将文件夹转换为文件

  19. 19

    如何构建将音频文件下载到本地文件夹或从Silverlight应用程序下载文件夹的功能?

  20. 20

    如何将包含文本文件的文件夹转换为xml文件进行haar培训

  21. 21

    如何将文件夹中的多个文件压缩到一个压缩文件夹中?

  22. 22

    将音频文件保存到新创建的文件夹中-Android开发

  23. 23

    将音频文件保存到新创建的文件夹中-Android开发

  24. 24

    用于将音频文件递归转换为 mp3 的脚本在另一个具有相同子文件夹名称的文件夹中

  25. 25

    如何将文件从子文件夹移动到父文件夹?

  26. 26

    如何将一百个文件从文件夹复制到文件夹?

  27. 27

    设置背景颜色时,如何将.png的文件夹转换为.jpgs?

  28. 28

    如何将整个文件夹或程序包从Java转换为Objective-C?

  29. 29

    如何将URL数组转换为树/文件夹结构数据?

热门标签

归档