android - 使用 ffmpeg4android 库压缩视频

标签 android video ffmpeg compression

我试着关注 ffmpeg4android library ,我在压缩视频时遇到了问题,如下图所示。

我使用 Intent 转移到 Compressing Media 类,

Intent intent = new Intent(this, CompressingMedia.class);
intent.putExtra("file_path", mLlItems.get(0).getPath());
startActivity(intent);

这是被转移到的类(class):

public class CompressingMedia extends BaseWizard {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = getIntent();

    Log.d(Prefs.TAG, "path " + intent.getExtras().getString("file_path"));
    // /storage/emulated/0/DCIM/Camera/VID_20140312_090612.mp4

    String command = "ffmpeg -y -i " + intent.getExtras().getString("file_path") + 
            " -strict experimental -s 320x240 -r 15 -aspect 3:4 -ab 12288 -vcodec mpeg4 -b 2097152 -sample_fmt s16 /sdcard/out.mp4";

    // if you want to change the default work location (/sdcard/videokit/) use the uncomment the below method.
    // It must be defined before calling the copyLicenseAndDemoFilesFromAssetsToSDIfNeeded method,
    // in order for this method to copy the assets to the correct location.
            //      setWorkingFolder("/sdcard/videokit/");

    // this will copy the license file and the demo video file.
    // to the videokit work folder location.
    // without the license file the library will not work.
    copyLicenseAndDemoFilesFromAssetsToSDIfNeeded();

    commandStr = command;
    setCommand(commandStr);

    runTranscoing();
    }
}

虽然收到了Transcoding Successfully的通知,但是好像压缩后的文件容量一直是0。(图片底部的日志)

我不知道结果,因为下面的图片好不好,我得不到预期的结果 - 视频完全成功压缩。

有人知道为什么压缩后文件总是0,请告诉我。谢谢。

这是日志猫:

03-13 14:49:45.655: I/ActivityManager(6065): Timeline: Activity_launch_request id:app.cloudstringers time:38212359

03-13 14:49:45.665: V/Home(6065): Global ID is 000400010007;Sell is 3

03-13 14:49:45.770: D/ffmpeg4android(6065): path /storage/emulated/0/videokit/out.mp4

03-13 14:49:45.770: I/ffmpeg4android(6065): workingFolderPath: /sdcard/videokit/

03-13 14:49:45.775: D/ffmpeg4android(6065): Working directory exists, not coping assests (license file and demo videos)

03-13 14:49:45.785: D/ffmpeg4android(6065): output directory exists.

03-13 14:49:45.785: I/ffmpeg4android(6065): Command is set

03-13 14:49:45.785: I/ffmpeg4android(6065): set remoteNotificationIconId: 0

03-13 14:49:45.785: D/ffmpeg4android(6065): Client Cannot unbind - service not bound

03-13 14:49:45.785: D/ffmpeg4android(6065): Client stopService()

03-13 14:49:45.790: W/ContextImpl(6065): Implicit intents with startService are not safe: Intent { act=com.netcompss.ffmpeg4android.FFMpegRemoteServiceBridge } android.content.ContextWrapper.stopService:499 com.netcompss.ffmpeg4android_client.BaseWizard.stopService:451 com.netcompss.ffmpeg4android_client.BaseWizard.runTranscoing:285

03-13 14:49:45.795: I/ffmpeg4android(6065): !!!!!!!!!!!!!!!!!!services.size(): 1

03-13 14:49:45.795: I/ffmpeg4android(6065): putting Base categoty

03-13 14:49:45.810: D/ffmpeg4android(6065): started: com.netcompss.ffmpeg4android.FFMpegRemoteServiceBridge

03-13 14:49:45.810: D/ffmpeg4android(6065): Client startService()

03-13 14:49:45.810: D/ffmpeg4android(6065): bindService() called

03-13 14:49:45.815: W/ContextImpl(6065): Implicit intents with startService are not safe: Intent { act=com.netcompss.ffmpeg4android.FFMpegRemoteServiceBridge } android.content.ContextWrapper.bindService:517 com.netcompss.ffmpeg4android_client.BaseWizard.bindService:462 com.netcompss.ffmpeg4android_client.BaseWizard.runTranscoing:288

03-13 14:49:45.820: D/ffmpeg4android(6065): Client bindService()

03-13 14:49:45.935: I/ffmpeg4android(6616): =======service onCreate(): Stopping forground (to overcome 2.3.x bug)

