我尝试使用 FFMPEG 将单个 640x480 图像(在我的情况下是 8bpp PNG 图像,尽管我可能需要对其他类型和质量的图像执行此操作)转换为没有音轨的 10 秒 XVID AVI 文件。我在一个需要 XVID AVI 的较旧的专用视频循环器上运行它。它声称在其 VGA(640 x 480)显示屏上具有 16bpp 色深。是的,我们不是在谈论高科技或新技术。这是一个“哦,你懂电脑吗?”为朋友做的项目。
我不是 FFMPEG 专家,甚至不是普通用户。我每 6-9 个月就会使用它来解决我遇到的一些类似这样的奇怪问题。
理想情况下,我正在制作视频幻灯片。但我尝试过的各种尝试都导致 AVI 文件在播放时出现“块状”现象,或者出现“闪烁”部分,其中某些小部分在视频播放时会改变颜色。
我尝试将其转换为 1 fps 的输出文件,并且尝试创建 10 个具有连续名称的输入文件的副本并从连续文件列表中创建 1 fps(并尝试 3 到 5 fps 作为实验)。
我尝试过将视频数据速率提高到 -b:v 1000K,这很有帮助。我尝试过 -b:v 2000k,这有一定的帮助,但效果不大。
我尝试限制输出帧速率,因为一旦图像显示出来,它实际上不应该有太大变化。如果我让 FFMPEG 使用其默认值,我会得到一个 25 fps 的视频,这个视频相当大,而且说实话质量并没有好多少——我仍然会看到“闪烁”的部分。
根据我在 Google 和本网站找到的一些示例,我尝试了一次和两次编码。两次编码似乎略好一些,但这很主观。
是否有某种方法可以让 FFMPEG 最初对输入图像进行非常高质量的复制,然后由于它不会改变而进行“滑行”?
根据请求尝试的命令行:
转换 640x480 73KB JPG 图像(根据 Irfanview,24bpp,34849 种独特颜色)
ffmpeg.exe -f image2 -loop 1 -t 10 -i lion3.jpg -s 640x480 -aspect 4:3 -r 1 -vcodec libxvid -b:v 1000k lion3_jpg_dr1000k_r01.avi
质量非常好,文件大小为 100KB。
如果我将文件保存为 GIF(8bpp、254 种唯一颜色、214 KB 文件大小)并且仅保存一帧,我会尝试以下转换:
ffmpeg.exe -r 1/10 -i lion3.gif -s 640x480 -aspect 4:3 -r 1 -vcodec libxvid -b:v 1000k -vsync cfr lion3_gif_dr1000k_r01.avi
JPG 命令对 GIF 不起作用(我想这并不奇怪),上面的参数是从网上找到的多个示例中拼凑起来的。
GIF 转换后得到的 AVI 在背景的部分区域有一堆“闪烁”的块 - 视频在屏幕上显示的 10 秒内发生了明显的变化。
然后,我找到了将多张图片放在一起制作视频的例子,所以我复制了十张图像,并添加了 01 到 10,然后运行了这个
ffmpeg.exe -f image2 -framerate 1 -i image_%02d.png -c:v libxvid -vtag xvid -bf 0 -pix_fmt yuv420p -vf "fps=1" -b:v 2000K image_img_fps01_2000k_yuv420p_img2_bf0.avi
结果是一些区域最初非常块状,随着时间的推移它们逐渐消失。但在原始图像中,同一区域是一组小的黑色和灰白色区域,可能是 2x2 像素。生成的 AVI 中的块状看起来就像 8x8 或更大。
希望这有助于理解我正在尝试的事情。