无法让自动裁剪选择整个黑边

请求类型:
BUG / 新功能
Bug?
MCEBuddy 版本与类型(32 位或 64 位):
最新 64 位 / 2.5.1
操作系统与类型(32 位或 64 位):
Win10 x64
问题或建议摘要:
裁剪无效(或可能未真正检测到裁剪值)
重现步骤:
下载 TS 格式的电视电影,尝试以 TS(H.264/AC3)转换,启用裁剪标志,profile.conf 未做任何修改
截图:

我用 ffplay 检测裁剪值,结果显示(ffplay -i “In guten wie in schweren Tagen.ts” -vf “cropdetect=24:16:0”)

x1:1 x2:719 y1:58 y2:505 w:704 h:448 x:10 y:58 pts:556519 t:6.183544 crop=704:448:10:58

原始文件与用 ffplay 按裁剪值 704:448:10:58 播放的截图已附!

日志文件显示如下:
2019-11-09T20:52:16 MCEBuddy.AppWrapper.Handbrake → + autocrop: 38/70/2/0

能帮忙吗?


In guten wie in schweren Tagen.ts-Remove Ads-2019-11-09T20-49-52.1155442 01-00.log (1.1 MB)

Handbrake 會自動裁邊

INFORMATION> 2019-11-09T20:52:15 MCEBuddy.Transcode.ConvertWithHandbrake → Handbrake 自動影片裁邊

你可以將編碼器切換為 order=ffmpeg,讓 ffmpeg 偵測裁邊,或者建立自訂設定檔,使用你自己的裁邊參數。

謝謝 Goose,

我會試試看用 ffmpeg。

不過請容我請教一下,那個 profile 應該長什麼樣子?我該如何正確地傳遞裁切的參數?

我們這裡的電視業者讓我相當頭痛,因為有些節目在播放過程中會切換解析度(最知名的例子就是 Top Gear)。我發現用 -ss 600 作為 ffmpeg 的搜尋起點還不錯,但這要怎麼套用到 profile 裡呢?

非常感謝。

大多數庫存設定檔都會同時使用 handbrake 與 ffmpeg(作為後備),只是順序不同,方便切換。

以你的情況來說:
→ 正在使用的設定檔:TS
→ order=handbrake,ffmpeg

ffmpeg 與 handbrake 的編碼器設定檔都已經在你的設定檔裡。只要複製一份 TS 設定檔(或直接修改),把

order=handbrake,ffmpeg

改成

order=ffmpeg,handbrake

谢谢 Goose,

所以我把顺序换成了先用 ffmpeg,但我担心裁剪还是检测得不好,因为顶部和底部仍然有黑边。虽然少了一点,但仍然很明显。我想我会手动裁剪,除非你还有别的建议。

谢谢

我注意到你的頻道標誌延伸到黑邊區域,這就是為什麼自動裁切可能永遠不會把整條黑邊裁掉。它看到影片內容,而裁切傾向於對稱。如果你想把整段區域都移除,包括切到標誌,那就必須透過自訂設定檔搭配自訂裁切選項(並在 MCEBuddy 中關閉自動裁切,這樣才不會覆蓋你的設定)。

嗨,Goose,

感謝你的回覆。對於上面的影片,你說得對。但不幸的是,我試了另一部影片,其標誌並未延伸到頂部的黑邊(完全在實際影片內)。黑邊被稍微裁掉,但仍留有一部分(大約 50%)。

添加裁切值本身不是大問題。比較方便的是能自動將裁切值傳給 MCEBuddy,這目前還是得手動處理 :slight_smile:

謝謝
Bernd

它的工作原理是,mcebuddy 会扫描视频流,寻找纯黑色的黑边;只要有一个像素不是纯黑,就会被视为画面内容。我猜在视频的某个位置这些黑边并非纯黑,因此为了保险起见,自动裁剪不会将它们去除。

嗨,Goose,

抱歉这么长的文字,但我想说明一下我的目标。

确实,那可能是在广告时段,我并不想考虑,因为反正会被剪掉。
但用命令行 ffmpeg 做 cropdetection 似乎完全符合我的需求,所以这证明了用 ffmpeg 是可行的。
例如(取一分钟):
ffplay -ss 600 -i “Singh Is Bling.ts” -vf “cropdetect=24:16:0”
能检测出正确的值
接着再用
ffplay -ss 600 -i “Singh Is Bling.ts” -vf “crop=704:448:10:58”(本例中)
播放就一切正常(整部电影都适用)

有没有办法告诉 MCEBuddy 如何使用 cropdetection?比如隔多少秒开始、持续多久?
如果没有,我可以提个功能请求吗 :smile:

我通常想实现、但完全不知道能否通过 profile.conf 完成的目标:
ffmpeg -i “Pitch Black - Planet der Finsternis.ts” -map 0:v -c:v h264_nvenc -vf “crop=1280:544:0:88” -aspect 16:9 -crf 16 -qmin 16 -qmax 26 -f mpegts -map 0:a -c:a:0 ac3 -b:a:0 448k -c:a:1 ac3 -b:a:1 192k -c:a:2 ac3 -b:a:2 192k -af “dynaudnorm=p=1:m=50:s=0:g=11” -map 0:s:1 -scodec copy output_crop.ts -y

  • 去除广告(通过 MCEBuddy 和 comskip)
  • 压缩成 H.264(Nvidia 硬编)并封装为 .TS
  • 裁剪掉上下左右的黑边,并强制 16:9 比例适配我的电视(需手动检测裁剪参数)
  • 保留原始音轨并做音量均衡,使用原始码率和编码,无论音轨数量和编码如何。可能只有一条 mp2,也可能多达 5 条(多语言)混合 ac3 和 mp2(需手动获取音轨和码率)
  • 字幕轨直接拷贝
  • 应用一些视频质量参数

主要想摆脱手动步骤。

估计 MCEBuddy 帮不上太多忙,对吧?

非常感谢你的帮助。

你不需要引号

创建一个自定义配置文件,在 ffmpeg-video 部分添加你的自定义裁剪设置。
然后在配置文件中设置 SkipCropping=true 指令(这将使 MCEBuddy 不使用自身的裁剪检测,而依赖你在配置文件中指定的自定义裁剪设置。详见:MCEBuddy - Advanced Settings, Commands and Tweaking