我在笔记本电脑上创建了一个幻灯片,命令如下
ffmpeg LOOPS -i "AUDIO_FLAC" -filter_complex "TRANSITION MAP
concat=n=30:v=1:a=0[v]" -map "[v]" -map 30:a -shortest -q:v 1 -q:a 1 output.mp4
我在高配置的台式机上制作了同样的幻灯片,并认为两者的区别只是速度。然而,台式机生成的 mp4 文件要小得多,而且质量没有任何明显的损失。
更强大的 CPU 可以更有效地(在很大程度上)制作视频,这正常吗?或者两台机器之间存在一些差异(例如,安装的编解码器)。两台机器都安装了 Ubuntu 18.04。
更新:
当我检查两台机器生成的文件时,我发现了一些差异。
第二台机器,出于我不知道的原因,尽管如此,还是将 FLAC 输入更改为 12k mp3
q:a 1
。然后,我不得不添加-c:a copy -strict -2
以保持音频质量。视频编解码器有所不同:
第一台机器:
Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 4296 kb/s, 25 fps, 25 tbr, 12800 tbn, 25 tbc (default)
第二台机器:
Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuvj444p(pc), 1920x1080 [SAR 1:1 DAR 16:9], 324 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
我认为大小的巨大差异(大约五倍)是由于视频是由淡入淡出的幻灯片制作而成的。显然,这些编解码器对淡入淡出行为的处理方式截然不同(例如,重复帧;只是猜测)。
答案1
更强大的 CPU 可以更有效地(在很大程度上)制作视频,这正常吗?
这取决于你对“有效”的定义以及所使用的编码模式。在对视频进行编码时,你必须做出权衡,这些权衡包括:
- 速度(就所使用的编码特征而言)
- 文件大小
- 质量
您可以修复其中任意两个点,但第三点需要权衡。例如,您可以以较小的尺寸编码出一个质量良好的文件,但编码需要很长时间。或者您可以修复质量参数并选择快速编码模式,这将为您提供更大的文件。
但请注意,除非将 CPU 的速度考虑在内,否则此“速度”与时间无关。如果您拥有更强大的 CPU 并为编码指定固定质量,则假设速度设置相同,文件大小仍将相同。编码过程将更快地完成。
根据 CPU 功能的不同,质量和/或文件大小也可能会有细微差别,例如,编码器可能会使用特定于平台的优化。
此外,使用多线程时,编码过程的输出不能保证是确定性的。您不应该看到任何较大的文件大小或质量差异,但帧校验和将不匹配。
或者两台机器之间存在一些差异(例如,安装了编解码器)
由于您没有在命令中明确指定任何编解码器,因此 ffmpeg可能如果默认值不可用,则自动选择最合适的一个。
例如,如果您没有libx264
安装(H.264 编码器),ffmpeg 将选择mpeg4
(MPEG-4 Part II 编码器),这很可能就是您的情况,因为与 H.264 相比,MPEG-4 Part II 是一种效率低得多的编解码器。这又与上面的三个要点有关。
此外,对于 MP4 输出,您无法使用 FLAC 音频。您的音频将转换为 MP3 或 AAC,具体取决于您的 ffmpeg 支持哪种编码器。
提示:确保你总是明确地-c:a aac
使用或等指定您想要的编码器-c:a libmp3lame
以避免意外。
但唯一的解决方案是比较编码日志并寻找差异。如果您无法获得这些日志,则必须检查编码视频以寻找明显的线索,例如不同的编解码器或平均比特率。