2秒ぐらいのループ推奨音楽をffmpegとffplayでループ再生をシェルでする
むかし、DTMサークルの立ち上げに関わったことがあり、2-3秒ぐらいのループ推奨のwavサンプルを貰った。
これを、作業するときに聴きたいと思ったのだが、再生ソフトで1曲ループさせると、2-3秒の音楽の終了とともにブチっと毎回途切れてしまう。 Spoitfyのプレイヤーだとこれがないのだが、わざわざ再生ソフトで再生するのも面倒だったので、ffmpegとffplayでやろうと思った。
まず、最初にフォルダ内のの'.wav'拡張子の音楽を探し、そのファイル名をパイプラインで送る
find . -type f -name '*.wav' |
これだと、2-3秒で次の音楽へ移行してしまうので、ループ処理をする。
xargs -I% ffmpeg -t 3600 -stream_loop -1 -i % -f wav %.output.wav
そのまま保存しても良いのだが、1時間のループ処理をすると、元は複数ファイル合わせて100MBぐらいだったのが、50GBに化けてしまった。
そこで、パイプライン処理をして、エンコードしたループ音源をそのまま再生するようにする
ffmpeg -t 3600 -stream_loop -1 -i % -f wav - | ffplay -i -
という事で、完成
find . -type f -name '*.wav' | xargs -I% ffmpeg -t 3600 -stream_loop -1 -i % -f wav - | ffplay -autoexit -i -
音声をステレオにしたり、ffprobe等で確認したオーディオコーデックを指定する
find . -type f -name '*.wav' | xargs -I% ffmpeg -t 3600 -stream_loop -1 -i % -ac 2 -acodec pcm_s16le -f wav - | ffplay -autoexit -i -
ついでに、再生順序をランダムにする。
find . -type f -name '*.wav' | shuf | xargs -I% ffmpeg -t 3600 -stream_loop -1 -i % -ac 2 -acodec pcm_s16le -f wav - | ffplay -autoexit -i -
これで作業効率アップ間違いなし