14

NDKバージョンr5cを使用して、Android NDK用のhalfninja ffmpegスクリプトをコンパイルできました。(残念ながら、以前の NDK でコンパイルしようとすると何らかのエラーが発生しました)。また、私は NDK プロセス全体についてあまり詳しくないので、私にとってはちょっとしたミスです。

彼のスクリプトは ffmpeg バージョン N-30996-gf925b24 をコンパイルしています (彼がスクリプトを作成した特定のコミット)

私の実際のアプリに進みます。問題なくビデオをトリミングできました。今はそれらを結合/連結する必要がありますが、これらの 3 つのリンク ( link1link2link3 ) で見つかったコマンドの任意の組み合わせを使用しようとするとcat is not valid、 、> is undefininedunknown option filter_complexまたは上書きしようとしているなどのエラーが生成されます入力ファイルの一部。

Androidでffmpegの半忍者コンパイルを使用してmp4ビデオ(すべて同じコーデック、サイズ、品質など)を結合/連結することが可能かどうか、および(その方法)、またはffmpegをコンパイル/取得する方法を知っている人はいますかAndroid は最新のソースコードを使用していますか?

また、 mp4Parserを簡単に試してみましたが、あまり成功しませんでした。

最終的に、私はこの疑似メソッドを機能させようとしていました:

public static File concatenate(String[] inputPaths, String outputPath){

    // ... do stuff do generate ffmpeg commands....
    VideoKit v = new VideoKit();
    v.run(cmds);

    File f = new File(outputPath);
    return f;
}
4

5 に答える 5

2

このシーケンスは、CLI で mp4 を cat します。連結に関するffmpeg faqページから...

$FFMPEG_HOME/ffmpeg  -i gpsclip_seg1.mp4  -vn -f u16le -acodec pcm_s16le -ac 1 -ar 44100 - > temp1.a < /dev/null
$FFMPEG_HOME/ffmpeg  -i gpsclip_seg2.mp4  -vn -f u16le -acodec pcm_s16le -ac 1 -ar 44100 - > temp2.a < /dev/null
$FFMPEG_HOME/ffmpeg  -i gpsclip_seg3.mp4  -vn -f u16le -acodec pcm_s16le -ac 1 -ar 44100 - > temp3.a < /dev/null
cat temp1.a temp2.a temp3.a > all.a

$FFMPEG_HOME/ffmpeg -i gpsclip_seg1.mp4 -an -f yuv4mpegpipe - > temp1.v < /dev/null &
$FFMPEG_HOME/ffmpeg -i gpsclip_seg2.mp4 -an -f yuv4mpegpipe - < /dev/null | tail -n +2 > temp2.v
$FFMPEG_HOME/ffmpeg -i gpsclip_seg3.mp4 -an -f yuv4mpegpipe - < /dev/null | tail -n +2 > temp3.v
cat temp1.v temp2.v temp3.v > all.v

$FFMPEG_HOME/ffmpeg -f u16le -acodec pcm_s16le -ac 1 -ar 44100 -i all.a -f yuv4mpegpipe -i all.v -same_quant -y output.mp4

私はhalfninjaの「Android.mk」を見ました...そしてテストのために、adbを使用して「ffmpeg」実行可能ファイルをhalfninjaビルドから電話の/data/local/...にプッシュできるはずです。プロジェクトをビルドすると、実行可能ファイルはプロジェクトの JNI フォルダーの上にある ../output フォルダーにあると思います。

デバイスでルートを取得できると仮定すると、シェルを取得し、「su」を使用してルートを取得し、このような ffmpeg/MP4/concat スレッドから cli 式をコピーして、電話の CLI インターフェイスでテストを実行できますそれらを電話で実行し、アクセスできるフォルダーに出力します。

テストモードでは、リンクの受け入れられた回答に示されているように、一度に 1 つずつ CLI 呼び出しを使用して目的の結果を取得できる場合は、JNI インターフェイスに戻り、halfninja の「videokit」パッケージを呼び出して、同じ一連のコマンドを実装できます。テストで使用したもの。

複数の呼び出しに関する注意を追加しました...

JNI で ffmpeg lib を複数回呼び出すため、JNI を介した ffmpeg への複数回の呼び出しに影響を与える可能性があるこの問題に注意する必要があります。halfninja がまだこの問題の仲介を行っていない場合は、スレッドで説明されているラッパー ライブラリを実装するように Android.mk 構造を変更して、JNI を介した ffmpeg への各呼び出しの間に必要な共有ライブラリをロード/アンロードできるようにする必要がある場合があります。 .

アンドロイドと「猫」

電話の /system/bin にシンボリックリンクが必要です

lrwxr-xr-x root     shell             2012-07-09 13:02 cat -> toolbox

そうでない場合は、電話で「busybox」のインストールを試して、電話の cli でスクリプトをシミュレートできるようにします。

于 2013-04-23T17:39:46.113 に答える
1

ffmpeg concat demuxer が FFMPEG Fire Flower (Version 1.1) に追加されました。この機能を利用するには、FFmpeg fire flower または Magic を使用します。ffmpeg をビルドしたら、demuxer を使用します。このhttp://ffmpeg.org/trac/ffmpeg/wiki/How%20to%20concatenate%20(join,%20merge)%20media%20files サイトで concat demuxer として説明されています。

于 2013-04-25T09:34:32.960 に答える