V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
movq
V2EX  ›  程序员

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

  •  
  •   movq · 2021-03-31 13:24:16 +08:00 · 2611 次点击
    这是一个创建于 1093 天前的主题,其中的信息可能已经有所发展或是发生改变。

    电脑上面已经安装了 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

    fA8YHdtNv6FVkuz


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

    第 1 条附言  ·  2021-03-31 18:22:26 +08:00
    根据 V 友的回答,现在去掉了-i 之前的-c:v 和 encoder,使用 libx265 作为 encoder,可以正常使用了

    还有一个疑问就是,我之前用 videotoolbox 的时候,有一个硬件加速选项(-hwaccel ),使用的是核显( iris plus 655 ),现在我用 libx265 作为 encoder,发现 CPU 负载几乎满了。

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

    可以先用 videotoolbox 解码然后用 x265 编码吗(不同的库解码的结果是通用的吗?)
    hello2060
        7
    hello2060  
       2021-03-31 14:34:54 +08:00 via iPhone
    @movq 你已经用 videotoolbox 压过那画质就没有原来好了,你再用 x265 最多也就 videotoolbox 输出这画质
    movq
        8
    movq  
    OP
       2021-03-31 14:47:33 +08:00
    @hello2060 我的意思是源视频不变,先用 videotoolbox 解码,然后用 x265 来输出,因为我看 videotoolbox 有硬件加速
    jifengg
        9
    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
        10
    hello2060  
       2021-03-31 15:55:37 +08:00 via iPhone
    @movq 原视频是什么?一个视频文件吗?那就 ffmpeg 里-i 指定,或者如果他已经是 h.265 的视频,那只要重新转换格式就行了,-vocodec copy 。

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

    你用苹果工具解码的话就存成 raw 格式再 ffmepg -c libx265 转
    minami
        11
    minami  
       2021-03-31 16:40:44 +08:00
    @movq #6 可以用 videotoolbox 解码然后用 x265 编码。解码理论上不应有差别
    jim9606
        12
    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
        13
    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
        14
    movq  
    OP
       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
        15
    jifengg  
       2021-04-01 11:51:13 +08:00
    @movq 具体原因我也不是很懂,还是建议下载静态编译的二进制文件。楼上已经给出链接 https://evermeet.cx/ffmpeg/
    msg7086
        16
    msg7086  
       2021-04-01 13:37:57 +08:00
    x265 就是用 CPU 的。你要用硬件编码器那就改用硬件编码器。
    「显卡加速」有,但因为显卡并没有比 CPU 快多少,所以实际上并不能加速,也没人用。
    要么就直接用显卡内部的硬件编码器来编码。这种和加速无关,是直接调用专门的电路来编码。
    比如 qsv 或者 nvenc,就是调用核显或者独显内部的电路来编码的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1537 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:06 · PVG 01:06 · LAX 10:06 · JFK 13:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.