我正在尝试使用 FFmpeg 为视频添加水印。我有一个自定义版本的 FFmpeg,我正在创建它以保持二进制大小。我好像排除了FFmpeg在这个过程中读取PNG/JPG图片的能力:
ffmpeg -i ../weather.png
ffmpeg version 2.6.git Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --prefix=/home/user/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/user/ffmpeg_build/include --extra-ldflags=-L/home/user/ffmpeg_build/lib --bindir=/home/user/bin --enable-gpl --disable-doc --enable-yasm --disable-decoders --enable-decoder=mpeg4 --enable-decoder=aac --enable-decoder=h264 --enable-decoder=mpegvideo --enable-decoder=mpeg1video --enable-decoder=mpeg2video --enable-decoder=png --disable-encoders --enable-encoder=mpeg4 --enable-encoder=aac --enable-encoder=h264 --enable-encoder=libx264 --enable-encoder=mpeg1video --enable-encoder=mpeg2video --enable-encoder=png --disable-parsers --enable-parser=aac --enable-parser=mpeg4video --enable-parser=ac3 --enable-parser=h261 --enable-parser=h264 --enable-parser=vc1 --enable-parser=mpegvideo --disable-demuxers --enable-demuxer=aac --enable-demuxer=h264 --enable-demuxer=mpegvideo --enable-demuxer=m4v --enable-demuxer=mov --enable-demuxer=vc1 --enable-demuxer=mp4 --enable-demuxer=concat --disable-muxers --enable-muxer=h264 --enable-muxer=mpeg1video --enable-muxer=mpeg2video --enable-muxer=m4v --enable-muxer=mov --enable-muxer=vc1 --enable-muxer=md5 --enable-muxer=mp4 --enable-protocols --enable-indev=v4l --enable-indev=v4l2 --disable-filters --enable-filter=aresample --enable-filter=scale --enable-filter=movie …Run Code Online (Sandbox Code Playgroud) 我想使用 ffmpeg 访问我的网络摄像头。我试过:
ffmpeg -f v4l2 -i /dev/video0 output.mp4
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
Unknown input format: 'v4l2'
Run Code Online (Sandbox Code Playgroud)
类似地用video4linux2代替v4l2. 因此,我假设我的 ffmpeg 版本丢失了v4l2。我看到有一个配置选项--enable-libv4l2(https://ffmpeg.org/ffmpeg-all.html#video4linux2_002c-v4l2)。我将其添加到我的配置中,但运行配置我得到:
ERROR: "libv4l2 not found using pkg-config"
Run Code Online (Sandbox Code Playgroud)
我如何将其添加到我的构建中?我正在遵循https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu上的指南,并进行一些修改以包含特定的解码器等。
据我所知,libv4l2 可能随 Ubuntu 软件包一起提供libv4l-dev。安装它:
sudo apt-get install libv4l-dev
Run Code Online (Sandbox Code Playgroud)
不过似乎并不影响我的问题。我可以看到/usr/lib/x86_64-linux-gnu/pkgconfig/libv4l2.pc,我猜这就是我需要的文件。也许我只需要在配置选项中将 ffmpeg / pkg-config 指向它?就像是:
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig" ./configure ...
Run Code Online (Sandbox Code Playgroud)
?(不起作用)。修改--extra-cflags或者--extra-ldflags指向include/libs?也无法让它发挥作用。链接的 FFmpeg 构建指南将所有包保留在我的主文件夹中的 ffmpeg_build 目录中。我应该以libv4l-dev某种方式安装在那里吗?
config.log 的尾部:
END /tmp/ffconf.5wdQhyZ1.c
gcc -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -I/home/jon/ffmpeg_build/include …Run Code Online (Sandbox Code Playgroud) 我在 FFmpeg 中使用 eq 过滤器:
https://ffmpeg.org/ffmpeg-filters.html#eq
使用如下命令:
ffmpeg -y -loop 1 -i input.jpg -filter_complex "[0:v]eq=1:0:1:1:1:1:1:1[outv]" -map [outv] -c:v libx264 -t 3 -pix_fmt yuv420p out.mp4 # does nothing
Run Code Online (Sandbox Code Playgroud)
文档表明过滤器的第一个组成部分是对比度:
设置对比度表达式。该值必须是 -2.0 到 2.0 范围内的浮点值。默认值为“0”。
但是,我发现为了不发生对比度变化,该值应为“1”。这不应该是默认的吗?
无论如何,如果这个第一个值是对比,我很困惑。它不像我期望的那样表现。我将它与例如 css 进行比较-webkit-filter: contrast(x)。在 CSS 中,contrast(0)使整个图像变灰。然而,在 FFmpeg 中,图像似乎是部分黄色和部分灰色(大概取决于我的图像:
CSScontrast(-1)无效。但是,在FFmpeg中,对比度-1几乎是倒对比度。我知道这两件事是完全分开实现的,但我本来希望有一个近似的关系。我误解了 eq 过滤器对比度值吗?