3

コマンドを実行したいのですが、ffmpeg使用しているメソッドは、フィルター(-vf)パラメーターを設定するための二重引用符を含む次のコマンドを除いて、リストのすべてのコマンドで機能します

ffmpeg -i 2012-12-27.mp4 -vf "movie=bb.png [movie]; [in] [movie] overlay=0:0 [out]" -vcodec libx264 -acodec copy out.mp4

運が悪かったので、一重引用符の引用符を変更してみました。このコマンドは、一重引用符と二重引用符の両方を使用してAndroid端末で機能します。

私が開発しているアプリは約5つffmpegのコマンドを使用していますが、これ以外はすべて機能しますが、これはバグですか?

この問題の具体的な解決策を見つけることができません。引数を配列に分割してからruntime().exec()、他の場所で提案されているようにこれを渡すことは機能しないようです。または、単に「」で引用符をエスケープしようとしても機能しません。

上記のコマンドで参照されているファイルは両方ともSDカードにあります。ファイルへのフルパスを参照するときにこれらのコマンドがターミナルで機能するので、コマンドの連結を削除して混乱しないようにしました。文字列ビルダーと`getexternalstorageDirectory()。getabsolutepath()を使用してgetRuntime()。exec()に渡された文字列を結合し、プロセスクラスを使用するときに以前のコマンドで行っていたように各ファイルへのパスを取得します。

重要な場合に備えて、JellyBean4.2を使用しています。

4

2 に答える 2

6

試す

getRuntime().exec( new String[] { "ffmpeg", "-i", "2012-12-27.mp4", "-vf", "movie=bb.png [movie]; [in] [movie] overlay=0:0 [out]", "-vcodec", "libx264", "-acodec", "copy", "out.mp4" } );

一緒に属するパラメーター(引用符で囲まれた-vfフィルター文字列など)は、同じ配列要素にある必要があります。

于 2012-12-29T05:03:04.190 に答える
2

文字列配列で正常に動作しませんか?

java.lang.Runtime.exec(String[])
java.lang.Runtime.exec(String[], String[], File)

Runtime.exec(new String[]{"ffmpeg","-i","2012-12-27.mp4","-vf",
    "movie=bb.png [movie]; [in] [movie] overlay=0:0 [out]",
    "-vcodec","libx264","-acodec","copy","out.mp4"});

すべての引数を配列に入れる必要があります。

于 2012-12-29T05:08:49.640 に答える