web-dev-qa-db-ja.com

androidでffmpegを使用して高ビットレートmp3を低レートに変換する方法

320 kbpsのmp3ファイルを128 kbpsのmp3に変換したいので、現在以下のffmpegコマンドを使用していますが、機能しません。

ffmpeg -i input.mp3 -codec:a libmp3lame -qscale:a 5 output.mp3

結果:-出力ビットレートは入力mp3と同じです。

そして、FFmpegエンコーディングガイドラインに従っているので、ここにリンクがあります:- https://trac.ffmpeg.org/wiki/Encode/MP

そのため、解決策を提案してください。

11
Android Team

私はあなたの示されたコマンドを試しました(Windows /コマンドラインでテストされました):

ffmpeg -i input.mp3 -codec:a libmp3lame -qscale:a 5 output.mp3

結果:それは私のために働きます。しかし -qscale:a 5は、FFmpegに平均ビットレートを決定させます。 1つの(320k)MP3ファイルを使用すると、134kbpsに近い変換が得られます。これは expected です。

lame option   Average kbit/s  Bitrate range kbit/s    ffmpeg option
   -V 5             130           120-150                -q:a 5

ソリューション
内部のmp3フレームに異なるビットレートを保持させる代わりに(「現在」の知覚されるオーディオに対応するために変化しますeg:より小さなビット/バイトのレートを使用して「サイレント」な部分を考えます「ビジー」オーディオパーツ)、定数ビットレート128kbps必要に応じて。

私はそれを手動で明示的に定数128kbpsに設定します:

ffmpeg -i input.mp3 -codec:a libmp3lame -b:a 128k output.mp3
10
VC.One

このshellscriptを使用して、このstackoverflow-pageに何度もアクセスしないようにします:)

#!/bin/bash
[[ ! -n $1 ]] && { 
    echo "Usage: mp3convert <input.mp3> <output.mp3> <bitrate:56/96/128/256> <channels> <samplerate>"
    exit 0
}
set -x # print next command
ffmpeg -i "$1" -codec:a libmp3lame -b:a "$3"k -ac "$4" -ar $5 "$2"
5