最新のUbuntuにアップグレードする前に、次のコマンドを使用してaviファイルからmp3を抽出しました。
$ for x in *.avi; do ffmpeg -vol 100 -ab 160k -ar 44100 -i "$x" "`basename "$x" .avi`.mp3"; done
これは効果がありました。しかし、Ubuntu 12.04からオプションサンプルレートが見つかりません。このコマンドを実行しようとしたとき。私が省略した場合-ar 44100(または-sample_rate 44100)mp3を抽出しますが、ほとんどの場合、抽出されたmp3の長さはもはや一致しません。つまり、aviの長さはわずか5分ですが、長さは約43分です。
ffmpegとavconvの両方に同じ問題があります。これらの問題を解決する方法についてのアイデアはありますか?
答え1
代わりにこれを試してください:
ffmpeg -i "$x" -vol 100 -ab 160k -ar 44100 "`basename "$x" .avi`.mp3"
以前は、オプションは入力ファイルの前にありましたが、出力ファイルに設定したいようです。
答え2
別のaviファイルを試してみましたか?ファイルのオーディオトラックはビデオトラックよりも長くなることがあります(推測のみ)。
-tオプションを試してみましたか?
-t duration
Restrict the transcoded/captured video sequence to the duration
specified in seconds. "hh:mm:ss[.xxx]" syntax is also supported.
ffmpegでオーディオビットストリームフィルタを設定することもできます。私はそれを試したことがありませんが、「remove_extra」フィルタが有望に見えます。 ;)
-absf bitstream_filter
Bitstream filters available are "dump_extra", "remove_extra",
"noise", "mp3comp", "mp3decomp".
ファイルに関する情報を確認し、それに応じてオプションを設定するためにExifToolなどのコマンドを使用することを検討してみましたか(おそらく出力を解析してスクリプトから自動化することも可能です)。
ロスレス形式でオーディオファイルを抽出してからオーディオファイルをトランスコードすることもできますが、これより良い方法が必要です。
問題が解決したら、行った作業を投稿してください。私は、逆多重化に必要な1000個のビデオファイルを処理する確実な方法が気に入りません。私はあなたに似たスクリプトを作成しましたが、スペースを無駄にせずに可能な限り最高品質のオーディオファイルを取得したいと思いました。私のトランスコーディングオプションは確かに動的であるため、1行よりも複雑なものが必要です。
答え3
ffmpeg -versionは、Ubuntu 12.04用のffmpegをコンパイルするときにどのビルドオプションが有効になっているかを示します。ライブラリが欠落しているか、ビルド中にオプションが有効になっていない可能性があり、無効なオプションを有効にして再コンパイルする必要があります。 ffmpegのデフォルトのサンプルレートは44100、ビットレートは64kです。
答え4
ppa:jon-severinsson/ffmpeg に ffmpeg 用の ppa をインストールすると問題が解決します。