用于上传至 YouTube

用于上传至 YouTube

我正在使用 ffmpeg 将 JPG 添加到 MP4 以制作 MP4。

由于制作视频只有一张图片,我想知道是否有办法减小视频尺寸?

命令:

$ ffmpeg -loop 1 -i image.jpg -i audio.mp3 -shortest -c:a copy output.mp4

结果:

  • image.jpg= 26.7K(图像不太清晰)
  • audio.mp3= 64.6M(54 分钟)
  • output.mp4= 80.6M(视频效果不太清晰,音乐仍然不错)

对于 MP4 来说这个尺寸合理吗?

答案1

用于上传至 YouTube

H.264:最小文件

此方法使用 libx264 编码 H.264 视频。它比下面的流复制方法慢,但可能会输出较小的文件大小。

ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 \
-c:v libx264 -preset veryslow -crf 0 -c:a copy -shortest output.mkv

流复制:最快的过程

这种方法只是流复制(不编码)将图像放入 MKV 容器中。它非常快,但如果大小很重要,则上述方法可能会生成较小的文件。

ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 -c copy -shortest output.mkv
  • YouTube 几乎可以接受任何内容,因此这些命令使用了一些技巧来加快编码速度,或减小文件大小,并保持高质量,因为 YouTube 会重新编码您提供的任何内容。您的播放器可能不会喜欢它,但 YouTube 会喜欢。

  • 在这些示例中,使用了非常低的帧速率,其处理速度应该比默认的 25 fps 更快。


与任何播放器最广泛的兼容性

ffmpeg -loop 1 -i image.png -i music.mp3 -vf "scale='min(1280,iw)':-2,format=yuv420p" \
-c:v libx264 -preset medium -profile:v main -c:a aac -shortest -movflags +faststart output.mp4
  • 这应该可以在除了非常古老的设备之外的任何设备上播放(如果是这种情况,请更改-profile:v main为)。-profile:v baseline

  • 如果您的音频输入已经是 AAC,则更改为,-c:a aac-c:a copy避免不必要的重新编码。

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

  • FFmpeg 维基:H.264了解更多信息。

答案2

仅根据您提供的信息,这就是我能想到的。

让我们逐个来看:

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

因为它是静止图像,所以无需改变。只需保持静止。

你在这里谈论的是每秒帧数 (fps)不是比特率。你的想法是对的。只有一张静止图像 1 fps 不会有问题。

对于 mp4 来说,这个尺寸合理吗?图像尺寸很重要吗?

在这种情况下,图像大小不会有太大影响,因为我们只处理一张静态图片。如果是高质量视频,那么问题就大了。

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

您所说的分辨率是1280x720。

我看不出这个-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= 指定为(不精确地)恒定的比特率。

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

-s= 视频输出的实际尺寸。

-帧率= 我们希望输出使用的输入帧速率。

请注意,如果您仍然想要更小尺寸的视频,则必须牺牲质量才能实现这一目标。其他方法包括使用有损压缩重新编码。

从您所说的内容、您提供的信息以及您要执行的操作来看,我认为您的目标是将专辑封面嵌入 mp3。如果这是您的目标,那么这将更适合您的要求:

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

-map_元数据= ffmpeg 元数据说明符,用于从 infile 输出文件。在本例中() 全局元数据。

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

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

如果这里没有任何内容符合您的要求,请提供更多信息。

相关内容