現在、私はこのコマンドを実行します...
# Script designed to convert webm files to m4a for easy listening
for i in *.m4a ; do
echo ffmpeg -i "\""$PWD/$i"\"" -c:a copy "\""$PWD/${i%.m4a}.mkv"\"" >> ~/bulk.command.txt
done
スクリプトファイルを自分で作成し、後で実行してメディアファイルのバッチ再パッケージ化を行うことができます。残念ながら、このプロセスでは、再パッケージ化する必要がある各ディレクトリを入力し、スクリプト名を入力する必要があります。
これらのプロジェクトには、かなりの数のディレクトリとサブディレクトリがある場合があります。また、これらのプロジェクトは大きくなると、プロジェクトのルートディレクトリのサイズに注意する必要があります。
私はまだbashでコーディングする方法を学んでいますが、この単純なスクリプトを使用すると、考えられるすべてのファイル名を確実に把握できるようになるまでかなり時間がかかりました。
次に、ホームフォルダーの音楽フォルダーに移動してこのコマンドを1回実行し、ディレクトリレイアウトを保存するだけでなく、ffmpegが作成したファイルを別のディレクトリ。ウィザードには、このタスクを達成するためのコード例、用語、またはアイデアがありますか?
再帰的なグロビングを有効にして、サブディレクトリに再帰します。
shopt -s globstar
その後、あなたがすることができます:
for f in **/*.m4a
do
printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "$PWD/${f%.m4a}.mkv"
done > bulk.command.txt
printf
の%q
は、シェル入力として安全に使用できるように文字列を引用符で囲むため、引用符で混乱する必要はありません。
%q quote the argument in a way that can be reused as Shell input
これをスクリプトにすると、引数を使用して、出力ファイルに別のディレクトリを使用するかどうかを決定できます。
#! /bin/bash
shopt -s globstar
for f in **/*.m4a
do
printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "${1:-$PWD}/${f%.m4a}.mkv"
done > bulk.command.txt
${foo:-bar}
は、空でない場合は変数foo
の値を使用し、空でない場合はbar
を使用するため、この場合は空でない場合は最初の引数を使用し、$PWD
さもないと。
その場合は、ディレクトリ構造を再作成する必要があります。これは、mkdir -p
:
#! /bin/bash
shopt -s globstar
for f in **/*.m4a
do
printf 'mkdir -p %q\n' "${1:-$PWD}/${f%/*}"
printf 'ffmpeg -i %q -c:a copy %q\n' "$PWD/$f" "${1:-$PWD}/${f%.m4a}.mkv"
done > bulk.command.txt
これは、後で使用するためにスクリプトを本当に作成する必要がある場合です。個人的には、ポイントはわかりません。実際にループを実行する必要があるときに直接ループを実行できます。
#! /bin/bash
shopt -s globstar
for f in **/*.m4a
do
mkdir -p "${1:-$PWD}/${f%/*}"
ffmpeg -i "$PWD/$f" -c:a copy "${1:-$PWD}/${f%.m4a}.mkv"
done > bulk.command.txt