私はさまざまな形式のオーディオファイルを扱っており、FFMPEGとSoXを使用してその形式と設定を統合したいと思います。
私のプロセスには2つのステップがあります。
- ファイル(元のファイルは何でも)をPCM 16ビットリトルエンディアンWAVファイルに変換します。
ffmpeg -i input.wav -c:a pcm_s16le output.wav
- 必要なサンプルレートとチャンネル数に合わせてSoxでファイルを処理します。
sox input.wav output.flac channels 2 rate 44.1k
理想的には、不要なファイルの生成を避けるために、これら2つのコマンドを一緒にリンクしたいと思います。
しかし、実際にフォーマットを操作するのに多くの困難があります。
SoXは入ってくるオーディオのフォーマットを明示的に知る必要があると文句を言いますが、私はそれを実行してもそれを知りません。 PCMオーディオフォーマットは知っていますが、チャンネル数や受信オーディオのサンプリングレートはよくわかりません。
これら2つのコマンドを一緒に接続する方法はありますか?それとも、1つのツールを使用してタスクを実行する方が良いですか?
私が1つだけ試してみるのではなく、2つのツールを使用する理由は次のとおりです。
FFMPEG
- チャンネルをコピーしてモノラルオーディオストリームをステレオオーディオストリームに安全に変換する方法があるかどうかはわかりません。 (SoXはこれをデフォルトで行います。)
- サンプルレートを変更する方法がわかりません。 (SoXはこれをデフォルトで行います。)
- 最適な圧縮率でFLACに出力する方法がわかりません。
ソックス
- FFMPEGなどのオーディオ形式の検出はありません。拡張子のないファイルがある場合、SoXはフォーマットを手動で指定する必要がありますが、これは私のアプリケーションではまったく機能しません。
答え1
デコードにはFFmpegを使用し、フォーマット検出の問題を避けるために、パイピングにはsoxフォーマットを使用し、16ビットで出力するにはレベル8 FLAC圧縮を使用します。
ffmpeg -hide_banner -i input.wav -f sox - |
sox -t sox - -b 16 -C 8 output.flac channels 2 rate 44.1k
答え2
ファイルヘッダーで入力形式を決定するには、そのsox
入力を見つける必要がありますが、これはパイプと互換性がありません。
私はffmpegがあなたが望むすべてをすることができると思いますが、完全に自信はありません。私はそれに慣れておらず、文書は非常に明確です。
ffmpeg -i "$input" -compression_level 9 -ac 2 -ab 44100 output.flac
あるいは、メンコーダーも同様のことができるはずです。
mencoder "$input" -oac lavc -lavcopts=acodec=flac:abitrate=44.1:o=compression_level=9 -af channels=2 output.flac