03-13 14:49:45.935: I/ffmpeg4android(6616): =======service onBind()=======

03-13 14:49:45.940: I/ffmpeg4android(6616): ===onStartCommand called

03-13 14:49:45.940: I/ffmpeg4android(6616): ===onStartCommand cat: Base

03-13 14:49:45.940: D/ffmpeg4android(6616): onStartCommand, START_STICKY, base Command

03-13 14:49:45.955: I/ffmpeg4android(6616): get remoteNotificationIconId: 0

03-13 14:49:45.955: I/ffmpeg4android(6616): notifIcon is set

03-13 14:49:45.955: I/ffmpeg4android(6616): Start RemoteService with notification id: 5326

03-13 14:49:45.965: I/ffmpeg4android(6616): Run called.

03-13 14:49:45.965: D/ffmpeg4android(6616): Sleeping, waiting for command

03-13 14:49:45.970: D/ffmpeg4android(6065): Client onServiceConnected()

03-13 14:49:45.970: I/ffmpeg4android(6065): invokeService called

03-13 14:49:45.970: I/Videokit(6065): licenseCheck in path: /sdcard/videokit

03-13 14:49:45.970: I/Videokit(6065): isLicExistsComplex...

03-13 14:49:45.970: I/Videokit(6065): trying to open /sdcard/videokit/ffmpeglicense.lic

03-13 14:49:45.970: I/Videokit(6065): license file found...

03-13 14:49:45.970: I/Videokit(6065): time decoded: 1394535283

03-13 14:49:45.970: I/Videokit(6065): timeStrDec 1394535283 is a valid number.

03-13 14:49:45.970: I/Videokit(6065): time diff: 161702

03-13 14:49:45.970: I/Videokit(6065): You used 1 of your 15 trial days.

03-13 14:49:45.970: I/ffmpeg4android(6065): setting remote notification info

03-13 14:49:45.970: D/ffmpeg4android(6616): command items num: 21

03-13 14:49:45.970: D/ffmpeg4android(6616): command: ffmpeg -y -i /storage/emulated/0/videokit/out.mp4 -strict experimental -s 320x240 -r 15 -aspect 3:4 -ab 12288 -vcodec mpeg4 -b 2097152 -sample_fmt s16 /sdcard/out.mp4

03-13 14:49:45.970: D/ffmpeg4android(6616): workingFolder from remote: /sdcard/videokit

03-13 14:49:45.970: D/ffmpeg4android(6065): deleteing: /sdcard/videokit/vk.log isdeleted: true

03-13 14:49:45.975: D/ffmpeg4android(6065): deleteing: /sdcard/videokit/ffmpeg4android.log isdeleted: false

03-13 14:49:45.975: D/ffmpeg4android(6065): deleteing: /sdcard/videokit/videokit.log isdeleted: true

03-13 14:49:45.980: D/ffmpeg4android(6065): Client invokeService()

03-13 14:49:45.980: D/ffmpeg4android(6065): Acquire wake lock

03-13 14:49:46.265: D/ffmpeg4android(6616): Sleeping, waiting for command

03-13 14:49:46.295: D/ffmpeg4android(6065): TranscodeBackground doInBackground started

03-13 14:49:46.295: I/ffmpeg4android(6616): =======remote service runTranscoding ======

03-13 14:49:46.340: V/HomeAsync(6065): TOTAL_SPACE is 1;AVAILABLE_SPACE is 0.451

03-13 14:49:46.345: I/ActivityManager(6065): Timeline: Activity_idle id: android.os.BinderProxy@423deed8 time:38213045

03-13 14:49:46.345: I/ActivityManager(6065): Timeline: Activity_idle id: android.os.BinderProxy@420323a0 time:38213045

03-13 14:49:46.565: D/dalvikvm(6616): Trying to load lib /data/app-lib/app.cloudstringers-2/libvideokit.so 0x41b285f0

03-13 14:49:46.570: D/dalvikvm(6616): Added shared lib /data/app-lib/app.cloudstringers-2/libvideokit.so 0x41b285f0

03-13 14:49:46.570: I/Videokit(6616): Loading native library compiled at 21:59:53 Oct 23 2013

03-13 14:49:46.575: I/ffmpeg4android(6616): ===============Running command from thread path: /sdcard/videokit

03-13 14:49:46.575: I/Videokit(6616): vk ffmpeg sdcardPath: /sdcard/videokit

