FFMPEG / тензорный поток деформации .mp4 без видимой картины корреляции - PullRequest
0 голосов
/ 25 мая 2018

Функция, выполняющая обработку, находится здесь:

def ffwd_video(path_in, path_out, checkpoint_dir, device_t='/gpu:0', batch_size=4):
video_clip = VideoFileClip(path_in, audio=False)
video_writer = ffmpeg_writer.FFMPEG_VideoWriter(path_out, video_clip.size, video_clip.fps, codec="libx264",
                                                preset="slow", bitrate="3000k",
                                                audiofile=path_in, def ffwd_video(path_in, path_out, checkpoint_dir, device_t='/gpu:0', batch_size=2):threads=None,
                                                ffmpeg_params=None)

g = tf.Graph()
soft_config = tf.ConfigProto(allow_soft_placement=True)
soft_config.gpu_options.allow_growth = True
with g.as_default(), g.device(device_t), \
        tf.Session(config=soft_config) as sess:

    batch_shape = (batch_size, video_clip.size[1], video_clip.size[0], 3)
    print(batch_shape)
    img_placeholder = tf.placeholder(tf.float32, shape=batch_shape,
                                     name='img_placeholder')

    preds = transform.net(img_placeholder)
    print(preds)
    saver = tf.train.Saver()
    if os.path.isdir(checkpoint_dir):
        ckpt = tf.train.get_checkpoint_state(checkpoint_dir)
        if ckpt and ckpt.model_checkpoint_path:
            saver.restore(sess, ckpt.model_checkpoint_path)
        else:
            raise Exception("No checkpoint found...")
    else:
        saver.restore(sess, checkpoint_dir)

    X = np.zeros(batch_shape, dtype=np.float32)

    def style_and_write(count):
        for i in range(count, batch_size):
            X[i] = X[count]  # Use last frame to fill X
        _preds = sess.run(preds, feed_dict={img_placeholder: X})
        for i in range(0, count):
            video_writer.write_frame(np.clip(_preds[i], 0, 255).astype(np.uint8))

    frame_count = 0  # The frame count that written to X
    for frame in video_clip.iter_frames():
        X[frame_count] = frame
        frame_count += 1
        if frame_count == batch_size:
            style_and_write(frame_count)
            frame_count = 0

    if frame_count != 0:
        style_and_write(frame_count)

    video_writer.close()

Я не ожидаю, что это будет повторяемый образец, так как он требует гигабайт моделей / контрольных точек / и т. Д.сделать это.

В любом случае, я конвертирую .gif в .mp4, используя эту строку кода:

os.system('echo "y"| ffmpeg -i temp.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" temp.mp4')

и когда я запускаю последующий .mp4 через функцию рендеринга видеоэто иногда случается:

оригинал: https://i.imgur.com/WrBa6yw.gifv

результат: https://giphy.com/gifs/dream-bot-BzqB8XILJuVTJcgJnn

Это будет происходить в определенные .mp4 в 100% случаев и в другие,0% времениЭто либо случается с клипом, либо не происходит с этим клипом.Это не тот случай, когда один клип иногда имеет эту проблему.Если это хорошо, это всегда хорошо, но если это плохо, этот клип никогда не сработает.

После этих выходных данных от того, когда обрабатываются клипы:

good gifs
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 728x728, q=-1--1, 30 fps, 15360 tbn, 30 tbc
frame=  450 fps= 78 q=-1.0 Lsize=    7570kB time=00:00:14.93 bitrate=4152.6kbits/s

Stream #0:0: Video: gif, bgra, 800x450, 25 fps, 25 tbr, 100 tbn, 100 tbc
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 728x408, q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc
frame=  360 fps=198 q=-1.0 Lsize=    2568kB time=00:00:14.93 bitrate=1408.8kbits/s 

Stream #0:0: Video: gif, bgra, 728x408, 23.92 fps, 23.98 tbr, 100 tbn, 100 tbc
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 728x408, q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc
frame=  360 fps=198 q=-1.0 Lsize=    2568kB time=00:00:14.93 bitrate=1408.8kbits/s 

bad gifs
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 800x450, q=-1--1, 25 fps, 12800 tbn, 25 tbc
frame=  150 fps= 87 q=-1.0 Lsize=    1840kB time=00:00:05.92 bitrate=2545.8kbits/s

Stream #0:0: Video: gif, bgra, 378x275, 25 fps, 25 tbr, 100 tbn, 100 tbc
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 378x274, q=-1--1, 25 fps, 12800 tbn, 25 tbc
frame=  115 fps=0.0 q=-1.0 Lsize=     253kB time=00:00:04.52 bitrate= 459.4kbits/s

Я заметил, что значение frame= точно в 15 раз больше, чем значение .gif fps, хотя для плохих.гиф, это не так.Я считаю, что это причина, но не знаю, как изменить эти значения.Кто-нибудь знает, как я могу обработать / преобразовать GIF в .mp4 так, чтобы frame= значение в 15 раз GIF FPS?

...