MoviePy使用H264编码器输出损坏视频文件的问题求助
解决方案
1. 强制使用通用色彩采样格式
从视频信息看,当前输出的是h264 high 4:4:4格式,而绝大多数播放设备和社交平台(包括Telegram)仅支持兼容性更强的yuv420p(4:2:0)格式。修改编码参数,添加ffmpeg_params强制指定色彩格式:
preset_video = { "fps": 30, "preset": "fast", "codec": "h264_nvenc", "threads": 4, "bitrate": '9000k', "audio_codec": 'aac', "audio_bitrate": '64k', "audio_fps": 22050, "verbose": True, "logger": 'bar', "ffmpeg_params": ["-pix_fmt", "yuv420p"] # 强制4:2:0色彩格式 }
2. 调整关键帧间隔解决拖拽卡顿
关键帧间隔过大是导致桌面播放无法平滑回退的核心原因,添加参数设置合理的关键帧间隔(建议为帧率的2倍,30fps对应60帧):
"ffmpeg_params": ["-pix_fmt", "yuv420p", "-g", "60"] # -g指定关键帧间隔为60帧
3. 省略中间文件二次读取步骤
你当前的流程中先写入s+e的中间文件再读取拼接,这一步完全可以跳过,直接在内存中完成全量拼接,减少编码次数和兼容性风险:
t = VideoFileClip(a.title.video) s = VideoFileClip(a.story.video) e = VideoFileClip(a.end.video) # 直接拼接所有片段,无需生成中间文件 full = concatenate_videoclips([t, s, e]) full.write_videofile(full_path, **preset_video)
4. 验证最终编码结果
生成视频后,用FFmpeg命令确认格式是否符合要求:
ffmpeg -i full_video.mp4
输出中需显示Video: h264 (High) (avc1 / 0x31637661), yuv420p,而非之前的gbrp 4:4:4格式。
内容的提问来源于stack exchange,提问作者Сергей Попков
相关产品推荐
相关产品推荐