03-13 14:49:46.575: I/Videokit(6616): licenseCheck in path: /sdcard/videokit

03-13 14:49:46.575: I/Videokit(6616): isLicExistsComplex...

03-13 14:49:46.575: I/Videokit(6616): trying to open /sdcard/videokit/ffmpeglicense.lic

03-13 14:49:46.575: I/Videokit(6616): license file found...

03-13 14:49:46.575: I/ffmpeg4android(6616): =======ProgressBackgroundRemote doInBackground=========

03-13 14:49:46.575: I/Videokit(6616): time decoded: 1394535283

03-13 14:49:46.575: I/Videokit(6616): timeStrDec 1394535283 is a valid number.

03-13 14:49:46.575: I/Videokit(6616): time diff: 161703

03-13 14:49:46.575: I/Videokit(6616): You used 1 of your 15 trial days.

03-13 14:49:46.575: D/Videokit(6616): license check rc: 0

03-13 14:49:46.575: D/Videokit(6616): run() called verion 2.0

03-13 14:49:46.575: D/Videokit(6616): run passing off to main()

03-13 14:49:46.800: D/ffmpeg4android(6065): onServiceDisconnected

03-13 14:49:48.640: I/ffmpeg4android(6065): Got real duration: 00:00:07.78

03-13 14:49:48.640: I/ffmpeg4android(6065): ==== getting currentVkLogSize from VK

03-13 14:49:48.640: D/ffmpeg4android(6065): currentVkLogSize: 5751

03-13 14:49:48.645: I/ffmpeg4android(6065): No ffmpeg4android_log file, using vk log

03-13 14:49:48.645: I/line(6065): _rate, rate, width or height

03-13 14:49:48.650: I/line(6065): Statistics: 0 seeks, 0 writeouts

03-13 14:49:48.650: I/line(6065): Statistics: 72873 bytes read, 2 seeks

03-13 14:49:48.650: D/ffmpeg4android(6065): currentTimeStr: exit

03-13 14:49:48.650: D/ffmpeg4android(6065): ============Found one of the exit tokens in the log============

03-13 14:49:48.650: I/ffmpeg4android(6065): onProgressUpdate: 100

03-13 14:49:48.650: D/ffmpeg4android(6065): Releasing wake lock

03-13 14:49:48.650: D/ffmpeg4android(6065): TranscodeBackground onPostExecute

03-13 14:49:48.700: D/ffmpeg4android(6065): /sdcard/videokit/null length in bytes: 0

03-13 14:49:48.700: D/ffmpeg4android(6065): showNotifications

03-13 14:49:48.700: W/ffmpeg4android(6065): output file is not set use the setOutputFilePath method to set the full output file path

03-13 14:49:48.705: I/ffmpeg4android(6065): FFMPEG finished.

03-13 14:49:48.710: D/ffmpeg4android(6065): releaseService()

03-13 14:49:48.710: D/ffmpeg4android(6065): Client stopService()

03-13 14:49:48.710: W/ContextImpl(6065): Implicit intents with startService are not safe: Intent { act=com.netcompss.ffmpeg4android.FFMpegRemoteServiceBridge } android.content.ContextWrapper.stopService:499 com.netcompss.ffmpeg4android_client.BaseWizard.stopService:451 com.netcompss.ffmpeg4android_client.BaseWizard.handleServiceFinished:513

最佳答案

您也可以考虑使用来自原始来源的真实(免费!)Android 版 FFmpeg:http://trac.ffmpeg.org/wiki/How%20to%20compile%20FFmpeg%20for%20Android而不是使用似乎违反 FFmpeg LGPL 许可证的人的一些第三方编译。

关于android - 使用 ffmpeg4android 库压缩视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22341706/

相关文章:

video - ffmpeg/视频处理 : make video repeat itself without duplicating content?

image - 指定百分比而不是时间到 ffmpeg

android - 如何自定义共享菜单

java - 使用蓝牙服务时如何避免出现 "Are you missing a call to unregisterReceiver()?"错误?

ffmpeg - 直接来自 NVENC 编码器的 RTMP 直播流

video - 使用 -map 0 时将 MKV 重新混合到 MP4 失败,但在将 MP4 重新混合到 MKV 时工作正常

python - 有没有办法在kivy中录制视频?

android - 如何在 Android 上居中自定义对话框标题

android - 如何在 Android Marshmallow 中同时请求多个权限

ios - 在iOS上控制YouTube视频