ffmpeg mp3 + jpg = mp4如何使video变小

嗨,我使用ffmpeg将a.jpg添加到an.mp3以制作an.mp4

由于video中只添加了一个图像。 我想知道是否有办法减少video大小,例如强制比特率/秒= 1而不是28?

因为它是静止图像,所以不需要改变。 保持不动

更新:

a.jpg = 26.7K (image not so clear) a.mp3 = 64.6M (54 minutes) a.mp4 = 80.6M (video result is not so clear, music still good) 

这是cmd行:

 $ ffmpeg -loop 1 -i a.jpg -i a.mp3 -shortest -acodec copy a.mp4 

我用合理大小的可接受video质量的图像做了另一次测试:

 a.jpg = 151K a.mp3 = 5.1M (5 minutes) a.mp4 = 9.2M 

这是输出结果:

在此处输入图像描述

这是mp4合理的尺寸吗? 图像大小是否重要? 我应该将jpg调整为1080 * 720,并在ffmpeg中进行其他设置以输出为720p(那么ffmpeg设置是什么:)?

用于上传到YouTube

 ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 \ -c:v libx264 -preset veryslow -crf 0 -c:a copy -shortest output.mkv 
  • YouTube几乎可以接受任何内容,因此该命令会使用一些技巧来加快编码速度,缩小文件大小并保持高质量,因为YouTube会重新编码您提供的任何内容。

  • 在该示例中,使用低帧速率,其应该更快地编码。 您的播放器可能不喜欢它,但YouTube应该能够处理它。

  • 您可以使用libx265代替libx264,但由于此命令( -crf 0 )中使用了无损模式,因此对于很少或没有文件大小差异而且编码速度较慢且没有质量差异。

最适合任何玩家的兼容性

 ffmpeg -loop 1 -i image.png -i music.mp3 -vf "scale='min(1280,iw)':-2,format=yuv420p" \ -c:v libx264 -preset veryslow -profile:v main -c:a aac -shortest -movflags +faststart output.mp4 
  • 除了非常古老的设备之外,这应该发挥作用(更改-profile:v main to -profile:v baseline如果是这种情况)。

  • 编码时间会更长,文件大小将比上面的YouTube命令更大。

只提供您提供的信息,这是我能想到的。

让我们分块:

由于video中只添加了一个图像。 我想知道是否有办法减少video大小,例如强制比特率/秒= 1而不是28?

因为它是静止图像,所以不需要改变。 保持不动

你在谈论它的每秒帧数(fps)不是比特率。 而你在这个概念中是正确的。 只有一个静止图像1 fps不会有问题。

这是mp4合理的尺寸吗? 图像大小是否重要?

在这种情况下,图像尺寸不会有很大的重量,因为我们只处理一张静止图像。 如果它是一个高质量的video,那么这是一个不同的问题。

我应该将jpg调整为1080 * 720,并在ffmpeg中进行其他设置以输出为720p(那么ffmpeg设置是什么:)?

您所说的分辨率为1280×720。

我不会在这里看到-loop 1选项中的点,它只会减慢进程。 你使用-shortest导致文件有多个输入流吗? 如果没有,则没有理由使用它。 由于您使用了-acodec copy我将不得不假设您不想重新编码它。

对于720p 1fps的输出,无需重新编码且不接触比特率:

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 output.mp4

如果它具有多个输入流并且您希望ffmpeg在最短的流中完成编码,那么:

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 -shortest output.mp4

现在,如果你必须改变比特率(让我们说1024k作为例子);

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -b:v 1024k -bufsize 1024k -s 1280x720 output.mp4

请参阅: 限制输出比特率

-c:副本 =复制输入音频流,以便我们不重新编码。

-b:v =指定为(非精确)常量的比特率。

-bufsize =这是计算平均比特率的间隔。 意味着最低损失质量的图像,但根据-b:v中指定的更准确的比特率。

-s =video输出的实际大小。

-framerate =输出将使用的输入帧速率。

请注意,如果您仍希望在某一点上观看较小尺寸的video,则必须牺牲质量才能实现这一目标。 其他方法包括使用有损压缩重新编码。

根据你的说法,你提供的信息和你想要做的事情,我认为你的目标似乎是将专辑艺术嵌入到mp3中。 如果这是您的目标,那么这将更好地满足您的要求:

ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3

-map_metadata =从infile输出文件的ffmpeg元数据说明符。 在这种情况下( )全局元数据。

-map 0 =输入流1(音频)。

-map 1 =输入流2(图像)。

如果此处没有任何内容符合您的要