Ubuntu Karmicへの.amrサポートの追加

Nokiaは、 amr形式のボイスレコーダーを携帯します。
魅力的なUbuntu Karmicにワイヤーで電話を接続し、長い骨の折れるメンタルワークによって指示されたオーバーフロー...
そして、予想外の悪夢が私たちを待っています。 これらのファイルのコーデックはインストールされていないだけでなく、gstreamerのコーデック検索ユーティリティ(多くの場合、「めちゃくちゃになってしまう」)を使用して見つけることもできません。
さらに、ネットワーク上で「そのようなパッケージを配信し、それだけですべてを配信する」という精神での迅速な方法はありませんでした。 リポジトリにはlibopencore-amrnb0およびlibopencore-amrwb0パッケージがありますが、それらに依存するパッケージはありません。つまり、デフォルトではこれらのライブラリを使用できるプレーヤーはありません。

したがって、UbuntuもLinuxです。 したがって、このすべての不名誉は手で支配されます。

  1. 一度やってください。 Amrサポートは、実際にはffmpegで行われます。 しかし、いくつかの(明らかに著作権上の)理由でUbuntuの人たちは、パッケージをビルドするときにそれを含めませんでした。
    私たちの祖国ではライセンス違反が誰も止めていないので、パッケージをより正しく再構築しますか?
    ソースをダウンロード:
    $ cd / usr / src
    $ apt-get source ffmpeg
    $ cd ffmpeg-0.5 + svn20090706 /

    debian/confflagsは、標準のリポジトリにはないライブラリのコンテキストでamrが言及されています。
    confflags + = $(cond_enable_nf、/ usr / include / amrnb / sp_dec.h、libamr-nbを呼び出します)
    confflags + = $(cond_enable_nf、/ usr / include / amrwb / dec.h、libamr-wbを呼び出します)

    ここで、 cond_enable_nfマクロcond_enable_nf 、各フリーでないライブラリのヘッダーの可用性に基づいて、configureに必要なフラグを設定します。 configure -hを調べたところ、可能なフラグのリストに次のように表示されconfigure -h
    --enable-libamr-nb libamr-nb浮動小数点オーディオコーデックを有効にする[no]
    --enable-libamr-wb libamr-wb浮動小数点オーディオコーデックを有効にする[no]
    --enable-libopencore-amrnb libopencore-amrnbによるAMR-NB de / encodingの有効化[no]
    --enable-libopencore-amrwb libopencore-amrwbによるAMR-WBデコードを有効にします[no]

    つまり、opencoreのライブラリは引き続きffmpegに接続できます。
  2. アセンブリのライブラリをインストールします。
    ここではすべてが些細なことです-コンパイルに必要な* -devパッケージとamrのライブラリを取り出します(2つあり、どちらが必要かを理解するのが面倒でした-おそらく2番目のパッケージも将来役に立つかもしれません):
    $ sudo apt-get build-dep ffmpeg
    $ sudo apt-get install libopencore-amrnb libopencore-amrnb-dev libopencore-amrwb libopencore-amrwb-dev
  3. ffmpegのパッケージアセンブリアルゴリズムを修正する
    opencoreのamrライブラリをdebian / confflagsファイルに追加します。
    confflags + = $(cond_enable_nf、/ usr / include / amrnb / sp_dec.h、libamr-nbを呼び出します)
    confflags + = $(cond_enable_nf、/ usr / include / amrwb / dec.h、libamr-wbを呼び出します)
    confflags + = $(cond_enable_nf、/ usr / include / opencore-amrnb / interf_dec.h、libopencore-amrnbを呼び出します)
    confflags + = $(cond_enable_nf、/ usr / include / opencore-amrwb / dec_if.h、libopencore-amrwbを呼び出します)

    今、すべてが一緒に来なければなりません。
  4. 更新されたffmpegを収集します。
    $ dpkg-buildpackage -rfakeroot -uc -b

    fakeroot( -rfakeroot )を使用してバイナリパッケージ( -b )のみをビルドし、変更に署名しません( -uc )。
    / usr / srcへの出力は、再コンパイルされたパッケージの全体の束になります。
  5. 発生したすべてをインストールします。
    $ sudo dpkg -i /usr/src/*.deb

    (インストールする必要のないパッケージがまだある場合、私は責任を負いません。)
  6. ffmpegにamrサポートがある場合、すべてがすべてをサポートしているかどうかを確認します。
    $ ffmpeg -version | grep amr

    結果の長いソーセージに部分--enable-libopencore-amrnb --enable-nonfree --enable-libopencore-amrwb --enable-nonfree場合、すべてがうまくいきました。
  7. ファイルを再生します。
    現在、ファイルは通常ffplayを使用してffplayます。 gstreamer0.10-ffmpeg ffmpegを介してgstreamer0.10-ffmpeg (たとえば、Exaile)を使用するプレーヤーは、引き続きコーデックを見つけられません。 私はまだこれで何をすべきかを理解していないので、一時的な対策として、すべての.amrファイルを単に.ogg追い抜くことに決めました。
  8. スクリプトトランスコーダーを作成しています。
    適切な場所のどこかに(私は/usr/local/binが好きです)amr2oggファイルを作成し、それにrwxr-xr-x権利と所有者root:rootを与えます。
    #!/ bin / sh
    ffmpeg -i "$ 1" "` echo "$ 1" | sed s / amr $ / ogg / `"

次に、スクリプトを使用してopen * .amrファイルを公開します。 すべての準備ができました。ソースファイルの横をダブルクリックすると、何でも再生できる同じ名前のoggが作成されます。



この投稿では、UbuntuはMS WindowsよりもGentooにまだまだ近いことを多くの人に思い出させたいと思います。そして、それを望む誰でもコードをデバッグして再構築する余地を残しています。


Source: https://habr.com/ru/post/J80420/


All Articles