Mac 上面已经安装了 x264 和 x265,但是用 ffmpeg,选 x264 和 x265 做解码器的时候找不到,怎么解决

2021-03-31 13:24:16 +08:00
 movq

电脑上面已经安装了 x264 和 x265

brew install x264
Warning: x264 r3048 is already installed and up-to-date.
To reinstall r3048, run:
  brew reinstall x264

brew install x265
Warning: x265 3.5 is already installed and up-to-date.
To reinstall 3.5, run:
  brew reinstall x265

但是在 ffmpeg 中使用的时候,提示 Unknown decoder 'x265'(最后一行):

ffmpeg \
-c:v x265 -i  ./A.mp4 \
-c:v x265 -i ./B.mp4 \
-filter_complex "[0:v]pad=iw*2:ih[v_wide];[v_wide][1:v]overlay=W/2:0[out_video]" \
-map "[out_video]" \
-c:v x265 \
-crf 18 \
-map 0:a:0 \
-c:a copy -y \
./C.mp4
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
  built with Apple clang version 12.0.0 (clang-1200.0.32.21)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3.2-with-options_1 --enable-shared --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libaom --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-demuxer=dash --disable-libjack --disable-indev=jack --enable-opencl --enable-videotoolbox --disable-htmlpages
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
Unknown decoder 'x265'

ffmpeg 的安装方式是homebrew-ffmpeg

我是直接

brew tap homebrew-ffmpeg/ffmpeg
brew install homebrew-ffmpeg/ffmpeg/ffmpeg

安装的,github 页面也说了默认已经包括了 x264 和 x265


我最开始的使用用的是苹果自带的 videotoolbox,但是发现那个输出视频的时候画质损耗比较大,就想改用 libx265

2811 次点击
所在节点    程序员
16 条回复
ynyounuo
2021-03-31 13:42:57 +08:00
libx265
movq
2021-03-31 13:45:32 +08:00
@ynyounuo 这个也试过,没用
momocraft
2021-03-31 13:54:10 +08:00
我用的 https://evermeet.cx/ffmpeg/ 这里下的静态链接版 , 看-encoder 有 libx265 要不要试一下
minami
2021-03-31 13:54:30 +08:00
decoder ? x265 怎么会是 decoder 呢,它是 encoder 啊。转码的话,你要这么用 ffmpeg -i input -c:v libx265 output,会先调用软解解码器,然后再用 x265 编码器进行编码。videotoolbox 你可以这么用,是因为它既可以解码又可以编码
EridanusSora
2021-03-31 14:01:04 +08:00
参数顺序问题吧,-c:v 放-i 后面(而且你重复了)
movq
2021-03-31 14:10:17 +08:00
@minami emmm 我是在网上 copy 的,不太懂视频处理的原理。

可以先用 videotoolbox 解码然后用 x265 编码吗(不同的库解码的结果是通用的吗?)
hello2060
2021-03-31 14:34:54 +08:00
@movq 你已经用 videotoolbox 压过那画质就没有原来好了,你再用 x265 最多也就 videotoolbox 输出这画质
movq
2021-03-31 14:47:33 +08:00
@hello2060 我的意思是源视频不变,先用 videotoolbox 解码,然后用 x265 来输出,因为我看 videotoolbox 有硬件加速
jifengg
2021-03-31 15:54:16 +08:00
使用命令行:
ffmpeg.exe -v 0 -codecs | grep 265
查看支持的 codec 里是否有 h265 的。

我的 win 4.2.1 static 的返回:
DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv hevc_cuvid ) (encoders: libx265 nvenc_hevc hevc_amf hevc_nvenc hevc_qsv )

说明支持 Decode 和 Encode,
其中 decoders 支持:hevc hevc_qsv hevc_cuvid
encoders 支持: libx265 nvenc_hevc hevc_amf hevc_nvenc hevc_qsv

另:-c:v xxx -i xxx 表示这个输入文件的视频解码器用指定的 xxx,但是你的 ffmpeg 不支持,所以提示的是“Unknown decoder”而不是“Unknown encoder”
ffmpeg 建议用 static 编译的,免去依赖的问题。
hello2060
2021-03-31 15:55:37 +08:00
@movq 原视频是什么?一个视频文件吗?那就 ffmpeg 里-i 指定,或者如果他已经是 h.265 的视频,那只要重新转换格式就行了,-vocodec copy 。

你用 ffmpeg 的话看下有哪些解码器,有没有硬件解码器。

你用苹果工具解码的话就存成 raw 格式再 ffmepg -c libx265 转
minami
2021-03-31 16:40:44 +08:00
@movq #6 可以用 videotoolbox 解码然后用 x265 编码。解码理论上不应有差别
jim9606
2021-03-31 16:54:40 +08:00
因为 -c:v (等价于-vcodec) 用的值是 libx264 和 libx265 。
ffmpeg 默认动态链接 libx264,brew 应该是自动安装这个依赖的,brew install x264 装的是另一个只能处理 h264 的命令行工具 x264 。
运行 ffmpeg -codecs 可以看到支持的 encoder/decoder 的名字,如果直接用 h264 或者 hevc 默认就是选择 libx264 和 libx265 。
你这里-i 前面的-c:v 是多余的

@hello2060 这里用了 filters,必须重编码的。
shonnliberty
2021-03-31 17:57:19 +08:00
-crf 参数我一般不写默认 28 质量,越小质量越好但是视觉上 28 已经和原视频差不多,速度参数一般我写 faster 这个速度比较平衡不然就太慢了接受不了,
音频参数-c:a copy 直接复制原视频,我测试了结果如果用-c:a aac -b:a 128k 文件反而更大一些。
ffmpeg -i input.mp4 -c:v libx265 -crf 26 -preset faster -c:a aac -b:a 128k output.mp4

所以我一般用这个
ffmpeg -i input.mp4 -c:v libx265 -preset faster -c:a copy output.mp4

参考: https://trac.ffmpeg.org/wiki/Encode/H.265
movq
2021-03-31 18:17:28 +08:00
@jifengg
ffmpeg -v 0 -codecs | grep 265
DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding) (encoders: libx265 hevc_videotoolbox )

ffmpeg -v 0 -codecs | grep 264
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (encoders: libx264 libx264rgb h264_videotoolbox )

不知道为啥我这里的 h264 和 h265 都只能编码不能解码。。。。
jifengg
2021-04-01 11:51:13 +08:00
@movq 具体原因我也不是很懂,还是建议下载静态编译的二进制文件。楼上已经给出链接 https://evermeet.cx/ffmpeg/
msg7086
2021-04-01 13:37:57 +08:00
x265 就是用 CPU 的。你要用硬件编码器那就改用硬件编码器。
「显卡加速」有,但因为显卡并没有比 CPU 快多少,所以实际上并不能加速,也没人用。
要么就直接用显卡内部的硬件编码器来编码。这种和加速无关,是直接调用专门的电路来编码。
比如 qsv 或者 nvenc,就是调用核显或者独显内部的电路来编码的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/766831

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX