解决MoviePy保存视频时的视频质量降低问题
编辑
70
2024-08-14
1. 起源
最近在折腾自动化剪辑视频的时候,发现我原视频视频质量看起来还ok,至少肉眼看过去还好,但是经过moviepy处理后保存下来的视频却质量降低了很多,会有很多噪点的产生。其实最直观的就是,传进去的视频大小是100MB,出来的视频就只有不到10MB。
2. 解决方案
moviepy导出时的编码需要指定,且文件后缀也有一定要求。
先简单阐述下:
不同的编码器支持不同的容器格式(也称为封装格式)。以下是一些常见的编码器及其通常支持的容器格式:
H.264 无损模式 :通常使用
.mp4
或.mkv
容器。H.265/HEVC 无损模式 :通常使用
.mp4
或.mkv
容器。ProRes:通常使用
.mov
容器。DNxHD/DNxHR:通常使用
.mov
容器。
代码附上:
H.264 无损模式(.mp4 容器)
video_clip.write_videofile(
output_file + ".mp4",
audio_codec="aac",
temp_audiofile_path=output_dir,
threads=params.n_threads or 2,
logger=None,
codec="libx264",
ffmpeg_params=["-qp", "0"], # 无损模式
fps=video_clip.fps
)
H.264 无损模式(.mkv 容器)
video_clip.write_videofile(
output_file + ".mkv",
audio_codec="aac",
temp_audiofile_path=output_dir,
threads=params.n_threads or 2,
logger=None,
codec="libx264",
ffmpeg_params=["-qp", "0"], # 无损模式
fps=video_clip.fps
)
H.265/HEVC 无损模式(.mp4 容器)
video_clip.write_videofile(
output_file + ".mp4",
audio_codec="aac",
temp_audiofile_path=output_dir,
threads=params.n_threads or 2,
logger=None,
codec="libx265",
ffmpeg_params=["-qp", "0"], # 无损模式
fps=video_clip.fps
)
H.265/HEVC 无损模式(.mkv 容器)
video_clip.write_videofile(
output_file + ".mkv",
audio_codec="aac",
temp_audiofile_path=output_dir,
threads=params.n_threads or 2,
logger=None,
codec="libx265",
ffmpeg_params=["-qp", "0"], # 无损模式
fps=video_clip.fps
)
ProRes(.mov 容器)
video_clip.write_videofile(
output_file + ".mov",
audio_codec="aac",
temp_audiofile_path=output_dir,
threads=params.n_threads or 2,
logger=None,
codec="prores",
fps=video_clip.fps
)
请根据自己的需求选择合适的编码器和容器格式。当然也可以考虑使用 .mp4
容器,因为它是常见的格式,并且大多数编码器都支持。(不过偶尔mp4不太好用,moviepy没法直接保存
- 0
- 0
-
分享