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

问题描述

我上传视频文件到服务器并进行压缩。我正在使用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 for x264 控制台输出应显示 asm:yes 。 / li>
  • 使用最近的 x264 。我看到许多用户编译可能会错过优化的旧版本。

  • 然后重新编译 ffmpeg ,因此它使用新的$ code> X264 。确保 ffmpeg 不链接到错误的 x264 如果您有多个版本。

  • Do not use the --disable-asm configure option for x264.
  • After you run ./configure for x264 the console output should show asm: 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 new x264. Make sure ffmpeg does not link to the wrong x264 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上的快速视频压缩的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-09 07:50