我正在使用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= 8060万(视频结果不太清楚,音乐效果仍然不错)
MP4尺寸合适吗?
我正在使用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 = 8060万(视频结果不太清楚,音乐效果仍然不错)MP4尺寸合适吗?
Answers:
此方法使用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 Wiki:H.264。
Unrecognized option 'preset'. Error splitting the argument list: Option not found
ffmpeg命令以及该命令的完整控制台输出,然后在注释中提供链接。
仅凭您提供的信息,我就能想到。
让我们逐个进行:
由于仅在视频中添加了一张图像。我想知道是否有减小视频大小的方法,例如强制比特率/秒= 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:a复制 =复制输入音频流,因此我们不会重新编码。
-b:v =指定为(不精确)恒定的比特率。
-bufsize =它是计算平均比特率的时间间隔。根据-b:v中的指定,这意味着最低的损失质量更好的图像,但比特率更准确。
-s =视频输出的实际大小。
-framerate =我们希望输出使用的输入帧速率。
请注意,如果您仍然希望在某一时刻获得较小尺寸的视频,则必须牺牲质量才能实现这一点。其他实现方法包括使用有损压缩进行重新编码。
从您所说的内容来看,您提供的信息以及您正在尝试做的事情,我认为您的目标似乎是将专辑封面嵌入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(图像)。
如果此处没有适合您的要求,请提供更多信息。
-framerate用作输入选项并删除输出-r:否则,将使用默认的输入帧速率25,然后ffmpeg丢弃帧以实现-r 1。如果仅声明输入帧速率,则输出将使用相同的帧速率。