Asme Just Asked: 2018-04-23 20:53:24 +0800 CST2018-04-23 20:53:24 +0800 CST 2018-04-23 20:53:24 +0800 CST 通过设置最终大小转换视频 772 有没有办法使用 ffmpeg(或任何其他基于 CLI 的视频转换器)设置视频转换的最大最终大小? 就像我有一个 100mb 的视频并想将其转换为具有最高质量的 10mb 视频一样,考虑到最终格式并不重要。 ffmpeg video-conversion 2 个回答 Voted Best Answer andrew.46 2018-04-26T01:45:16+08:002018-04-26T01:45:16+08:00 从 100mb 到 10mb 是稍微不切实际的90% 大小下降,但我将举一个创建 H.264 视频减少到 50mb 的示例,这是一个更合理的大小减少 50% 以及使用 HEVC 减少到 40mb。 我正在使用以下示例文件: wget https://web.archive.org/web/20190412004321/http://dl3.h265files.com/TearsOfSteel_720p_h265.mkv 您可以使用此示例文件来确认我给出的以下结果,也许您自己可以进行进一步的实验。MediaInfo 显示此下载文件的以下内容: mediainfo \ --Inform="General;Duration=%Duration/String3%\nFile size=%FileSize/String1%" \ TearsOfSteel_720p_h265.mkv Duration=00:12:14.058 <----- File size=101 MiB <----- 箭当然是我自己的!那么您可能有 2 个非常好的选择: 重新编码为 H.264 重新编码为 HEVC 1. 重新编码为 H.264 (50mb) H.264 现在被广泛接受,将是您输出视频文件的绝佳选择。计算所需 50mb 的输出比特率的公式为: (50 MiB * 8192 [converts MiB to kBit]) / 734 seconds = ~558 kBit/s total bitrate 558 - 128 kBit/s (desired audio bitrate) = 430 kBit/s video bitrate 为此,请使用以下 FFmpeg 2 pass 命令: ffmpeg -y -i TearsOfSteel_720p_h265.mkv \ -c:v libx264 -b:v 430k -pass 1 \ -c:a libmp3lame -b:a 128k -f mp4 /dev/null && \ ffmpeg -i TearsOfSteel_720p_h265.mkv \ -c:v libx264 -b:v 430k -pass 2 \ -c:a libmp3lame -b:a 128k TearsOfSteel_smaller.mp4 生成的文件大小为 49.4MiB,具有相当合理但并不令人惊叹的观看质量。实际上,文件大小减少了 50% 并且视频比特率大幅下降,这非常好! 2. 重新编码为 HEVC (40mb) 另一种选择(如 emk2203 所建议的)是用较低的比特率重新编码现有的 HEVC 流,这次的目标是 40mb,因为 HEVC 声称在较低的比特率下质量更好。 这次的公式是: (40 MiB * 8192 [converts MiB to kBit]) / 734 seconds = ~446 kBit/s total bitrate 446 - 128 kBit/s (desired audio bitrate) = 318 kBit/s video bitrate FFmpeg 2 pass 命令行是: ffmpeg -y -i TearsOfSteel_720p_h265.mkv \ -c:v libx265 -x265-params pass=1 -b:v 318k \ -c:a libmp3lame -b:a 128k -f mp4 /dev/null && \ ffmpeg -i TearsOfSteel_720p_h265.mkv \ -c:v libx265 -x265-params pass=2 -b:v 318k \ -c:a libmp3lame -b:a 128k TearsOfSteel_smaller.mp4 这提供了一个质量相当合理的 40mb 文件。 综上所述: 从这些示例中,您可以通过减少公式中所需的 MiB 并观察随后的查看质量来进一步实验。玩得开心!! 参考: H.264 视频编码指南:2 Pass Encoding FFmpeg trac 文章,提供有关 H.264 的 2 pass 编码的明确且易于遵循的信息。 FFmpeg 和 H.265 编码指南FFmpeg trac gudelines 用于使用 x265 包装器编码到 HEVC。 FFmpeg 和 VP9 编码指南另一种选择是编码为 VP9,所有详细信息都在这个 FFmpeg 跟踪页面上。再次,您在 2 遍编码部分之后...... thomasrutter 2018-04-23T21:09:57+08:002018-04-23T21:09:57+08:00 是的。选择一个视频编解码器(x264 是一个很好的通用编解码器)并选择分辨率,将大多数设置保留为默认值,但使用设置的平均比特率进行 2 次转换。 视频压缩快速课程:视频的复杂性在整个视频中发生变化,因此如果您在整个过程中压缩到相同的视觉质量水平,实际比特率会上下波动。如果您压缩到固定的比特率,那么复杂度高的比特的质量会很差,因为比特率太低,和/或使用的比特率对于低复杂度的部分来说太高了。因此,您可以尽可能让它以恒定的质量为目标,并让比特率尽可能地波动。但是,如果压缩器针对特定的文件大小,它不知道视频复杂度在它尚未转换的部分中是上升还是下降,所以这就是为什么人们在瞄准时使用 2 pass 转换特定的文件大小。 您需要将输出指定为比特率(音频和视频,加上容器有轻微的开销),因此您需要一个计算器来将文件大小和持续时间转换为比特率。
从 100mb 到 10mb 是稍微不切实际的90% 大小下降,但我将举一个创建 H.264 视频减少到 50mb 的示例,这是一个更合理的大小减少 50% 以及使用 HEVC 减少到 40mb。
我正在使用以下示例文件:
您可以使用此示例文件来确认我给出的以下结果,也许您自己可以进行进一步的实验。MediaInfo 显示此下载文件的以下内容:
箭当然是我自己的!那么您可能有 2 个非常好的选择:
1. 重新编码为 H.264 (50mb)
H.264 现在被广泛接受,将是您输出视频文件的绝佳选择。计算所需 50mb 的输出比特率的公式为:
为此,请使用以下 FFmpeg 2 pass 命令:
生成的文件大小为 49.4MiB,具有相当合理但并不令人惊叹的观看质量。实际上,文件大小减少了 50% 并且视频比特率大幅下降,这非常好!
2. 重新编码为 HEVC (40mb)
另一种选择(如 emk2203 所建议的)是用较低的比特率重新编码现有的 HEVC 流,这次的目标是 40mb,因为 HEVC 声称在较低的比特率下质量更好。
这次的公式是:
FFmpeg 2 pass 命令行是:
这提供了一个质量相当合理的 40mb 文件。
综上所述:
从这些示例中,您可以通过减少公式中所需的 MiB 并观察随后的查看质量来进一步实验。玩得开心!!
参考:
是的。选择一个视频编解码器(x264 是一个很好的通用编解码器)并选择分辨率,将大多数设置保留为默认值,但使用设置的平均比特率进行 2 次转换。
视频压缩快速课程:视频的复杂性在整个视频中发生变化,因此如果您在整个过程中压缩到相同的视觉质量水平,实际比特率会上下波动。如果您压缩到固定的比特率,那么复杂度高的比特的质量会很差,因为比特率太低,和/或使用的比特率对于低复杂度的部分来说太高了。因此,您可以尽可能让它以恒定的质量为目标,并让比特率尽可能地波动。但是,如果压缩器针对特定的文件大小,它不知道视频复杂度在它尚未转换的部分中是上升还是下降,所以这就是为什么人们在瞄准时使用 2 pass 转换特定的文件大小。
您需要将输出指定为比特率(音频和视频,加上容器有轻微的开销),因此您需要一个计算器来将文件大小和持续时间转换为比特率。