ffmpegを使用してflacをoggにバッチ変換する

ffmpegを使用してflacをoggにバッチ変換する

ディレクトリ全体を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なので、シェルを実行するために別のシェルを使用するのは問題ありませんzshfishこの目的にも使用できるようですが、ほとんど使用しません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.zshrunを実行chmod 755 /path/to/massconvert.zshして実行可能にし、flacコレクションを含むフォルダで実行します。

cd /home/utemost/flacs
/path/to/massconvert.zsh /home/utemost/oggs

それだけです!

関連情報