首页 > 解决方案 > 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()

标签: pythonffmpeg

解决方案


您的原始输入是单个图像,但是您的输出是 2m 6s 长的视频流,速度t='00:02:06'为 23.976 fps。因此,这大约是 3020 个全高清帧,每个独立压缩,在 Profile HQ 使用 ProRes 编码器。ProRes 是一种夹层编解码器,适用于后期制作工作流程,其中优先事项是保持质量,而不是经济的文件大小。

如果音频输入已经是 24 位,那么它在 MOV 内的大小将大致相同,即使考虑到通道分割。


推荐阅读