【问题标题】:bash: convert files within subfolders and output to another folderbash:转换子文件夹中的文件并输出到另一个文件夹
【发布时间】:2021-06-26 04:07:10
【问题描述】:

我的文件组织为 G:\Songs\Songs - FLAC%album artist%%album%\。我有一个 bash 脚本来修剪曲目开头和结尾的静音并将它们输出为 mp3。如果我从 G:\Songs\Songs - FLAC 运行脚本,它不会转换子文件夹中的曲目。是否有任何参数可以转换子文件夹中的文件?另外,我想将修剪后的歌曲输出到 G:\Songs\Trimmed。这可能吗?

脚本:

        #!/bin/bash

        for file in *.flac
        do
        ffmpeg -i "$file" -af silenceremove=start_periods=1:start_duration=1:start_threshold=-65dB:detection=peak,aformat=dblp,areverse,silenceremove=start_periods=1:start_duration=1:start_threshold=-65dB:detection=peak,aformat=dblp,areverse -q:a 5 "${file%.*}.mp3"
        done;

感谢任何帮助

【问题讨论】:

    标签: bash


    【解决方案1】:

    使用globstar

    您的匹配将包括任意深度的子目录,因此您的输出文件名的命令逻辑和参数解析甚至不需要更改。

    $: shopt -s globstar
    $: printf "%s\n" **/*.flac
    foo/bar.flac
    foo/there.flac
    here.flac
    

    新名称的参数解析非常简单 -

    for file in **/*.flac; do
      echo "$file -> ${file%.*}.mp3"
    done
    foo/bar.flac -> foo/bar.mp3
    foo/there.flac -> foo/there.mp3
    here.flac -> here.mp3
    

    所以对于你的脚本,假设你的参数是正确的,

    shopt -s globstar
    for file in **/*.flac do
      bare="${file##*/}"
      ffmpeg -i "$file" -af silenceremove=start_periods=1:start_duration=1:start_threshold=-65dB:detection=peak,aformat=dblp,areverse,silenceremove=start_periods=1:start_duration=1:start_threshold=-65dB:detection=peak,aformat=dblp,areverse -q:a 5 "/new/location/${bare%.*}.mp3"
    done
    

    确保在循环之前包含shopt s globstar,并将我所说的/new/location/ 更改为您实际想要修剪文件的位置。

    【讨论】:

    • 那么这个输出会输出到包含子文件夹的文件夹之外的单独文件夹吗?
    • 你可以让它做你需要的任何事情。如所写,它将使新文件在旧文件旁边,在它们现在所在的任何文件夹中。如果您需要不同的东西,只需调整逻辑即可。使用我的 echo 而不是您实际的 ffmpeg 命令运行它以查看源文件名和目标文件名。
    • 所以我现在得到了我的脚本#!/bin/bash for file in **/*.flac do ffmpeg -i "$file" -af silenceremove=start_periods=1:start_duration=1:start_threshold=-65dB:detection=peak,aformat=dblp,areverse,silenceremove=start_periods=1:start_duration=1:start_threshold=-65dB:detection=peak,aformat=dblp,areverse -q:a 5 "${file%.*}.mp3" done;,但我不知道如何输出到另一个目录。任何指针?
    猜你喜欢
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 2022-08-21
    • 2017-05-04
    • 2020-05-24
    • 2018-07-25
    • 2015-12-18
    相关资源
    最近更新 更多