
ディレクトリ全体をflacからoggに変換するためにこのコマンドを変換しようとしています。
ffmpeg -i musicfile.flac musicfile.ogg
マンページを読みました。しかし、正直に言うと、それは私より少し外れました。サウンドコンバータ(またはGUIプログラム)を使用したくありません。だから私はあなたに頼ります。
私はopensuse回転秒を使用します。そして私が使用するfish
のはbash
。すべてが最新の状態です。
正確に私が望むのは、flacフォルダを別のoggフォルダに変換することです。もちろん、品質はq5と同じです。 hi.flacファイルをに入れたとし、~/flac/hi folder
ファイルフォルダ構造と名前を保持しながらoggフォルダに出力したいと思います。~/ogg/hi folder
。
可能ですか?それとも私があまりにも多くを要求しているのでしょうか?
私はそれを使ってきましたがflac2all
、速度が徐々に遅くなることを除いて、先ほど説明したのとまったく同じように動作します。したがって、このコマンドを使用する方が高速であることを確認したいと思いますffmpeg
。私は検索しましたが、誰かが小さなbashスクリプトを投稿しましたが、私にはうまくいきません。だから再び。私はあなたに頼ります。
読んでくれてありがとう。
答え1
たぶん、次のようなものがあります。
apt install parallel
find /music -type d | xargs -i mkdir -p "/out_music/{}"
find /music -type f -name "*.flac" | parallel -j8 ffmpeg -i '{}' -ar 44100 -vn -codec:a libvorbis -qscale:a 7 -y '/out_music/{}.oga'
これにより、同様の名前のファイルが生成されますが、.flac.oga
個人的には何も起こりませんでした。
答え2
私はPageのアプローチが好きですが、自分自身は違うようにしたいと思います。シェルは次のように指定されます。いいえbashなので、シェルを実行するために別のシェルを使用するのは問題ありませんzsh
。fish
この目的にも使用できるようですが、ほとんど使用しませんfish
。
#!/usr/bin/zsh
targetfolder="$1" # save argument to this shell script in
# variable $targetfolder
for infile in **/*.flac ; do
# ^ ^ ^^
# | | |
# \-------------------- we have a loop variable $infile…
# \------------- which we set to a new value from the following list:
# \--------- recursively (**) list all files ending in .flac (*.flac)
mkdir -p "${targetfolder}/${infile:h}"
# ^ ^ ^ ^----^^
# | | | | |
# | | | | /
# | | | | |
# \------------------------------------ make a new directory
# | | | |
# \----------------------------- making necessary parent directories on the way,
# | | ignoring all errors
# | | |
# \------------------------ expands to the argument passed to this script
# | |
# \------- expands to the current found file name,
# | but modified:
# |
# \-- removes the trailing path component, i.e.
# gets the directory containing the file
ffmpeg -i "${infile}" "${targetfolder}/${infile%.flac}.ogg"
# ^----^
# |
# remove the trailing ".flac" from the file name --/
done
または簡単に言うと、すべてのコメントを削除します。
#!/usr/bin/zsh
targetfolder="$1"
for infile in **/*.flac ; do
mkdir -p "${targetfolder}/${infile:h}"
ffmpeg -i "${infile}" "${targetfolder}/${infile%.flac}.ogg"
done
スクリプトをファイルに保存して使用できます。たとえば、massconvert.zsh
runを実行chmod 755 /path/to/massconvert.zsh
して実行可能にし、flacコレクションを含むフォルダで実行します。
cd /home/utemost/flacs
/path/to/massconvert.zsh /home/utemost/oggs
それだけです!