ffmpeg создает мерцающее видео для одной и той же последовательности изображений, что не так?

#python #numpy #ffmpeg #python-imaging-library

Вопрос:

Это мой пример кода ,каждый отдельный кадр одинаков , выходной файл-статическое видео.

 import numpy as np
import subprocess

ffmpeg_process = subprocess.Popen(
    ["ffmpeg", '-y', '-f', 'image2pipe', '-vcodec', 'mjpeg', '-s', '300x300', '-i', '-', '-an', '-r', '24', '-pix_fmt',
     'gray', 'video.mp4'],
    stdin=subprocess.PIPE)
gray = np.identity(300, np.uint8) * 255
for i in range(100):
    import PIL.Image

    PIL.Image.fromarray(gray).save(ffmpeg_process.stdin, "JPEG")
    ffmpeg_process.stdin.flush()
ffmpeg_process.stdin.close()
ffmpeg_process.communicate()
 

Но когда я пытаюсь передать изображение в формате rawvideo вместо «jpeg», на выходе получается мерцающее видео .

 import numpy as np
import subprocess

ffmpeg_process = subprocess.Popen(
    ["ffmpeg", '-y', '-f', 'rawvideo', '-s', '300x300', '-i', '-', '-an', '-r', '24', '-pix_fmt', 'gray', 'video.mp4'],
    stdin=subprocess.PIPE)
gray = np.identity(300, np.uint8) * 255
for i in range(100):
    ffmpeg_process.stdin.write(gray.tobytes())
    ffmpeg_process.stdin.flush()
ffmpeg_process.stdin.close()
ffmpeg_process.communicate()
 

Что не так с моим кодом ?

Комментарии:

1. Вы должны указать правильный формат пикселей для ввода, используя -pixel format помещенный ранее -i .

2. @Gyan Я пробовал -pixel_format и-pxi_fmt ,оба работали ,в чем разница ?