FFmpeg透明PNG黑色轮廓问题

标签 ffmpeg outline

我正在使用 ffmpeg 对带有透明 PNG 的视频进行编码。我注意到图像周围有一个轻微的黑色轮廓。有什么办法可以去除吗?

输出图像: image

透明PNG样本: image

我的ffmpeg命令

ffmpeg -hide_banner -y -ss 0.0 -t 8.5 -i C:\Users\Admin\Desktop\test_movies\6.mp4 -i C:\Users\Admin\Desktop\test_movies\text_and_emoji.png -filter_complex [0:v]setpts=PTS-STARTPTS,scale=640:640:force_original_aspect_ratio=decrease,pad=640:640:(ow-iw)/2:(oh-ih)/2:color=#18ffff[0v];[1:v]scale=556.24744:141.41884[1v];[0v][1v]overlay=(W-w)/2-(W/2-325.33328):(H-h)/2-(H/2-567.7075):enable='between(t,0.0,8.5)' -ac 2 -ar 44100 -vcodec libx264 -g 75 -r 20 -preset ultrafast -strict experimental C:\Users\Admin\Desktop\test_movies\test.mp4

上次编辑 1:

我尝试不使用 [1:v]scale=556.24744:141.41884[1v],输出仍然有轻微的轮廓

示例输出: image

示例代码:

ffmpeg -hide_banner -y -ss 0.0 -t 8.5 -i C:\Users\Admin\Desktop\test_movies\white.mp4 -i C:\Users\Admin\Desktop\test_movies\text_and_emoji.png -filter_complex [0:v]scale=640:640:force_original_aspect_ratio=decrease,pad=640:640:(ow-iw)/2:(oh-ih)/2:color=#18ffff[0v];[0v][1:v]overlay=(W-w)/2-(W/2-325.33328):(H-h)/2-(H/2-567.7075):enable='between(t,0.0,8.5)' -ac 2 -ar 44100 -vcodec libx264 -preset ultrafast -strict experimental C:\Users\Admin\Desktop\test_movies\test.mp4

上次编辑 2:

我尝试了另一个添加了 alpha=premultiplied 的最新 ffmpeg 版本。它以某种方式删除了轮廓,但图片的质量降低了很多,直到它看起来像像素化。加。图像背面还有另一个未知的白色层。

输出视频 output video

示例代码:

C:\Users\Admin\Downloads\ffmpeg-20180102-57d0c24-win64-static\bin\ffmpeg -y -ss 0.0 -t 8.5 -i C:\Users\Admin\Desktop\test_movies\white.mp4 -i C:\Users\Admin\Desktop\test_movies\text_and_emoji.png -filter_complex [0:v]scale=640:640:force_original_aspect_ratio=decrease,pad=640:640:(ow-iw)/2:(oh-ih)/2:color=#00ffff[0v];[1:v]scale=480:120[1v];[0v][1v]overlay=(W-w)/2-(W/2-325.33328):(H-h)/2-(H/2-567.7075):alpha=premultiplied:enable='between(t,0.0,8.5)' -ac 2 -ar 44100 -vcodec libx264 C:\Users\Admin\Desktop\test_movies\test.mp4

最新编辑 3:

按照@Mulvya 的建议,我将他的代码与 alpha=premultiplied 结合起来,现在看起来好多了,有非常轻微的黑色轮廓(几乎不可见)

输出视频: Output video

示例代码:

C:\Users\Admin\Downloads\ffmpeg-20180102-57d0c24-win64-static\bin\ffmpeg -y -ss 0.0 -t 8.5 -i C:\Users\Admin\Desktop\test_movies\white.mp4 -i C:\Users\Admin\Desktop\test_movies\text_and_emoji.png -filter_complex [0:v]setpts=PTS-STARTPTS,scale=640:640:force_original_aspect_ratio=decrease,pad=640:640:(ow-iw)/2:(oh-ih)/2:color=#18ffff[0v];[1:v]premultiply=inplace=1,scale=480:120[1v];[0v][1v]overlay=(W-w)/2-(W/2-325.33328):(H-h)/2-(H/2-567.7075):alpha=premultiplied:enable='between(t,0.0,8.5)':format=rgb,format=yuv420p -ac 2 -ar 44100 -vcodec libx264 C:\Users\Admin\Desktop\test_movies\test.mp4

最佳答案

这是由于覆盖过滤器中的错误,现已修复。将您的过滤图更改为此,

"[0:v]setpts=PTS-STARTPTS,scale=640:640:force_original_aspect_ratio=decrease,pad=640:640:(ow-iw)/2:(oh-ih)/2:color=#18ffff[0v];[1:v]premultiply=inplace=1,scale=556.24744:141.41884[1v];[0v][1v]overlay=(W-w)/2-(W/2-325.33328):(H-h)/2-(H/2-567.7075):enable='between(t,0.0,8.5)':format=rgb,format=yuv420p"

为此,您需要 2017 年 12 月 16 日之后的 FFmpeg 版本。

关于FFmpeg透明PNG黑色轮廓问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48144440/

相关文章:

php - 如何为 jw 播放器脚本编码 ffmpeg,该脚本读取传递 php 文件?

css - 删除 iPad anchor 轮廓

html - 在所有浏览器中实现纯文本轮廓/描边的最佳方式?

Java:绘制多个形状的轮廓

video - 通过 HTTP 下载部分视频(用于远程缩略图)

FFmpeg - 结合 2 个命令

CSS 大纲出现在意想不到的地方

vb.net - 绘制一些连接线的轮廓

select - ffmpeg - 从视频中提取确切的帧数

c++ - ffmpeg:如何将 h264 原始数据保存为 mp4 文件