ffmpeg视频转码

Posted 温小皮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg视频转码相关的知识,希望对你有一定的参考价值。

h264和avc1差别

h264和avc1差别很小,都属于mp4的编码格式,有时甚至是通用的。区别仅在于:

  • MP4的视频H264封装有2种格式:h264和avc1,对于这个细节,很容易被忽略。笔者也是在改编LIVE555流媒体时,增加mp4文件类型支持时遇到了该问题。
  1. 首先,从原理上了解一下这2种格式的区别:
    AVC1 描述:H.264 bitstream without start codes.一般通过ffmpeg转码生成的视频,是不带起始码0×00000001的。
    H264 描述:H.264 bitstream with start codes.一般对于一下HDVD等电影的压制格式,是带有起始码0×00000001的。
  2. 其次,通过VLC播放器,可以查看到具体的格式。打开视频后,通过菜单【工具】/【编解码信息】可以查看到【编解码器】具体格式,举例如下,编解码器信息:
    编码: H264 – MPEG-4 AVC (part 10) (avc1)
    编码: H264 – MPEG-4 AVC (part 10) (h264)

.MP4和.mp4

  • 后缀为.MP4和.mp4是不同的。虽然它们表示相同的文件类型,但操作系统在处理文件时通常将它们视为不同的文件类型。因此,当你在文件系统中使用这些文件时,大小写是有区别的。

  • 在某些操作系统中,如Windows,文件扩展名是不区分大小写的。在这种情况下,.MP4和.mp4被视为相同的文件类型。但是,在其他操作系统中,如Linux和MacOS,文件扩展名是区分大小写的,因此.MP4和.mp4被视为不同的文件类型。

h264转avc1(相当于MP4转MP4)

import ffmpeg

pathVdMp4 = "   "
pathVdMp4_temp = "   "
(
  ffmpeg
  .input(pathVdMp4) # 读取输入文件
  .filter(\'fps\', fps=25, round=\'up\') # 设置输出视频的帧率为25fps
  .filter(\'scale\', force_original_aspect_ratio=\'decrease\', width=-2, height=-2) # 确保输出视频的分辨率与输入视频相同
  .output(pathVdMp4_temp, vcodec=\'libx264\', pix_fmt=\'yuv420p\') # 设置输出视频编码和像素格式
  .overwrite_output()
  .run()
)
  • vcodec=\'libx264\'表示使用 libx264 编码器
  • fps=25转码后帧率为25帧/s
  • force_original_aspect_ratio=\'decrease\', width=-2, height=-2 保持横纵分辨率不变。参数force_original_aspect_ratio=\'decrease\'告诉过滤器要缩小原始比例,而width=-2和height=-2告诉过滤器保持视频的宽高比,并将宽度和高度调整为与输入视频相同的分辨率。通过此方法进行缩放后,输出视频的尺寸始终与输入视频相同。
  • pix_fmt=\'yuv420p\'表示输出像素格式为 yuv420p
在这个例子中,我们使用ffmpeg库来读取输入视频文件,并使用filter方法来应用FFmpeg过滤器。
我们首先使用fps过滤器将输出视频的帧率设置为25 fps,并使用scale过滤器确保输出视频的分辨率与输入视频的分辨率相同。
最后,我们使用output方法将转换后的视频写入输出文件,并使用overwrite_output方法告诉FFmpeg在目标文件已存在时覆盖它。

输出像素格式

  • 输出像素格式指的是输出视频文件中每一个像素的编码格式。不同的像素格式会对视频的画质和文件大小产生影响。常见的像素格式包括YUV、RGB、RGBA等,其中YUV通常用于视频编码,RGB和RGBA则用于静态图像编码。在上述代码中,使用了像素格式为yuv420p,这是一种常用的视频压缩技术,可以在保证画质的同时减小文件大小。

如何设置ffmpeg使得转码最快

参考技术A 用x264ffmpeg可用的参数太少了,还要看情况qp + ultrafast + psy 0

以上是关于ffmpeg视频转码的主要内容,如果未能解决你的问题,请参考以下文章

视频转码:linux下ffmpeg 实现视频转码

linux 上java调用ffmpeg转码只有几秒长

ffmpeg转码视频为mp4

FFmpeg 音视频转码详细流程

使用GPU硬件加速FFmpeg视频转码

FFMPEG进阶系列03-ffmpeg转码专题(中)x264参数详解