使用FFmpeg和Python的PNG电影-rgb24 vs yuv420p

使用FFmpeg和Python的PNG电影-rgb24 vs yuv420p,python,video,ffmpeg,h.264,Python,Video,Ffmpeg,H.264,我编写了一个小Python程序,用FFmpeg命令行抓取一堆PNG并将它们渲染成电影。PNG被读入[X*Y*3]numpy阵列(忽略alpha通道),通过插值添加新帧,数据作为管道输入FFmpeg并保存为mp4 这些文件在Windows上的VLC中可以正常播放,但在Mac上的iMovie中不起作用。我认为这可能与大多数希望H264视频在YUV420P颜色空间中的程序有关,而我的电影不是这样。我已尝试将ffmpeg命令-pix_fmt从rgb24更改为yuv420p,但没有成功 相关的Python

我编写了一个小Python程序,用FFmpeg命令行抓取一堆PNG并将它们渲染成电影。PNG被读入[X*Y*3]numpy阵列(忽略alpha通道),通过插值添加新帧,数据作为管道输入FFmpeg并保存为mp4

这些文件在Windows上的VLC中可以正常播放,但在Mac上的iMovie中不起作用。我认为这可能与大多数希望H264视频在YUV420P颜色空间中的程序有关,而我的电影不是这样。我已尝试将ffmpeg命令
-pix_fmt
rgb24
更改为
yuv420p
,但没有成功

相关的Python代码附在下面

def init_vars(args):
    global log_file, file_names, command, num_int_frames, num_files, silent

    file_names = glob('./*.png')
    num_files = len(file_names)

    if args.log:
        log_file = 'bmmp.log'
    else:
        log_file = os.devnull

    silent = args.silent

    frames_per_second = args.fps
    wanted_movie_length = args.length
    movie_file_name = args.name + '.mp4'

    num_int_frames = round((frames_per_second * wanted_movie_length - 1) / (num_files - 1) - 1)

    if sys.platform == 'win32':
        ffmpeg_bin = 'ffmpeg.exe'
    else:
        ffmpeg_bin = 'ffmpeg'

    command = [ffmpeg_bin,
               '-y', # (optional) overwrite output file if it exists
               '-f', 'rawvideo',
               '-vcodec','rawvideo',
               '-s', '1280x720', # size of one frame
               '-pix_fmt', 'rgb24',
               '-r', str(frames_per_second), # frames per second
               '-i', '-', # The input comes from a pipe
               '-an', # Tells FFMPEG not to expect any audio
               movie_file_name]
干杯,
Eilam

假设Python中的参数序列表示构造命令的序列,则应在
'-i'、'-'之后插入
'-pix_fmt',yuv420p',
,输入来自管道。不要删除或更改较早的
pix\u fmt
,因为它指定了输入属性。

假设Python中的参数序列表示构造的命令的序列,则应在
'-i'、'-i'、'-35'之后插入
'-pix\u fmt'、
,输入来自管道。不要删除或更改较早的
pix_fmt
,因为它指定了输入属性。

这不是python问题,更多的是
ffmpeg
问题。尽管如此,为什么不在视频中使用
YUV
颜色空间,这毕竟是H.264最初尝试过的,但根据Mulvya下面的回答,我做错了。这不是python问题,更多的是
ffmpeg
问题。然而,为什么不在视频中使用
YUV
colorspace,这毕竟是H.264调整的原因,这也是我最初尝试的,但根据Mulvya下面的回答,我做错了。