Android上的快速视频压缩 [英] Fast Video Compression on 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屋!