我正在运行以下命令将 mp4 视频转换为 VP8/Webm 格式:
ffmpeg -y -i lists.mp4 -f webm -vcodec libvpx -vb 600k -r 20 -acodec libvorbis -ab 64k -ac 1 lists.webm
当我在 VLC 中打开它并尝试搜索视频中的不同点时,搜索是“量化的”。我的意思是,视频中有 3 或 4 个点是搜索器“捕捉到的”,例如,如果我点击其中的任何东西,06:30 to 10:30
它都会搜索到06:30
我确信问题与 ffmpeg 的编译方式有关。Windows 下随 ffmpeg 一起提供的 Miro Video Converter 使用以下命令:
ffmpeg -y -i lists.mp4 -f webm -vcodec libvpx -acodec libvorbis -crf lists.webm
Miro 的输出在 VLC 中没有量化,但在我的 Linux 安装中,同样的命令可以量化。因此,这肯定与 ffmpeg 版本或编译方式有关。
有人知道这个吗?调试输出如下
Linux ffmpeg 的调试信息:
ffmpeg version N-35110-g0b9a69f, Copyright (c) 2000-2011 the FFmpeg developers
built on Nov 23 2011 12:51:56 with gcc 4.6.2
configuration: --prefix=/usr --enable-libmp3lame --enable-libvorbis --enable-libxvid --enable-libx264 --enable-libvpx
--enable-libtheora --enable-libgsm --enable-libspeex --enable-postproc --enable-shared --enable-x11grab
--enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libschroedinger --enable-libopenjpeg --enable-librtmp
--enable-gpl --enable-version3 --enable-runtime-cpudetect --disable-debug --disable-static
libavutil 51. 26. 0 / 51. 26. 0
libavcodec 53. 37. 0 / 53. 37. 0
libavformat 53. 21. 0 / 53. 21. 0
libavdevice 53. 4. 0 / 53. 4. 0
libavfilter 2. 49. 0 / 2. 49. 0
libswscale 2. 1. 0 / 2. 1. 0
libpostproc 51. 2. 0 / 51. 2. 0
对于 Windows(Miro 视频转换器):
FFmpeg version SVN-r25762, Copyright (c) 2000-2010 the FFmpeg developers
built on Nov 18 2010 04:07:17 with gcc 4.4.2
configuration: --enable-gpl --enable-version3 --enable-libgsm
--enable-pthreads --enable-libvorbis --enable-libtheora --enable-libspeex
--enable-libmp3lame --enable-libopenjpeg --enable-libschroedinger
--enable-libopencore_amrwb --enable-libopencore_amrnb --enable-libvpx
--disable-decoder=libvpx --arch=x86 --enable-runtime-cpudetect --enable-libxvid
--enable-libx264 --extra-libs='-lx264 -lpthread' --enable-librtmp
--extra-libs='-lrtmp -lpolarssl -lws2_32 -lwinmm' --target-os=mingw32
--enable-avisynth --cross-prefix=i686-mingw32- --cc='ccache i686-mingw32-gcc'
--enable-memalign-hack
libavutil 50.33. 0 / 50.33. 0
libavcore 0.13. 0 / 0.13. 0
libavcodec 52.96. 0 / 52.96. 0
libavformat 52.84. 0 / 52.84. 0
libavdevice 52. 2. 2 / 52. 2. 2
libavfilter 1.62. 0 / 1.62. 0
libswscale 0.12. 0 / 0.12. 0
答案1
我对 VP8 编码不太了解,但一般来说,ffmpeg
它是指“图片组”大小的关键帧。
传递-g
一个数字作为帧中图片组的最大尺寸;这将是关键帧之间的最大帧数(包括关键帧)。
不同的 ffmpeg / codec 版本可能有不同的默认值;不过,您可以将其覆盖为您想要的任何值。
背景:
压缩视频格式通常不会存储视频的每一帧的完整数据,而是将大多数帧存储为如何从过去帧的片段(在更现代的系统中,则是未来帧的片段)构建帧的描述。为了能够快速查找并开始播放,视频播放器软件通常只允许您跳转到存储了完整数据的帧,这些帧称为“关键帧”或 I 帧。
通常,您可以告诉编码器您希望它多久放入一次关键帧。更多关键帧为查找和编辑提供了更大的灵活性,但会使视频压缩效率降低。