video - 使用 ffmpeg 将静止图像编码为 mpeg-2 视频时如何避免泵送伪影

标签 video encoding ffmpeg dvd mpeg-2

我正在使用这样的命令行将静止图像编码为符合 dvd 的 mpeg 流:
ffmpeg.exe -y -loop 1 -t 00:00:30 -r 1 -i "image.jpg" -target pal-dvd -b:v 6000000 video.mpg
这会生成一个显示单个静止图像的 30 秒视频。
观看视频时,我注意到大约在每个 GOP 结束时出现的奇怪(且丑陋)的“泵送”伪影。
使用流分析器工具,我注意到 IPPPPPPPPPPPPPIPPPPPPPPPPPPPPP 序列中的两个连续 I 帧看起来与我预期的不一样,因为编码器应该没有理由更改影响质量的编码参数。

我还使用命令行对相同的图像进行了编码
ffmpeg.exe -y -loop 1 -t 00:00:30 -r 1 -i "image.jpg" -f dvd -pix_fmt yuv420p -r 25 -s 720x576 -aspect 16:9 -vcodec mpeg2video -b:v 6000000 -maxrate 9000000 -bufsize 1835008 -muxrate 10080000 -minrate 0 -packetsize 2048 -g 15 video.mpg
这或多或少地应用了上面 -target pal-dvd 所暗示的相同参数。
结果和预期的一样。

注意:非静止 Material 显示较少或没有“泵送”。当将 vbv 缓冲区大小设置为更高的值(如 3670016 字节)时,它也几乎消失,有效地加倍。
不幸的是,这不是选项,因为流应该是 dvd 兼容的,它强制 vbv 缓冲区大小,就像上面的命令行一样。

那么如何避免这些视觉伪影并获得(真正)显示静止图像的流?

最佳答案

我能够重现您的问题并通过指定量化器比例(设置为最高质量)来修复它,如下所示:

ffmpeg.exe -y -loop 1 -t 00:00:30 -r 1 -i "image.jpg" -q:v 2 -target pal-dvd -b:v 6000000 video.mpg

关于video - 使用 ffmpeg 将静止图像编码为 mpeg-2 视频时如何避免泵送伪影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26802420/

相关文章:

javascript - 如何将视频分成几秒,然后在用户每次提交电子邮件地址时显示 1 秒

ios - AVPlayerLayer 动画帧变化

JavaScript 无法处理瑞典语字母

javascript - HTML编码°度数符号额外空格

c - 这个按位汉明(31,26)编码器在 C 中如何工作? (位掩码)

html - MP4 html5 视频无法在 IE10 上运行

video - 制作视频教程的工具?

ffmpeg - 如何在 C 中解码来自这个无名的几乎 UVC 灰度相机的流

ffmpeg - 如何为特定(一组)文件找到最佳 FFmpeg libx265 编码设置

python-3.x - Python读取声音文件,ogg还是wav?