Android上的快速视频压缩 [英] Fast Video Compression on Android

查看:1250
本文介绍了Android上的快速视频压缩的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在上传前将视频文件上传到服务器并进行压缩。我使用ffmpeg libx264。我已经看到viber可以在一分钟内上传30秒的视频文件大小78MB [减少到2.3MB]。我想知道他们怎么做得那么快?



我到目前为止所做的尝试 -

  FFMPEG版本:n2.4.2 
用gcc构建4.8

构建配置:--target-os = linux --cross-prefix = / home / sb / Source-Code / ffmpeg-android / toolchain-android / bin / arm-linux-androideabi- --arch = arm --cpu = cortex-a8 --enable-runtime-cpudetect --sysroot = / home / sb / Source -Code / ffmpeg-android / toolchain-android / sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-fontconfig --enable-pthreads --disable -debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared - -enable-static --pkg-config = / home / sb /源代码/ ffmpeg-android / ffmpeg-pkg-config --prefix = / home / sb /源代码/ ffmpeg-android / build / armeabi-v7a -neon --extra-cflags =' - I / home / sb /源代码/ ffmpeg-android / toolchain-android / include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE = 2 -fno-strict-overflow -fstack-protector-all -mfpu = neon'--extra-ldflags =' - L / home / sb / Source-Code / ffmpeg-android / toolchain-android / lib -Wl,-z,relro -Wl,-z,now -pie' libs =' - lpng -lexpat -lm'--extra-cxxflags =

命令:

  ffmpeg -y -i /storage/emulated/0/main.mp4 -s 480x320 -r 20 -c:v libx264 -preset ultrafast -c:a copy -me_method zero -tune fastdecode -tune zerolatency -strict -2 -b:v 1000k -pix_fmt yuv420p /storage/emulated/0/output.mp4 

到目前为止的结果是,一个30秒的78MB文件被压缩到4.3MB,大约需要1分28秒。以下是控制台转储 - http://pastebin.com/rn81acGx 。我主要想减少压缩所需的时间。

解决方案



< x264 cpu功能



您的 ffmpeg 控制台输出/日志显示来自libx264的以下消息:

 使用cpu功能:none! 

对于您的设备,我会期望像:

 使用cpu功能:ARMv7 NEON 



MediaCodec硬件加速



code> ffmpeg 目前通过Android中的MediaCodec API支持硬件辅助的H.264和HEVC解码,这可能有助于减少总体处理时间。有关详情和最新的功能列表,请参阅 FFmpeg Wiki:硬件加速。 / p>

要使用它,请确保您的 ffmpeg 使用 - enable-jni - enable-mediacodec


I want to upload video files to server and compress before uploading. I'm using ffmpeg libx264. I have seen viber can upload 30 second video file of size 78MB within a minute [reduce it's down to 2.3MB]. I want to know how do they do it so fast?

What I have tried so far -

FFMPEG version :  n2.4.2 
Built with gcc 4.8

Build Configuraiton : --target-os=linux --cross-prefix=/home/sb/Source-Code/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/sb/Source-Code/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/sb/Source-Code/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/sb/Source-Code/ffmpeg-android/build/armeabi-v7a-neon --extra-cflags='-I/home/sb/Source-Code/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all -mfpu=neon' --extra-ldflags='-L/home/sb/Source-Code/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=

Command:

ffmpeg -y -i /storage/emulated/0/main.mp4 -s 480x320 -r 20 -c:v libx264 -preset ultrafast -c:a copy -me_method zero -tune fastdecode -tune zerolatency -strict -2 -b:v 1000k -pix_fmt yuv420p /storage/emulated/0/output.mp4

The result so far is, a 30second 78MB file gets compressed to 4.3MB which takes around 1min 28seconds. Here is the console dump - http://pastebin.com/rn81acGx . I mainly want to reduce the time it takes to compress. How can I achieve this?

Thanks in advance.

解决方案

x264 cpu capabilities

Your ffmpeg console output/log shows the following message from libx264:

using cpu capabilities: none!

For your device I would expect something like:

using cpu capabilities: ARMv7 NEON

You should re-evaluate how you compiled x264 so it properly supports the capabilities of your CPU.

MediaCodec hardware acceleration

ffmpeg currently supports hardware assisted H.264 and HEVC decoding via the MediaCodec API in Android which may help decrease the overall processing time. For more info and an up-to-date list of capabilities see FFmpeg Wiki: Hardware Acceleration.

To use it ensure your ffmpeg is compiled with --enable-jni and --enable-mediacodec.

这篇关于Android上的快速视频压缩的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