FFMpeg 的幀率錯誤

我另一个帖子的延伸。现在我正在尝试处理微软默认用 H.264 编码的 WTV 文件:重新编码、剪掉广告,并转成 MPEG2。除了偶尔的严重卡顿,我还发现视频播放不流畅——动作不连贯,有点跳帧。查了一下,如今所有由 Microsoft MCE 生成的 H.264/MPEG2 文件都是 59.94FPS。遗憾的是,FFmpeg 似乎识别不到这个帧率,结果按 29.97FPS 编码,导致画面不够顺滑。有没有办法强制让来自特定路径的视频以 59.94fps 解码/编码?想分享日志,但你们的文件上传不支持这么大的日志文件。

谢谢。

JR

转换任务专家设置 → 设置帧率

您可以压缩并附加大型日志文件。

是啊,MCEBuddy 确实有大问题。即使设置了那个选项,我觉得它也只是设了输出帧率,并没有改输入帧率,更别说 ffmpeg 在处理 WTV 文件时会把输出帧率当成输入帧率来用。

其实也不完全是 MCEBuddy 的锅,而是它调用的引擎的问题。我最近遇到一堆麻烦,虽然都是间接在这里发帖,但核心在于 WTV 容器里可以封装两种编码:MPEG2 和 H.264。H.264 在 Xbox 扩展器上本来就经常卡死;而 ffmpeg 在重编码 WTV——尤其是 H.264 的 WTV——时问题更多,他们的 issue 日志里也有不少人抱怨。一旦重编码,帧率就出错,结果要么黑屏,要么画面一顿一顿的。MCEBuddy 因为用的是 ffmpeg,所以也继承了这些毛病。MCEBuddy 我还会继续用,但 WTV 文件就指望不上了。可惜啊,要是能把 H.264 的 WTV 无损转成 MPEG2,GreenButton 上很多用户估计就不会卡死了。

谢谢。

JR

看來你已經了解 WTV 格式的複雜性以及 XBox 延伸器在處理它時的問題。

好消息是,如果你願意嘗試,MCEBuddy 可以幫你找到解決辦法。

舉例來說,你可以撰寫一個自訂設定檔,使用 HandBrake 而非 ffmpeg 來處理檔案。設定會像這樣:

order=handbrake
handbrake-video=XXX
handbrake-audio=XXX
handbrake-audioAC3=XXX
handbrake-ext=.mp4
handbrake-remuxto=.wtv

這會讓 HandBrake 處理檔案,最後再用 ffmpeg 從 mp4 封裝回 wtv。

還有更多選項可用,包括在 ffmpeg 設定檔中加入自訂影格率、在 mcebuddy.conf 檔案的 remux 區段加入影格率等,請參閱進階設定主題以取得更多細節。

我愿意帮忙测试,如果这能解决问题的话。我觉得最大的问题是,只要 WTV 文件的内容是基于 MP4 的,扩展器就会出问题。我猜测在微软决定停止支持“较新”编码格式之前,H.264 编解码器的实现并没有完全做好。现在如果 Handbrake 能把文件正确编码成 MPEG2 再封装进 WTV,那应该就理想了。

目前我不会改动编码格式,只是剪掉广告,再把片段重新封装。

JR