簡體   English   中英

FFMPEG在Android Java應用程序上

[英]FFMPEG on Android java application

我正在使用Cordova制作Hybrid應用的原型: https : //cordova.apache.org 還使用此插件: https : //github.com/jbavari/cordova-plugin-video-editor

該插件使用FFMPEG將視頻呈現為新格式。 具體的代碼片段在這里:

https://github.com/jbavari/cordova-plugin-video-editor/blob/master/src/android/VideoEditor.java

al.add("ffmpeg");
al.add("-i");
al.add(videoSrcPath);
String[] ffmpegCommand = al.toArray(new String[al.size()]);
vk.run(ffmpegCommand, workFolder, appContext);
Log.d(TAG, Arrays.toString(ffmpegCommand));

在Android Studio中使用變量注銷時,它是:

[ffmpeg, -y, -i, /storage/emulated/0/DCIM/Camera/20150709_172753.mp4, -strict, experimental, -s, 320x320, -r, 24, -vcodec, libx264, -preset, ultrafast, -b, 2097152, -ac, 1, -ar, 22050, -t, 2.0, /storage/emulated/0/Movies/HelloWorld/VID_render-1436477283566.mp4]

這很正常。

我想修改此命令以允許多個視頻和其他選項。 這是我已經在機器上測試過的FFMPEG終端命令:

./ffmpeg -i a.mp4 -i b.mp4 -filter_complex "[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" -loglevel debug -strict -2 output.mp4

我試圖修改Java代碼,但這失敗了:

al.add("ffmpeg");
al.add("-i");
al.add(videoSrcPath); 
al.add("-i");
al.add(videoSrcPath2);
al.add("-filter_complex");
al.add("[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]");
al.add("-map");
al.add("[v]");
al.add("-map");
al.add("[a]");
al.add("-strict");
al.add("-2");

使用變量注銷時,這是失敗的命令:

[ffmpeg, -y, -i, /storage/emulated/0/DCIM/Camera/20150709_175137.mp4, -i, /storage/emulated/0/Movies/HelloWorld/20150709_234321.mp4, -filter_complex, [0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a], -map, [v], -map, [a], -strict, -2, experimental, -s, 320x320, -r, 24, -vcodec, libx264, -preset, ultrafast, -b, 2097152, -ac, 1, -ar, 22050, -t, 2.0, /storage/emulated/0/Movies/HelloWorld/VID_render-1436478706526.mp4]

我嘗試使用FFMPEG的日志記錄功能,但無法將其返回到Java Log,這實際上限制了我可以調試的內容:(

al.add("-loglevel");
al.add("debug");

任何幫助將不勝感激!

原始命令行具有以下選項:

-strict, experimental

您的新人有:

-strict, -2, experimental

看起來就是那樣使它破裂。 如果不是,請登錄stdout / stderr,以便查看其抱怨的內容。

因此,這是允許使用cordova-plugin-video-editor渲染多個視頻的有效代碼,它是依賴庫ffmpeg4android:

的index.html

VideoEditor.transcodeVideo(
    videoTranscodeSuccess,
    videoTranscodeError,
    {
        fileUri: file.fullPath,
        fileUri2: file2.fullPath,
        outputFileName: videoFileName,
        quality: VideoEditorOptions.Quality.LOW_QUALITY,
        outputFileType: VideoEditorOptions.OutputFileType.MPEG4,
        optimizeForNetworkUse: VideoEditorOptions.OptimizeForNetworkUse.YES,
        duration: 2
    }
);

VideoEditor.js第99行

final File inFile = this.resolveLocalFileSystemURI(options.getString("fileUri"));
if (!inFile.exists()) {
    Log.d(TAG, "input file does not exist");
    callback.error("input video does not exist.");
    return;
}

final File inFile2 = this.resolveLocalFileSystemURI(options.getString("fileUri2"));
if (!inFile2.exists()) {
    Log.d(TAG, "input file2 does not exist");
    callback.error("input video2 does not exist.");
    return;
}

final String videoSrcPath = inFile.getAbsolutePath();
final String videoSrcPath2 = inFile2.getAbsolutePath();

VideoEditor.js第230行

al.add("ffmpeg");
al.add("-i"); // input file
al.add(videoSrcPath); 
al.add("-i"); // input file 2
al.add(videoSrcPath2);
al.add("-filter_complex");
al.add("[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]");
al.add("-map");
al.add("[v]");
al.add("-map");
al.add("[a]");
al.add("-strict");
al.add("-2");
al.add("-preset");
al.add("ultrafast");
al.add(outputFilePath); // output file at end of string

String[] ffmpegCommand = al.toArray(new String[al.size()]);
vk.run(ffmpegCommand, workFolder, appContext);

自從開始運行以來,我注意到ffmpeg4android庫需要許可證:

I/Videokit﹕ licenseCheck in path: /data/data/com.example.hello/files
I/Videokit﹕ isLicExistsComplex...
I/Videokit﹕ trying to open /data/data/com.example.hello/files/ffmpeglicense.lic
I/Videokit﹕ license file found...
I/Videokit﹕ You used 1 of your 15 trial days.

許可證信息可以在這里找到:

http://www.appfree.org/item.php?item_id=com.netcompss.ffmpeg4android http://ffmpeg4android.netcompss.com/home/purchase

這里有使用android-ffmpeg-java庫的cordova-plugin-video-editor的替代版本:

https://github.com/jbavari/cordova-plugin-video-editor/pull/13

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM