最新の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以降、このコマンドを実行しようとするとOption sample_rate not found。が表示されます。 -ar 441(または-sample_rate 44100)を省略すると、mp3が抽出されますが、ほとんどの場合、抽出されたmp3の長さは適合しなくなります。つまり、aviの長さはわずか5分ですが、長さは43分程度です。
これはffmpegとavconvの両方で同じ問題です。これらの問題を解決する方法はありますか?
代わりにこれを試してください:
ffmpeg -i "$x" -vol 100 -ab 160k -ar 44100 "`basename "$x" .avi`.mp3"
オプションが入力ファイルの前にある前ですが、出力ファイルにオプションを設定したいようです。
他の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のようなコマンドを使用してファイルに関する情報を表示し、それに応じてオプションを設定することを検討しましたか(おそらく、出力を解析してスクリプトで自動化することもできます)。
おそらく、ロスレス形式でオーディオファイルを抽出してから、オーディオファイルをトランスコードすることもできますが、それよりも優れた方法が必要です。
並べ替えられたら、デマルチプレクサする必要のある数千のビデオファイルを処理する明白な方法に満足していないので、行ったことを投稿してください。私はあなたと同じようなスクリプトを作成しましたが、スペースを無駄にすることなく、可能な限り最高品質のオーディオファイルを取得したいと考えています。私のトランスコーディングオプションは確かに動的になるので、ワンライナーよりも少し洗練されたものが必要です。
ffmpeg -versionは、ffmpegがUbuntu12.04用にコンパイルされたときに有効にされたビルドオプションを通知します。ライブラリが欠落しているか、ビルド時にオプションが有効になっておらず、無効なオプションを有効にして再コンパイルする必要がある可能性があります。 ffmpegのデフォルトのサンプルレートは44100で、ビットレートは64kです。
Ppa:jon-severinsson/ffmpegからffmpegのppaをインストールすると、修正されます。