如何使用 FFMPEG 制作最高质量的 MPEG2 视频文件?

如何使用 FFMPEG 制作最高质量的 MPEG2 视频文件?

我有一个 WMV(v9(WMV3)、960x720、30.000030 fps、平面 4:2:0 YUV,由 PowerPoint 2010 制作)文件,需要将其转换为 MPEG2 - 这是我的电视机可以从 USB 闪存驱动器读取的唯一格式(我也尝试过 MP4/h.264、AVI/XVID - 只有 MPEG2 可以使用)。

我已经设法用简单的方式完成工作

ffmpeg -i "in.wmv" -c:v mpeg2video "out.mpg"

但结果的质量很差(出现了清晰可见的视觉扭曲)并且播放不流畅(有时太慢)。

我也尝试过

ffmpeg -i "in.wmv" -c:v mpeg2video -pix_fmt yuv420p -me_method epzs -threads 4 -r 30.000030 -g 45 -bf 2 -trellis 2 -cmp 2 -subcmp 2 -s 960x720 -b 2500k -bt 300k -async 1 -y "out.mpg"

(我在互联网上的某个地方找到了这个并做了一些修改 - 成功改变了分辨率、刷新率和输出格式(从 VOB 到裸 MPG))但质量仍然太差。

我必须使用什么参数才能尽可能地保存质量?压缩率根本不重要,即使文件大小增加也是可以接受的。

我实际上需要的另一件事(我选择不将其包含在问题标题中以避免使其过于具体,但我希望在答案中考虑到这一点)是添加纯静音作为音轨 - 原版没有声音,但电视机对此抱怨,我想摆脱这个抱怨。我已经使用 Audacity 生成了一个相同长度(精确到秒)的静音 OGG Vorbis 文件,但我无法将其与视频合并:

ffmpeg -i in.mpg -i silence.ogg -c:v copy -c:a libmp3lame out.mpg

甚至赤裸

ffmpeg -i in.mpg -c:v copy -out.mpg

给出“缓冲区下溢”和“数据包太大”错误。(in.mpg 是使用问题中的前两个命令由相同的 FFMPEG 二进制文件和相同的源 WMV 文件生成的文件)。

我在 Windows 7 上使用 Zeranoe FFMPEG 版本。

答案1

问题是 MPEG-2 的默认比特率相当低(与 ffmpeg 中的大多数其他视频编码器一样,H.264 除外)。MPEG-2 目前也不是最佳的编解码器选择。

MPEG-2 质量更佳

如果您想要继续使用 MPEG-2,您有以下几种选择:

  • 增加比特率。您现在使用的是-b:v 2500k。如果是高清视频,仅使用 2.5 MBit/s 是远远不够的。您至少需要将其增加一倍甚至更多才能使结果看起来不错。例如,使用-b:v 6000k -target pal-dvd

    对于 720p,我认为您仍应使用更高的比特率。请记住,DVD 使用 MPEG-2,2 小时的电影大约占用 4.7 GB,因此最终速度约为 5-8 MBit/s。MPEG-2 的压缩效率确实不高,在更高的比特率下效果更好。

  • 使用特定的质量设置。更改-b:v …-qscale:v 2。这里的数字范围是 1 到 31,数字越大表示质量越低。超过 4 或 5 是没有意义的。如果您不关心比特率,请从 2 开始,看看是否适合您。

调整 B 帧的数量、运动估计方法或 GOP 大小可能会稍微调整质量,但不会导致大的变化。

静音

用于-f lavfi -i aevalsrc=0生成静音音频流。例如:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg"

您可能需要添加-target pal-dvd上述命令来强制特定的缓冲区大小。

我选择 MP3 作为编解码器。MPEG 文件不能包含除 MPEG Layer I 和 II 音频以及 PCM 流之外的音频,因此使用静音 Ogg Vorbis 文件将不起作用,除非您也转换音频流(这不是您使用时所做的-c:a copy)。

使用不同的视频编解码器

我很惊讶,播放视频文件的电视可以读取 MPEG-2,但不能读取其他任何格式。至少MPEG-4 第二部分视频应该支持(这就是您所知的“DivX”——MPEG-4 Part II 编码器)。因此您可以尝试:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4"

您的电视实际上可能也支持 H.264,但仅支持特定配置文件。请尝试使用该baseline配置文件,例如:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libx264 -profile:v baseline -crf 23 -c:a aac -strict experimental "out.mp4"

在上面的例子中,我使用了 CRF 选项来设置质量,而不是qscale。请参阅H.264 编码指南了解更多信息。

答案2

我想说,如果文件大小并不重要,那么只需尝试增加比特率。

对于静音音频,您可能只想使用 ffmpeg,我对 Audacity 了解不多,无法给出任何评论。我以前用过这个。

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.aac

但由于您使用的是 mpg 容器,因此这对您不起作用,所以您可能需要尝试一下。(mp3 容器)

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.mp3

它似乎对我有用。

相关内容