当我跑
ffmpeg -y -i test.mov -threads 8 -f webm -aspect 16:9 -vcodec libvpx -deinterlace -g 120 -level 216 -profile 0 -qmax 42 -qmin 10 -rc_buf_aggressivity 0.95 -vb 2M -acodec libvorbis -aq 90 -ac 2 OUTPUT_FILE.webm
Run Code Online (Sandbox Code Playgroud)
它返回错误说 Unknown encoder 'libvpx'
我通过macports安装了libvpx,libvorbis,libogg和ffmpeg
我正在使用vp8 SDK(www.webmproject.org)创建一个vp8编码的视频文件.但是,SDK示例会生成一个IVF文件,浏览器不会播放该文件.
我知道WebM格式是Matroska的一种容器,所以我想我应该在视频数据存储在该格式,但MKV格式规范是漫长和复杂的,我不认为我应该由我自己想出来的推倒重来.
所以我想知道是否有人可以推荐一个如何编码和生成可播放的webm vp8文件的示例.如果没有这样的样品(如我在谷歌搜索建议)至少指向我这被证明为浏览器工作的简单和实用的Matroska库.
我使用的命令是:
C:\cmd\ffmpeg\bin\ffmpeg.exe -i "C:\Users\user\Dropbox\Workspace - C#\SnowflakeGenerator\out\out%d.png" -c:v libvpx -b:v 1M "C:\Users\user\Dropbox\Workspace - C#\SnowflakeGenerator\video.webm" -y
Run Code Online (Sandbox Code Playgroud)
输出是:
ffmpeg version N-82889-g54931fd Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib
libavutil 55. 43.100 / …
Run Code Online (Sandbox Code Playgroud) 我需要用ffmpeg将MP4转换为webm.所以,我使用:
ffmpeg -i input.mp4 -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis output.webm
Run Code Online (Sandbox Code Playgroud)
但它很长.
有更快的?
我正在考虑将来使用VP9对我的BluRays进行编码,因为它是一个开源编解码器.但我无法让Handbrake或ffmpeg使用超过50%(4)的我的(8)核心.因此,编码时间比使用所有内核的x264/5差得多.
在Handbrake我只是将编码器设置为VP9和CQ19.如果我在参数字段中添加"threads 8","threads 16"或"threads 64",则没有区别.
在命令行中测试ffmpeg(" - c:v libvpx-vp9 -crf 19 -threads 16 -tile-columns 6 -frame-parallel 1 -speed 0")也不再使用任何cpu线程.
当前编码器是否能够在4个以上的线程上进行编码,或者我做错了什么?
我有一个应用程序,生成一堆jpgs,我需要变成一个webm视频.我正在尝试将jggs中的rgb数据转换为vpxenc示例.我可以在输出视频中看到原始jpgs的基本形状,但是所有内容都是浅绿色(即使是应该是黑色的像素大约是绿色的一半),并且每隔一条扫描线都有一些垃圾.
我正在尝试提供VPX_IMG_FMT_YV12数据,我假设其结构如下:
对于每个帧8位Y数据每个2x2 V块的8位平均值每个2x2 U块的8位平均值
这是一个源图像和即将发布的视频的屏幕截图:
我完全有可能错误地进行RGB-> YV12转换,但即使我只编码8位Y数据并将U和V块设置为0,视频看起来也差不多.我基本上通过这个等式运行我的RGB数据:
// (R, G, and B are 0-255)
float y = 0.299f*R + 0.587f*G + 0.114f*B;
float v = (R-y)*0.713f;
float u = (B-v)*0.565f;
Run Code Online (Sandbox Code Playgroud)
..然后,以产生2×2为U和V,我写入vpxenc滤波值,我只是做(A + B + C + d)/ 4,其中a,b,C,d为的U或V值每个2x2像素块.
所以我想知道:
是否有更简单的方法(在代码中)获取RGB数据并将其提供给vpx_codec_encode以获得一个不错的webm视频?
我的RGB-> YV12转换错了吗?
任何帮助将不胜感激.
我正在尝试使用libvpx安装Android x86的webm解码器.
我通过以下命令构建了库并获得了"libvpx.a".
../configure --target=x86-android-gcc --disable-vp8-encoder --disable-vp9-encoder --disable-examples --sdk-path=$ANDROID_NDK_ROOT --enable-pic --enable-postproc
Run Code Online (Sandbox Code Playgroud)
当我在Windows上使用此库是ndk-build时,发生了错误.
C:/android/[project]/jni/../plib/libvpx.a(postproc_mmx.asm.o)(.text+0x1c8): error: undefined reference to 'rand'
C:/android/[project]/jni/../plib/libvpx.a(postproc_sse2.asm.o)(.text+0x65c): error: undefined reference to 'rand'
collect2.exe: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
libmepx.a for armeabi没有出现错误.有人不知道解决方案吗?
(JNI/Android.mk)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sublib
LOCAL_SRC_FILES := sublib.cpp
LOCAL_LDLIBS := -llog
LOCAL_STATIC_LIBRARIES := libvpx_pre
include $(BUILD_SHARED_LIBRARY)
include $(LOCAL_PATH)/../plib/Android_x86.mk
Run Code Online (Sandbox Code Playgroud)
(PLIB/Android_x86.mk)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libvpx_pre
LOCAL_SRC_FILES := libvpx.a
LOCAL_STATIC_LIBRARIES := cpufeatures
include $(PREBUILT_STATIC_LIBRARY)
$(call import-module,android/cpufeatures)
Run Code Online (Sandbox Code Playgroud) ffmpeg的有一个-quality
带有选项编码VP9时设置best
,good
和realtime
.如何将这些选项会影响其他可用的编码选项(例如,-speed
,-slices
,-frame-parallel
,等...)?我在某个地方阅读-best
并且-good -speed 0
会给出相同的质量,后者要快得多.对我来说,这听起来像质量设置只是更改其他选项(如-speed
),就好像它们只是预设,人们可以手动获得相同的结果.这是真的,还是质量设置会影响我无法通过其他选项更改的内容?
我在Centos6服务器上遇到了Ffmpeg和Libvpx的问题.
命令:
ffmpeg -y -i /var/www/f1ccd3a27d36270492ce660da358b436.mp4 -t 99 acodec copy -vcodec libvpx -f webm /var/www/f1ccd3a27d36270492ce660da358b436.webm 2<&1
Run Code Online (Sandbox Code Playgroud)
输出:
FFmpeg version 0.6.5, Copyright (c) 2000-2010 the FFmpeg developers
built on Jan 29 2012 17:52:15 with gcc 4.4.5 20110214 (Red Hat 4.4.5-6)
configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --incdir=/usr/include --disable-avisynth --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --enable-avfilter --enable-avfilter-lavf --enable-libdc1394 --enable-libdirac --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libx264 --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-shared --enable-swscale --enable-vdpau …
Run Code Online (Sandbox Code Playgroud) 这是我目前正在遵循的流程:
安装依赖项
sudo apt-get remove ffmpeg x264 libx264-dev
sudo apt-get update
sudo apt-get install build-essential subversion git-core checkinstall texi2html \
libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev \
libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev zlib1g-dev libavcodec-dev
Run Code Online (Sandbox Code Playgroud)
安装x264
cd /opt
git clone git://git.videolan.org/x264.git
cd x264
./configure --enable-static --disable-opencl
make
sudo checkinstall --pkgname=x264 --default --pkgversion="3:$(./version.sh | \
awk -F'[" ]' '/POINT/{print $4"+git"$5}')" --backup=no --deldoc=yes
Run Code Online (Sandbox Code Playgroud)
安装libvpx
cd /opt
git clone https://chromium.googlesource.com/webm/libvpx.git
cd libvpx
./configure
make
sudo checkinstall --pkgname=libvpx --pkgversion="`date +%Y%m%d%H%M`-git" --backup=no \
--default --deldoc=yes
Run Code Online (Sandbox Code Playgroud)
安装跛脚
sudo apt-get …
Run Code Online (Sandbox Code Playgroud) 我使用此代码使用 vp8 对视频流进行编码,我决定尝试一下 vp9,所以我将所有以 vp_* 开头的内容从 8 更改为 9。
但是 vp9 编码器总是返回空数据包,尽管编码器不返回任何错误。
这是我用于配置的代码。
vpx_codec_err_t error = vpx_codec_enc_config_default(vpx_codec_vp9_cx(), &enc_cfg, 0);
if(error != VPX_CODEC_OK)
return error;
enc_cfg.g_timebase.den = fps;
enc_cfg.rc_undershoot_pct = 95;
enc_cfg.rc_target_bitrate = bitrate;
enc_cfg.g_error_resilient = 1;
enc_cfg.kf_max_dist = 999999;
enc_cfg.rc_buf_initial_sz = 4000;
enc_cfg.rc_buf_sz = 6000;
enc_cfg.rc_buf_optimal_sz = 5000;
enc_cfg.rc_end_usage = VPX_CBR;
enc_cfg.g_h = height;
enc_cfg.g_w = width;
enc_cfg.rc_min_quantizer = 4;
enc_cfg.rc_max_quantizer = 56;
enc_cfg.g_threads = 4;
enc_cfg.g_pass = VPX_RC_ONE_PASS;
error = vpx_codec_enc_init(&codec, vpx_codec_vp9_cx(), &enc_cfg, 0);
if(error != VPX_CODEC_OK)
return error; …
Run Code Online (Sandbox Code Playgroud)