を教えてください
700個のmp3ファイルfile1,file2,file3,…,file700の音量をノーマライズするときに
#mp3gain -r file1
#mp3gain -r file2
#mp3gain -r file3
・・・・・・・・・
#mp3gain -r file700
でOKでしょうか?それとも
#mp3gain -r file1 file2 file3 … file700
としなければならないでしょうか?
後者だとファイル数が700個あるのでシェルスクリプトを作るのが大変です
(IFSをセットしているため)
前者でよいのならば簡単なのですが
よろしくお願いします
No.2ベストアンサー
- 回答日時:
ほらよ。
ループでない処理のパターン。
findを使ってファイル名検索とパイプを使った方法。
>引数が1ファイルなので
各ファイルの平均値を出すのではなくて上記のサイトを見る限り89dbで自動的に調整するだけみたい。
それとコマンドのオプションがわからなければman使えよ。
dbの値を調整するオプションもあるみたいだな。
最近の奴はmanを知らないのか?それとも自分でmanする気がないのか?
この回答への補足
ありがとうございます
manはよく使っています
-rオプションはそれで選択しました
問題は1ファイル指定だと音量が他との関係がないのでノーマライズはできるわけないと思ったのです
従ってmp3gain -rの引数として全ファイルを一度に設定しなければ鳴らないのでは
と思ったのです
この辺のことろまではman mp3gainには書いていません
もし全ファイル指定だと
ループを使って
files="file1 file2 file3 … file700"
として
#mp3gain $files
は
IFS="
"
をしているので機能しません
($filesの内容が1つのファイル名とみなされるため)
勿論
#file=file1
#mp3gain $file
は機能します
従って前者ならば問題は解決されて動いています
しかし後者(全ファイル指定が必要)だとまだ作っていませんが作成が大変です
よろしくお願いします
ちなみに動いている前者対応版は以下のとおりです
same-volume.sh:
#!/bin/sh
IFS="
"
IN=`pwd`/
OUT=/root/デスクトップ/
cd $OUT
if [ -e flv_music ]
then
for x in `find flv_music -name "*"`
do
y=$IN`echo $x | sed -e "s/flv_music/music/"`
if [ -d $x ]
then
if [ ! -e $y -o ! -d $y ]
then
rm -rf $x
fi
else
z=`echo $y | sed -e "s/\.flv$//"`
if [ $z = $y ]
then
rm -f $x
else
if [ ! -e ${z}.v -o -d ${z}.v ]
then
rm -f $x
fi
fi
fi
done
fi
cd $IN
if [ -e music ]
then
for x in `find music -name "*"`
do
if [ -d $x ]
then
y=$OUT`echo $x | sed -e "s/music/flv_music/"`
if [ ! -e $y ]
then
mkdir -p $y
fi
fi
done
for x in `find music -name *.v`
do
if [ ! -d $x ]
then
x=`echo $x | sed -e "s/\.v$//"`
y=$OUT`echo $x | sed -e "s/music/flv_music/"`
if [ ! -e ${y}.flv ]
then
cp ${x}.v ${y}.v
ffmpeg -i ${y}.v ${y}.mp3
mp3gain -c -r ${y}.mp3
ffmpeg -i ${y}.mp3 -i ${y}.v -acodec copy -vcodec copy ${y}.flv
rm -f ${y}.v ${y}.mp3
fi
fi
done
else
x=${IN}music/
echo ディレクトリ $x を作成しその中に拡張子.vの動画ファイルを配置するか
echo 直下または子孫ディレクトリの中に拡張子.vの動画ファイルを
echo 少なくとも1つ以上含むディレクトリを配置してください。
fi
No.4
- 回答日時:
>DBは相対量(比)なので最初の質問の解答にはなっていませんね
だからといってその基準値となる音がどう考えてもmp3gainで一度に複数ファイル指定しても平均値とか取っているようには
いろいろなサイトをまわって検索しても出てこないって事は
mp3gainそのものに基準値がセットされていると思うのが普通だと思うけど。
ありがとうございます
とにかく一度に引数を設定していればいいわけなので作って見ました
後者でやれば問題ないはずなので疑問は残りますが妥協して解決です
same_volume2.sh:
#!/bin/sh
IFS="
"
IN=`pwd`/
OUT=/root/デスクトップ/
cd $OUT
if [ -e flv_music ]
then
for x in `find flv_music -name "*"`
do
y=$IN`echo $x | sed -e "s/flv_music/music/"`
if [ -d $x ]
then
if [ ! -e $y -o ! -d $y ]
then
rm -rf $x
fi
else
z=`echo $y | sed -e "s/\.flv$//"`
if [ $z = $y ]
then
rm -f $x
else
if [ ! -e ${z}.v -o -d ${z}.v ]
then
rm -f $x
fi
fi
fi
done
fi
cd $IN
if [ -e music ]
then
for x in `find music -name "*"`
do
if [ -d $x ]
then
y=$OUT`echo $x | sed -e "s/music/flv_music/"`
if [ ! -e $y ]
then
mkdir -p $y
fi
fi
done
for x in `find music -name *.v`
do
if [ ! -d $x ]
then
x=`echo $x | sed -e "s/\.v$//"`
y=$OUT`echo $x | sed -e "s/music/flv_music/"`
if [ ! -e ${y}.flv ]
then
cp ${x}.v ${y}.v
ffmpeg -i ${y}.v ${y}.mp3
fi
fi
done
find ${OUT}flv_music -name *.mp3 -print0|xargs -0 mp3gain -c -r
for x in `find music -name *.v`
do
if [ ! -d $x ]
then
x=`echo $x | sed -e "s/\.v$//"`
y=$OUT`echo $x | sed -e "s/music/flv_music/"`
if [ ! -e ${y}.flv ]
then
ffmpeg -i ${y}.mp3 -i ${y}.v -acodec copy -vcodec copy ${y}.flv
rm -f ${y}.v ${y}.mp3
fi
fi
done
else
x=${IN}music/
echo ディレクトリ $x を作成しその中に拡張子.vの動画ファイルを配置するか
echo 直下または子孫ディレクトリの中に拡張子.vの動画ファイルを
echo 少なくとも1つ以上含むディレクトリを配置してください。
fi
No.1
- 回答日時:
シェルスクリプト書くならループさせようよ。
この回答への補足
ありがとうございます
前者の場合はループで簡単にできますが
すべてのmp3gain -rの引数が1ファイルなので
これでノーマライズが出きるかどうか疑問です
もしそれでできるならばもうループを使って作っているので問題は解決です
要するにノーマライズのために
mp3gain -rの引数の引数として全てのファイルを一度に指定しなければならないかどうか
をお聞きしたいのです
そうすると最初に
IFS="
"
をしているのでループでやるにしても大変です
よろしくお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- iPad iPad air 5 を使っています。 バッテリーの持ちが良く、スピードも速いので使う頻度は高いです 3 2022/08/26 18:12
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- Perl perlのflock関数でロックをかけたままopen関数で何度もファイルを開きなおすことはできますか 3 2023/05/01 22:25
- UNIX・Linux Linuxの実行結果を修正したいです。 6 2022/11/22 12:57
- その他(プログラミング・Web制作) pythonのエラーについて 2 2022/08/17 17:17
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- Ruby 教えてください 2 2023/01/04 17:50
- リフォーム・リノベーション 壁紙について 5 2022/10/19 12:09
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- その他(プログラミング・Web制作) セレクトボックスで選択された値をコントローラーで使用したい 2 2022/07/26 16:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Winmerge ファイルの中身は同じ...
-
同期センターのマークが出てま...
-
onedriveの中身を削除したらパ...
-
コマンドプロンプトによるフォ...
-
ファイルの先頭行を全て削除したい
-
emlをtxtに変換するには?
-
バッチファイルで変数の中身を...
-
Windows10 フォルダ内の自動並...
-
教えてください!困ってます。
-
office365 ファイルを削除したい
-
ファイルの単位
-
外字ファイル、eudc.tte と e...
-
NAS上のExcelファイルを開く時...
-
teratrermを使ったデータの送信...
-
たくさんのフォルダを一つのフ...
-
Windows11 でのファイル削除
-
ファイル操作(削除など…)の履...
-
xcopy コマンドの EXCLUDE オプ...
-
mac 表示できなくなりました。
-
Kshでエラー(no closing quote...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Winmerge ファイルの中身は同じ...
-
onedriveの中身を削除したらパ...
-
同期センターのマークが出てま...
-
バッチファイルで変数の中身を...
-
ファイルの先頭行を全て削除したい
-
Windows10 フォルダ内の自動並...
-
教えてください!困ってます。
-
コマンドプロンプトによるフォ...
-
emlをtxtに変換するには?
-
ファイルの単位
-
mac ファイルの詳細情報を編集...
-
office365 ファイルを削除したい
-
Excellにて→ファイルエラー:デ...
-
macのdmgファイル(動画)をMP4...
-
クラリスワークスのファイルを...
-
mrl→midファイルへ
-
Windows11 ゴミ箱 ファイルの取...
-
会社のTeamsのことで相談です。...
-
フォルダ内の一覧を印刷するには?
-
exFATに欠点はありますか?
おすすめ情報