AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1027340
Accepted
Asme Just
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 2 个回答
  • 9866 Views

2 个回答

  • Voted
  1. 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 个非常好的选择:

    1. 重新编码为 H.264
    2. 重新编码为 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 遍编码部分之后......
    • 11
  2. thomasrutter
    2018-04-23T21:09:57+08:002018-04-23T21:09:57+08:00

    是的。选择一个视频编解码器(x264 是一个很好的通用编解码器)并选择分辨率,将大多数设置保留为默认值,但使用设置的平均比特率进行 2 次转换。

    视频压缩快速课程:视频的复杂性在整个视频中发生变化,因此如果您在整个过程中压缩到相同的视觉质量水平,实际比特率会上下波动。如果您压缩到固定的比特率,那么复杂度高的比特的质量会很差,因为比特率太低,和/或使用的比特率对于低复杂度的部分来说太高了。因此,您可以尽可能让它以恒定的质量为目标,并让比特率尽可能地波动。但是,如果压缩器针对特定的文件大小,它不知道视频复杂度在它尚未转换的部分中是上升还是下降,所以这就是为什么人们在瞄准时使用 2 pass 转换特定的文件大小。

    您需要将输出指定为比特率(音频和视频,加上容器有轻微的开销),因此您需要一个计算器来将文件大小和持续时间转换为比特率。

    • 0

相关问题

  • 如何将 ogv 文件转换为 mp4?

  • 将音频文件添加到 mkv 视频

  • ProRes 编码和解码?

  • 我怎样才能让 ffserver 工作?

  • 如何在不自己重新编译 ffmpeg 的情况下使用 ffmpeg 的“-vf”/“-vfilters”选项?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve