FFmpeg 输出视频文件比未压缩的输入音频文件小得多,使用选项保留原始音频质量

问题描述

我尝试通过 2 个步骤从多个图像文件一个音频文件创建视频幻灯片

  1. 从一系列图像文件创建一个临时视频文件
  2. 将音频文件添加到临时视频文件中,延迟 5 秒

音频文件为未压缩的立体声 wav 文件,编码为 44100 Hz,位深为 32 位,大小为 40.1 MB。为了保持输入音频文件的无损质量,我按照 Slideshow Wiki 使用了 -c:a aac -b:a 192k 选项。然而,最终输出的视频文件只有 4.49 MB。

如何让输出的视频文件比输入的音频文件小 10 倍左右,还能保持原来的无损质量?

我的代码

ffmpeg -f concat -i slide-sequence.txt -c:v libx264 -r 30 -filter_complex format=yuv420p temp.mp4
ffmpeg -i temp.mp4 -i audio.wav -af "adelay=5000|5000" -c:v copy -c:a aac -b:a 192k out.mp4

解决方法

如何让输出的视频文件比输入的音频文件小 10 倍左右,还能保持原来的无损质量?

它没有。 AAC 是一种有损格式。它使用编码方法使其听起来不错,尽管它是有损的。

有压缩和无损的格式,例如 FLAC。 YouTube 支持此功能,因此请使用:

ffmpeg -i temp.mp4 -i audio.wav -af "adelay=5000|5000" -c:v copy -c:a flac out.mkv

注意输出容器格式从 MP4 更改为 Matroska (.mkv)。 YouTube 支持 Matroska。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...