更好的答案,加上解释,并结合了来自slhck和Mulvya的聪明建议,去除了不必要的参数。
ffmpeg -i video.mp4 -i cover.jpg -acodec libmp3lame -b:a 256k -c:v copy -map 0:a:0 -map 1:v:0 output.mp3
ffmpeg
音频/视频处理工具:OP已选择的工具,特别适合此工作。
-i video.mp4
第一个输入文件:包含我们要提取的音频的视频。
-i cover.jpg
第二个输入文件,当我们播放结果音频文件时要显示的图像。
-acodec libmp3lame
我们要使用LAME编码器创建一个.mp3文件。
-b:a 256k
这会将音频轨道的比特率设置为恒定的256Kb / s。一个更明智的选择是使用可变的比特率进行编码,并指定质量参数:-q:a 0
要求最高的质量,而-q:a 4
通常是在感知的音频质量和比特率(以及文件大小)之间做出很好的折衷。
-c:v copy
这表示视频流(.jpg图像)将不会重新编码,而必须照原样复制。当重新编码为有损格式时,这有助于避免不必要的处理和潜在的质量损失。在我们的情况下,如果没有此参数,则图像将从.jpg解码并编码为.png,这显然是默认情况下选择的本机格式。由于.png是丢失文件,因此这并不代表质量下降,但由于.jpg(有损耗)通常提供更好的压缩率,因此通常会导致文件大小增加。
-map 0:a:0
这将从第一个(0:
)输入文件中选择要使用的流:它必须是它包含的第一个(:0
)音频(a
)流。
-map 1:v:0
这将从第二()输入文件中选择第一(:0
)视频(v
)流1:
。
output.mp3
明智地选择了此参数的名称,以便已经建议它必须是要为包含我们要创建的合并图像的输出音频(.mp3)文件提供的名称。
原始答案
通过将婚礼中的视频(.mp4)和图片(.jpg)放在一起,可以创建带有静态图像的音频(.mp3)文件:
ffmpeg -i video.mp4 -i cover.jpg -acodec libmp3lame -metadata title=video -b:a 256k -map_metadata 0 -map 0:1 -map 1 output.mp3
有关使用来选择输入流的信息,请参见ffmpeg 文档-map
。
我首先简单地运行了命令,-map 0 -map 1
并得到了以下信息:
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
Stream #1:0 -> #0:2 (mjpeg (native) -> png (native))
因此,我知道我想要1
从索引号为0
的文件(即视频文件)中流(AAC音频)。因此,必须使用明确选择它-map 0:1 -map 1
。