2017-09-06 22 views
0

Android StudioでWindows10でffmpegソースを使用しようとしています。 私はfollowinfスクリプトによって仮想ボックス上のUbuntuの下ffmpeg.3.3.3を構築し、アンドロイドStudioプロジェクトにソースを統合:Androidスタジオでffmpegを使用する

#!/bin/bash 
NDK=/etc/FFmpegOnAndroid/android-ndk-r14b 
SYSROOT=$NDK/platforms/android-21/arch-x86_64 
TOOLCHAIN=/etc/FFmpegOnAndroid/android-ndk-r14b/toolchains/x86_64-4.9/prebuilt/linux-x86_64 
CPU=arm 
PREFIX=/etc/FFmpegOnAndroid/ffmpeg-3.3.3/output 
ADDI_CFLAGS="-fomit-frame-pointer" 
function build_one 
{ 
    ./configure \ 
     --prefix=$PREFIX \ 
     --enable-shared \ 
     --disable-static \ 
     --disable-doc \ 
     --disable-doc \ 
     --disable-symver \ 
     --enable-small \ 
     --cross-prefix=$TOOLCHAIN/bin/x86_64-linux-android- \ 
     --target-os=linux \ 
     --arch=x86_64 \ 
     --enable-cross-compile \ 
     --sysroot=$SYSROOT \ 
     --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ 
     --extra-ldflags="$ADDI_LDFLAGS" \ 
     $ADDITIONAL_CONFIGURE_FLAG 
    make clean 
    make 
    make install 
} 
build_one 

私はUbuntuの下、以下のコマンドを実行すると、出力ファイルを失うことなく作成されます品質:

ffmpeg -i sample_2.mp4 -i ic_launcher.jpg -filter_complex [1:v]scale=70:-1[wm];[0:v][wm]overlay=W-w-10:H-h-10[out] -map 0:a? -map [out] output.mp4 

が、私は同じ引数でAndroidのスタジオでffmpeg.cのmain()関数を呼び出すとき、出力ファイルの品質が失われます。ここで

は、作成した出力ファイルの情報の違いです:

のAndroidメーカー:

Stream #0:1(und): Video: mpeg4 (Simple Profile) (mp4v/0x7634706D), yuv420p, 1200x720 [SAR 1:1 DAR 5:3], 585 kb/s, 25 fps, 25 tbr, 12800 tbn, 25 tbc (default) 

のubuntu:

Stream #0:0(und): Video: h264 (Main) (avc1/0x31637661), yuv420p, 1200x720 [SAR 1:1 DAR 5:3], 423 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default) 

あなたはこの問題を解決するために私を助けてもらえます。 H264エンコーダを有効にするには、事前に

おかげで、

Sargis Boyajyan

+0

Ubuntuでは、** ffmpeg **をビルドしていませんでしたか?利用可能なコーデックをチェックすると、Linuxバージョンはx264エンコーダで構築されていますが、Androidではこのライブラリは含まれていません。 –

+0

こんにちはアレックス・コーン、お返事ありがとうございます。上記のスクリプトでubuntuにffmpegをビルドします。アンドロイドスタジオプロジェクトでav_codec_next(NULL)APIを使用してコーデックリストを取得すると、そのリストにh264を入れます。フォーマットリストにh264を入れます(ffmpegがx264で構築されているとは限りません)。出力ストリームが作成されるとき、デフォルトのフォーマットはMPEG4です。 ubuntuで同じビルドのffmpeg実行ファイルを実行すると、デフォルトのフォーマットはh264になります。違いはどこにありますか? –

+0

私の悪いです。私はfbmpegについて* Ubuntuについて尋ねました。私はあなたが同じマシン上でAndroid用のffmpegをクロスコンパイルしたことを理解しています。 x264に関しては、あなたのスクリプトはそれを有効にしません。 h264 * decoder *はデフォルトではオンになっていますが、h264 *エンコーダー*は別のライブラリーであり、別の(GPL)ライセンス(あなたの懸念事項である場合もありません)の下にあります。 –

答えて

0

、あなたは(デフォルトの設定ではありません)のx86でのffmpegを構築する必要があります。一方、h264デコーダはffmpegの有機的な部分であり、デフォルトで含まれています。 x86ライブラリはほとんどのffmpegとは異なるライセンスを持っています。

関連する問題