deg*_*ate 5 h.264 ffmpeg video-encoding
我使用以下代码将 10mbps 高质量 1280x720 H264 mp4 转码为较低质量的 H264 mp4,并在视频上添加我们的徽标水印。
ffmpeg.exe -i test.mp4 -i watermark.png -filter_complex overlay="(main_w)-(overlay_w):(main_h)-(overlay_h)" -c:v libx264 -profile:v main -preset Slow -b: v 400k -r 30 -c:a libvo_aacenc -b:a 128k -s 1280x720 -movflags faststart -f mp4 "test-done.mp4"
这些设置效果很好,经过大量调整以获得此代码,它可以生成清晰的视频,用于高动作、静态、许多不同的颜色等。
问题在于,在视频的前几秒钟,流非常阻塞。然后,大约 3-5 秒后,流会自行“纠正”,视频变得清晰。通过将预设更改为“veryslow”来减慢渲染时间只能略微改善前几秒的速度,但会显着增加渲染时间。
我怎样才能告诉 ffmpeg 更加关注视频的开头?我是否必须采用 2 遍编码?我不想将渲染时间增加近一倍,因为只有视频的前几秒有这个问题。有人可以修改我的代码以在文件开头提供更好的编码吗?
作为参考,原始的 10mbps mp4 是由 Premiere 5.0 编码的,并且在开始时没有块效应。这是我仅在转码后使用 ffmpeg 亲眼目睹的情况。
感谢@LordNeckbeard 提供的解决方案。看来 ffmpeg 使用 x264 编码-crf
而不是-v:b
.
因此-crf 26
完美地消除了视频编码过程开始时的块效应。
我的最终代码现在是:
ffmpeg.exe -i test.mp4 -c:v libx264 -crf 26 -c:a libvo_aacenc -movflags faststart -f mp4 "test-done.mp4"
Run Code Online (Sandbox Code Playgroud)