我目前在我的Android应用程序上使用ffmpeg的实现.我允许用户在我的应用程序中拍摄短视频,然后当他们将它们上传到服务器时,我正在使用ffmpeg来缩小它们以减小文件大小,因此它们不会通过网络传递大量数据.
问题是,它需要永远在Android设备上编码视频.这些视频通常不超过45秒,编码可能需要20分钟.我已经在ffmpeg命令行上玩了一些不同的开关/参数,我现在可以在更舒适的时间使用它,但文件大小要大得多.我只是不确定我应该使用哪种编解码器(编码速度最快但输出质量不错),ffmpeg如何根据编码速度等处理大小(宽高比)的变化.
这是我一直在使用的两个命令.第一个输出我想要的文件大小/质量,但它只需要太长时间来编码,更不用说它使我的设备变得非常热,而它的编码时间如此之长:
ffmpeg -i input.mp4 -b:v 1024k -c:a copy -vf scale=960:540 output.mp4
Run Code Online (Sandbox Code Playgroud)
我已经调整了一些比特率,并将比例尺改为更小的尺寸,但我不想让视频非常小(在比例方面)以实现更快的编码.第二个命令的速度要快得多,但文件大小要大得多:
ffmpeg -i input.mp4 -vcodec libx264 -preset fast -c:a copy -s 960x540 output.mp4
Run Code Online (Sandbox Code Playgroud)
我想找到一个快乐的媒体(较小的文件大小,但编码更快)保持视频比例尺寸接近原始.ffmpeg只有很多不同的参数/开关,很难围绕我应该做的事情.
编辑:添加ffmpeg输出.
ffmpeg -i input.mp4 -vcodec libx264 -crf 30 -preset veryfast -c:a copy -s 960x540 output.mp4
09-13 11:06:28.330 10881-10881/someapp D/home: ffmpeg version n3.0.1 Copyright (c) 2000-2016 the FFmpeg developers
09-13 11:06:28.330 10881-10881/someapp D/home: built with gcc 4.8 (GCC)
09-13 11:06:28.331 10881-10881/someapp D/home: configuration: --target-os=linux --cross-prefix=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi …Run Code Online (Sandbox Code Playgroud)