# 起因
前几天在某宝上购入了一台号称支持 mkv 格式的 bdp s485 , 但是在尝试播放 MyGO 时提示不兼容的视频文件,于是就光速退款了。
退款成功后遂又购入了一台号称是无拆无修的 PS3 。
兜兜转转又回到起点了。
当然这只是其中一个原因,另外几个原因可能会放到另一篇文章中。
# h264_mediacodec
众所周知,2006 年诞生,2012 年出薄机,2017 年停产,2023 年仍然提供更新的 PS3 是不支持 2002 年出现的上古 mkv 格式的视频的 (全恼)
于是就需要进行视频转码。
起先我是准备用 ffmpeg 的。
但是由于众所周知的原因,它转换起来很慢,而且视频是 h265 格式的,而 ps3 只支持 h264 格式的视频 (恼) 再加上万恶的 libx264
于是就更慢了:
1 | [libx264 @ 0xb4000070300d1c00] using SAR=1/1 |
后来知道了有一个安卓解码器 h264_mediacodec ,于是就失踪该解码器进行转换。speed 来到了 2.x
也就是一个 20 分钟的视频转换完成需要进行 20 分钟。
本来这也没什么,慢慢等就行了。
结果查看转换完成的视频才发现视频大小变成了原来的五分之一且无法正常播放。
于是就临时借了一台电脑去转换。
# h264_nvenc
然后因为在 linux 上写 shell 习惯了到 windows 平台反而无所适从,于是就装了个 cygwin。
然后用 cygwin 运行编写的 shell 脚本发现:
- cpu 吃满,gpu 划水
- 速度还是 2.x
大哥这可是 12900k 啊 (全恼)
于是就打算使用 h264_nvenc 来进行解码,结果发现:
1 | ffmpeg version 6.1.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers |
我真服了明明 vlc 还可以正常播放的 (全恼)
于是就打算从头编译 ffmpeg
然后就想到了两个方案:
安装 cuda 和 visual studio 2022 ,然后利用 vs2022 编译 ffmpeg
结果就是 cuda 装到一半要么安装失败要么蓝屏 (全恼)
在 linux 虚拟机里安装 mingw 和 cuda ,然后跨平台编译 windows 版本。
咱就不提装个 cuda 需要预留十个 g 的空间和极慢的安装速度了;
首先遇到的报错就是需要启用 --enable-nonfree。好,我启用了;
然后发现 error: cuda requested, but not all dependencies are sayisfied: ffnvcodec,但是我明明已经安装了;
添加了 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig 还是没用;
添加了 --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib 也还是识别不到
于是就放弃了 (悲)
# cpu 终于不内耗了
后来在这个回答中找到了 ShanaEncoder 这个软件。
然后就发现自从用了 ShanaEncoder 后转码速度快到飞起, GPU 终于不再全程划水了 (喜)
实测 3090Ti 转码一个 25 分钟的 h265 mkv 视频仅需要 1 分钟 (大喜)
附:我自己用的配置文件:
1 | <!-- ShanaEncoder --> |