c# - 压缩 MP4 文件

标签 c# ffmpeg compression mp4

我使用 FFMPEG 将 JPG 文件转换为 MP4 文件。它们是我可以用来进一步减小此 MP4 文件大小的任何压缩技术/标志/设置/开关吗?我曾使用 gZIP 压缩此文件的字节,但它实际上生成了一个更大的文件。

我正在使用 C#

谢谢

最佳答案

MP4 是一种容器格式。根据您的 ffmpeg 配置,ffmpeg 将使用编码器 mpeg4对于 MPEG-4 Part 2 视频或 libx264用于 H.264 视频。
mpeg4
速率控制方法包括-qscale:v-b:v .这些是互斥的,因此您应该使用其中一个。
-qscale:v
设置一个恒定的量化器,但一般用户可以认为“恒定质量”。有效范围是 2-31,其中 2 是最高质量。

ffmpeg -i input -codec:v mpeg4 -codec:a libmp3lame -qscale:v 4 -qscale:a 5 out.mp4
-b:v
允许应用视频比特率。可用于针对特定的输出文件大小(文件大小 = 持续时间 x 比特率)。
ffmpeg -i input -codec:v mpeg4 -codec:a libmp3lame -b:v 512k -b:a 128k out.mp4

另见:
  • Xvid / DivX / MPEG-4 Part 2 Video Encoding Guide
  • MP3 Encoding Guide


  • libx264

    速率控制方法包括-crf , -b:v , 和 -qp ,但对于绝大多数用户-qp可以忽略。
    -crf
    恒定速率因子。将其视为 -qscale:v 的“智能”版本.范围是对数 0-51。 0 是无损(大文件),~18 大致是视觉无损,23 是默认值,51 是最差质量。
    ffmpeg -i input -codec:v libx264 -crf 23 -preset medium -codec:a libfdk_aac -vbr 5 output.mp4
    
    -b:v
    允许应用视频比特率。可用于针对特定的输出文件大小(文件大小 = 持续时间 x 比特率)。两遍示例:
    ffmpeg -y -i input -pass 1 -codec:v libx264 -preset medium -b:v 800k -an -f mp4 /dev/null
    ffmpeg -y -i input -pass 2 -codec:v libx264 -preset medium -b:v 800k -codec:a libfdk_aac -b:a 128k output.mp4
    

    另见:
  • x264 Encoding Guide
  • AAC Encoding Guide
  • CRF Guide (Constant Rate Factor in x264)
  • 关于c# - 压缩 MP4 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18468334/

    相关文章:

    c# - 在 MulticastDelegate 上调用 BeginInvoke?

    php - 排队直播视频

    python - 如何在 ffmpeg-python 中使用 'shortest' 参数

    c# - C# 中的接口(interface)与多重继承

    c# - 在查看模式设置为滚动时调整 FlowDocumentReader 滚动增量?

    c++ - 使用 FFMpeg 解码 H264 帧时遇到问题

    delphi - 使用 delphi 2009 在 vi​​sta 上创建目录/文件的 zip 文件的任何函数

    ffmpeg - 从根本上说,编解码器到底是什么?

    java - 有没有支持线压缩的 MongoDB 驱动程序?

    c# - Entity Framework DateTime.Now - 7 天 C#