FFmpeg中的libx264编码流程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFmpeg中的libx264编码流程相关的知识,希望对你有一定的参考价值。

参考技术A 本文主要参考[1],为了更加清晰地展现出编码过程中FFmpeg与libx264的交互流程。

编码流程主要有三个步骤:

FFmpeg的编解码的API详细介绍可参考 FFmpeg音频解码#编解码API介绍部分 。

FFmpeg的libx264编码器 AVCodec ff_libx264_encoder 定义在 libavcodec/libx264.c 。是H.264编码库libx264的一个wrapper,libavcodec和libx264中间的一个代理,必要时对libx264和FFmpeg定义的一些数据结构进行转换。
参考技术B

推荐阅读《FFmpeg引入x264扩展》

未知编码器“libx264”

【中文标题】未知编码器“libx264”【英文标题】:Unknown encoder 'libx264' 【发布时间】:2012-04-03 14:49:42 【问题描述】:

我在 ubuntu11 上安装了 ffmpeg 0.8.9

./configure --enable-gpl --enable-nonfree --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libx264

当我运行它时

ffmpeg -y -i test.mp4 -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -vcodec libx264 -b 250k -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 250k -maxrate 250k -bufsize 250k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -aspect 320:240 -g 30 -async 2 a.ts

它说

未知编码器'libx264'

(注意:avconv 可能会出现同样的错误)

我该如何解决这个问题?谢谢!

【问题讨论】:

系统上是否安装了 x264(应该像 Ubuntu 上的“apt-get install libx264-dev”一样简单)? “ffmpeg -codecs”是否有 libx264 行? 但是,确切的潜在问题是什么?我在 /opt/lib "libx264.so" "libx264.so" 中有文件。 “libx264.a”。确切的问题一定是需要找到这些文件而不是(例如 opt/lib 不在 LD_LIBRARY_PATH 中) 【参考方案1】:

我使用的是 Ubuntu 11.04,我也遇到了这个错误 - Unknown encoder 'libx264'。安装包libavcodec-extra-53 解决了这个问题。

在 Ubuntu 14.04 LTS 中,所需的包称为 libavcodec-extra-54(和 libav-tools

【讨论】:

也许我没有跟上更新,但在我的 Ubuntu 11.04 上我不得不安装 libavcodec-extra-52,53 不存在。 这个对我有用,可以在 x264 中获得 simplescreenrecorder 编码。 在 Ubuntu 13.10 (saucy) 中仍然是必要的(并且可以工作)。 为什么安装此软件包会删除大量已安装的编码器?这是否是编写 ffmpeg 和编写 avconv 之间令人恼火的争论的一部分? 同时是libavcodec-ffmpeg-extra56(也就是libavcodec-extra【参考方案2】:

首先安装这些库

sudo apt-get install libfdk-aac-dev libass-dev libopus-dev  \
libtheora-dev libvorbis-dev libvpx-dev libssl-dev

对于 Ubuntu 20.04 问题

sudo apt-get install nasm

并跳过此手动 nasm 安装...但截至 Ubuntu 17.04 sudo apt-get install nasm 不提供足够新的 nasm,因此请手动安装

在以下位置获取 nasm 的源代码 http://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D 然后下载最新的

cd ~/src/nasm-2.13.02  #  update to release you just downloaded
./configure
make -j $(nproc)
sudo make install

那么对于 x264 :

git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --enable-static --enable-shared
make -j $(nproc)
sudo make install

对于 mp3 获取 LAME (libmp3lame)

sudo apt-get install libmp3lame-dev

或从http://lame.sourceforge.net/ v3.100 版手动安装,然后正常安装

cd lame-3.100/
./configure
make -j $(nproc)
sudo make install

最后下载ffmpeg源码并安装:

git clone git://source.ffmpeg.org/ffmpeg.git
cd ffmpeg

./configure  --enable-gpl   --enable-libass   --enable-libfdk-aac   --enable-libfreetype   --enable-libmp3lame   --enable-libopus   --enable-libtheora   --enable-libvorbis   --enable-libvpx   --enable-libx264   --enable-nonfree --enable-shared --enable-openssl   

make -j $(nproc)
sudo make install

我感觉到你的痛苦,但这有效 - 在 Ubuntu 18.10 上仍然有效

【讨论】:

我试过这个,但最后一步的configure 给出了以下错误:“libfaac not found” +1 - 这在 Mac OS Mavericks (10.9.4) 上对我有用。我正在努力尝试安装libx264,以便它可以集成到FFMPEG 中大约2 小时。非常感谢! --enable-libfaac 对我不起作用。不知道是不是一样,但是我用了这个参数--enable-libfdk-aac,之前安装的是apt install libfdk-aac-dev @jperelli cool now update ... 以上是 Ubuntu 17.04 的最新版本 x264 部分步骤中的错误 make -j8: filters/video/resize.c: In function 'pick_closest_supported_csp': filters/video/resize.c:215:30: error: 'AVComponentDescriptor aka const struct AVComponentDescriptor' 没有名为 'depth' 的成员 if( pix_desc->comp[i].depth > 8 ) ^ Makefile:277: recipe for target 'filters/video/resize.o' failed make: *** [ filters/video/resize.o] 错误 1【参考方案3】:

在使用 OpenAI Gym 时,我在 Ubuntu 18 中遇到了这个错误。您需要正确版本的 ffmpeg 和 x264 编码器。为了得到它们,我使用了以下方法并且成功了:

conda install x264=='1!152.20180717' ffmpeg=4.0.2 -c conda-forge

【讨论】:

这个对我有用。我确实尝试从snap 安装ffmpeg,并且snap 确实启用了libx264,但是一旦我安装了ffmpeg-pythonconda 再次自动安装ffmpeg,自动安装的ffmpeg 禁用了libx264。因此,为这个特定版本安装带有 conda 的 ffmpeg 对我来说是唯一可行的解​​决方案。

以上是关于FFmpeg中的libx264编码流程的主要内容,如果未能解决你的问题,请参考以下文章

2023-03-07:x264的视频编码器,不用ffmpeg,用libx264.dll也行。请用go语言调用libx264.dll,将yuv文件编码成h264文件。

未知编码器“libx264”

Android FFMPeg——FFMpeg+libx264编译

如何在 macos 上为 ffmpeg 启用 libx264

FFmpeg h.264 mp4编码告警:non-strictly-monotonic PTS

FFmpeg h.264 mp4编码告警:non-strictly-monotonic PTS