问题描述
我上传视频文件到服务器并进行压缩。我正在使用ffmpeg libx264。我已经看到viber可以在一分钟内上传大小为78MB的30秒视频文件[减少到2.3MB]。我想知道他们如何做得如此快?
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=
命令:
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秒。以下是控制台转储 - 。我主要想减少压缩所需的时间。如何实现?
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?
提前感谢
推荐答案
x264 cpu功能
您的 ffmpeg
控制台输出/日志显示libx264中的以下消息:
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
- 评估您如何编译 x264
,以便正确支持CPU的功能。使用 none
它的编码速度显着更慢。
You should re-evaluate how you compiled x264
so it properly supports the capabilities of your CPU. With none
it encodes significantly slower.
- 不要使用
- disable-asm
配置选项x264
。 - 运行
./ configure
forx264
控制台输出应显示asm:yes
。 / li>
- 使用最近的
x264
。我看到许多用户编译可能会错过优化的旧版本。 - 然后重新编译
ffmpeg
,因此它使用新的$ code> X264 。确保ffmpeg
不链接到错误的x264
如果您有多个版本。
- Do not use the
--disable-asm
configure option forx264
. - After you run
./configure
forx264
the console output should showasm: yes
. - Use a recent
x264
. I see many users compiling old versions that may miss out on optimizations. - Then recompile
ffmpeg
so it uses the newx264
. Make sureffmpeg
does not link to the wrongx264
if you have multiple versions.
ffmpeg
目前支持硬件通过Android中的MediaCodec API辅助H.264和HEVC ,可能有助于减少整体处理时间。有关更多信息和最新的功能列表,请参阅。
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.
要使用它,请确保您的 ffmpeg
使用 - enable-jni
和 - 启用mediacodec
。
To use it ensure your ffmpeg
is compiled with --enable-jni
and --enable-mediacodec
.
这篇关于Android上的快速视频压缩的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!