python - Python FFmpeg:单个静态图像加上音频输出海量文件大小
问题描述
我正在使用这个 Python 库以编程方式使用单个静态图像(.PNG - 3.05 MB - 1920 x 1080)和音轨(.WAV - pcm_s24le(24 位) - 48000 Hz - 34.6 MB)作为输入生成视频.
我正在使用这种技术来加快视频生成过程。
但是,最终文件大小output_video_final
为 2.33 GB。考虑到我的输入文件大小(.PNG - 3.05 MB / .WAV - 34.6 MB),为什么最终的 .MOV 输出如此之大?
这是我的代码:
'''
Generate .MOV using static image as input
'''
image = ffmpeg.input(input_image, loop='1', t='00:00:1', framerate='24000/1001', probesize='42M')
output = ffmpeg.output(image, output_video,
f='mov',
vcodec='prores_ks',
vprofile='3',
pix_fmt='yuv422p10le',
g='120',
video_track_timescale='24000',
movflags='use_metadata_tags',
timecode='00:00:00:00',
color_primaries='bt709',
color_trc='bt709',
colorspace='bt709',
qcomp='1',
preset='veryfast',
bsf='prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709',
vf='scale=in_range=full:in_color_matrix=bt709:out_range=full:out_color_matrix=bt709')
output.run()
'''
Generate .MOV using static image .MOV in previous output
and combine with audio input
'''
audio = ffmpeg.input(input_audio, filter_complex='channelsplit')
video = ffmpeg.input(output_video, t='00:02:06', stream_loop='126')
output = ffmpeg.output(video, audio, output_video_final,
vcodec='copy',
acodec='pcm_s24le',
audio_bitrate=bitrate)
output.run()
解决方案
您的原始输入是单个图像,但是您的输出是 2m 6s 长的视频流,速度t='00:02:06'
为 23.976 fps。因此,这大约是 3020 个全高清帧,每个独立压缩,在 Profile HQ 使用 ProRes 编码器。ProRes 是一种夹层编解码器,适用于后期制作工作流程,其中优先事项是保持质量,而不是经济的文件大小。
如果音频输入已经是 24 位,那么它在 MOV 内的大小将大致相同,即使考虑到通道分割。
推荐阅读
- typescript - 打字稿:只是几个接口之一
- azure - Azure Eventhub / 事件处理器主机:分区未按预期工作
- kubernetes - GKE Kubernetes Autoscaler - 最大集群 cpu,达到内存限制
- sql-server - 转换 bigint
- jquery - Chartjs 绘制折线图,其中线来回(按时间顺序)
- highcharts - HighCharts menuItem 值未更新
- elasticsearch - 在 elasticseach 中安装示例插件
- python - 从张量流中的矩阵行创建诊断矩阵
- r - 使用 geom_curve() 制作没有 x 和 xend 参数的箭头
- javascript - 避免 map 函数中的无序列