SoxとFFMPEGを一緒に接続する

SoxとFFMPEGを一緒に接続する

私はさまざまな形式のオーディオファイルを扱っており、FFMPEGとSoXを使用してその形式と設定を統合したいと思います。

私のプロセスには2つのステップがあります。

  1. ファイル(元のファイルは何でも)をPCM 16ビットリトルエンディアンWAVファイルに変換します。
    ffmpeg -i input.wav -c:a pcm_s16le output.wav
  2. 必要なサンプルレートとチャンネル数に合わせて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

関連情報