私の作品に使用するサウンドファイルを含むフォルダがあります。このフォルダのリストをスプレッドシートで利用できるものに変換したいと思います。結果にはファイル名、サウンドの長さ、ファイルサイズなどが含まれることを望みます。これはどのように達成できますか?
答え1
exiftool
ほとんどのファイルタイプからメタデータを抽出してcsvにフォーマットできるので、この方法をお勧めします。
exiftool -csv -FileSize -Duration -- *.opus > list.csv
しかし、少なくとも私のバージョンはexiftool
opusファイルから期間抽出をサポートしていないようです。 @dodrgが述べたように、ffprobe
出力をCSVにフォーマットすることもサポートされています。
{
echo filename,duration,size
for file in *.opus; do
ffprobe -v warning \
-of csv=p=0 \
-show_entries format=filename,duration,size \
-i "$file"
done
} > list.csv
ただし、これは一度に複数のファイルの情報を返すことができるようには見えないため、はるかに遅くなりますffprobe
。したがって、ファイルごとに1つの呼び出しを実行する必要があります。
フィールドの順序は固定されているように見えます。-show_entries format=filename,duration,size
または指定されているかどうかにかかわらず、フィールドは常に、、順にリストさ-show_entries format=size,filename,duration
れます。filename
duration
size
jq
必要なフィールドと順序の情報を使用して、すべてのものをJSON形式で出力し、形式を再指定するように指示することもできますmlr
。また、mlr
から返された情報をから返された情報にexiftool
リンクするのにも役立ちますffprobe
。
たとえば、
exiftool -csv -- *.opus |
mlr --csv join --ijson -f <(
for file in *.opus; do
ffprobe -v warning -show_format -of json -i "$file"
done | jq .format) -j SourceFile -l filename > list.csv
目的のフィールドに出力を制限するには、コマンドthen cut -f SourceFile,duration,size,Artist
に...を追加します。mlr