2016-02-07 26 views
0

我寫了一個小小的Python程序來抓取一堆PNG,並使用FFmpeg命令行將它們渲染爲影片。將PNG讀入[X * Y * 3] numpy數組(忽略alpha通道),通過插值添加新幀,並將數據作爲管道饋送到FFmpeg並保存爲mp4。來自使用FFmpeg和Python的PNG的電影 - rgb24 vs yuv420p

這些文件在Windows上的VLC中可以正常播放,但不能在Mac上的iMovie中使用。我認爲這可能與大多數希望H264視頻處於YUV420P色彩空間的程序有關,而我的電影則不是。我已經嘗試將ffmpeg命令-pix_fmtrgb24更改爲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

+1

這不是一個python問題和更多'ffmpeg'問題。儘管如此,不使用YUV色彩空間的原因是什麼,這是H.264調整後的結果 –

+0

這就是我最初嘗試的,但根據Mulvya的回答,我做錯了。 –

回答

2

假設在Python參數序列表示構造的命令的序列,應該'-pix_fmt', 'yuv420p','-i', '-', # The input comes from a pipe插入。由於指定了輸入屬性,因此不要刪除或更改早期的pix_fmt

+0

這解決了這個問題。謝謝! –