第一次发帖,请多多包涵:)
简单介绍一下历史。我正在使用 tvheadend,内置的转码器会占用我的 CPU,并提供平均质量的输出(由 ffmpeg 提供支持),如果我通过 ffmpeg 从 tvheadend 传输输出,我会得到更低的 CPU 使用率和更好的质量(奇怪但确实)。 (由于玩家能力有限,我不得不转码)
所以在 tvheadend 中,http 链接来自类似
到
pipe:///usr/bin/ffmpeg -loglevel fatal -i http://avideostream -tune zerolatency -vcodec libx264 -preset veryfast -crf 28 -maxrate 1200k -bufsize 3500k -vf "scale='min(1280,iw)':'min(720,ih)'" -acodec aac -b:a 128K -f mpegts pipe:1
如您所见,差异很大。
这一切都有效,但是如果我想更改上述管道中的设置,我必须更改所有链接的设置(我通过脚本完成),但这意味着tvheadend
重新导入并测试所有链接(因为它看到它们)作为更改的链接,这很公平)。
所以我想做的是将 ffmpeg 包装在一些东西中,这样我就可以更改包装器。 (这一切都发生在最新的 Ubuntu 服务器上)。
现在我很高兴地说我不是 Ubuntu 专家(甚至还不是),尽管我已经运行自己的家庭服务器几年了。所以我并没有完全理解“管道”的各个方面。
我在上面看到的三个选项(到目前为止,我还没有找到为 tvheadend 选择外部转码器选项的方法,而无需进入奇怪的构建,我想避免这种情况)是:
使用 ffmpeg 的外部选项文件(我可以从控制台开始工作,但不能作为管道的一部分,例如
sudo ffmpeg -i amovie.mp4 $(cat ffmpegoptions.txt) convertedmovie.mp4
它可能就像文件访问权限一样简单,但我没有做太多调试)
将 ffmpeg 的内容放入.sh
文件中(但这似乎破坏了管道,我不知道从哪里开始)
将 ffmpeg 放入某种 python 脚本中(我什至没有开始调查这一点,这对我来说太远了,我可以编写 python,但这目前超出了我的范围)
简短版本,我想从:
tvheadend >> piped to ffmpeg >> back to tvheadend >> off to player
到任一
tvheadend >> piped to .sh or script wrapper >> piped to ffmpeg >> back to tvheadend >> off to player
或者
tvheadend >> piped to ffmpeg (controlled by an external options file) >> back to tvheadend >> off to player
任何建议/帮助将不胜感激。如果我错过了任何重要信息,请告诉我。
答案1
我没有找到真正的答案,更多的是解决方法。由于这是一个更大的 plex 的一部分,我找到了一个包含 ffmpeg 转码的代理 (xteve),我可以设置 ffmpeg 的选项。这对于我想做的事情来说已经足够好了。
希望这可以节省其他人一点时间。