конвертировать последовательность изображений ppm в avi video

Я хочу преобразовать последовательность изображений ppm в avi video (или другой возможный формат видео, приемлемый для OpenCV). Сначала я преобразовал изображения ppm без снижения качества в jpg:

$ for f in *ppm ; do convert -quality 100 $f `basename $f ppm`jpg; done

, затем Я использовал следующую команду для преобразования в avi:

$ ffmpeg -i CS585Bats-FalseColor_frame*.jpg -vcodec mpeg4 test.avi

Но я получил следующую ошибку:

FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers built on Aug 2 2016 19:05:32 with clang 7.3.0 (clang-703.0.31) configuration: --enable-libmp3lame --enable-libfaac --enable-gpl --enable-nonfree --enable-shared --disable-mmx --arch=x86_64 --cpu=core2 libavutil 50.36. 0 / 50.36. 0 libavcore 0.16. 1 / 0.16. 1 libavcodec 52.108. 0 / 52.108. 0 libavformat 52.93. 0 / 52.93. 0 libavdevice 52. 2. 3 / 52. 2. 3 libavfilter 1.74. 0 / 1.74. 0 libswscale 0.12. 0 / 0.12. 0 Input #0, image2, from 'CS585Bats-FalseColor_frame000000750.jpg': Duration: 00:00:00.04, start: 0.000000, bitrate: N/A Stream #0.0: Video: mjpeg, yuvj444p, 1024x1024 [PAR 1:1 DAR 1:1], 25 tbr, 25 tbn, 25 tbc ffmpeg(11831,0x7fffa5dc6340) malloc: *** error for object 0x100000001: pointer being realloc'd was not allocated *** set a breakpoint in malloc_error_break to debug Abort trap: 6

Тогда я решил использовать этот другой метод, но все равно получить ошибку:

$ convert -delay 6 -quality 100 CS585Bats-FalseColor_frame000000*ppm movie.mpg convert: delegate failed `'ffmpeg' -nostdin -v -1 -i '%M%%d.jpg' '%u.%m' 2> '%u'' @ error/delegate.c/InvokeDelegate/1919.

ppm имена файлов выглядят следующим образом:

$ ls *ppm | head -5 CS585Bats-FalseColor_frame000000750.ppm CS585Bats-FalseColor_frame000000751.ppm CS585Bats-FalseColor_frame000000752.ppm CS585Bats-FalseColor_frame000000753.ppm CS585Bats-FalseColor_frame000000754.ppm
1
задан 31 October 2017 в 06:37

4 ответа

У вас есть несколько вариантов, доступных с помощью демонстратора файлов изображений.

Использование шаблона последовательности

ffmpeg -framerate 25 -i "CS585Bats-FalseColor_frame%09d.ppm" output

Вы можете изменить начальный номер с помощью параметра входа -start_number. [ ! d3]

Использование шаблона glob

ffmpeg -pattern_type glob -framerate 25 -i "CS585Bats-FalseColor_frame*.ppm" output

Если это единственные файлы PPM в каталоге, ваш шаблон glob может быть проще:

ffmpeg -pattern_type glob -framerate 25 -i "*.ppm" output
1
ответ дан 18 July 2018 в 04:13

Не уверен, что скрипт bash выполнит задачу, но этот скрипт Python работает как прелесть:

import cv2 import glob img1 = cv2.imread('bat/FalseColor/CS585Bats-FalseColor_frame000000750.ppm') height, width, layers = img1.shape video = cv2.VideoWriter('video.avi', -1, 1, (width, height)) filenames = glob.glob('bat/FalseColor/*.ppm') for filename in filenames: img = cv2.imread(filename) video.write(img) cv2.destroyAllWindows() video.release()
0
ответ дан 18 July 2018 в 04:13

У вас есть несколько вариантов, доступных с помощью демонстратора файлов изображений.

Использование шаблона последовательности

ffmpeg -framerate 25 -i "CS585Bats-FalseColor_frame%09d.ppm" output

Вы можете изменить начальный номер с помощью параметра входа -start_number. [ ! d3]

Использование шаблона glob

ffmpeg -pattern_type glob -framerate 25 -i "CS585Bats-FalseColor_frame*.ppm" output

Если это единственные файлы PPM в каталоге, ваш шаблон glob может быть проще:

ffmpeg -pattern_type glob -framerate 25 -i "*.ppm" output
1
ответ дан 24 July 2018 в 18:02

Не уверен, что скрипт bash выполнит задачу, но этот скрипт Python работает как прелесть:

import cv2 import glob img1 = cv2.imread('bat/FalseColor/CS585Bats-FalseColor_frame000000750.ppm') height, width, layers = img1.shape video = cv2.VideoWriter('video.avi', -1, 1, (width, height)) filenames = glob.glob('bat/FalseColor/*.ppm') for filename in filenames: img = cv2.imread(filename) video.write(img) cv2.destroyAllWindows() video.release()
0
ответ дан 24 July 2018 в 18:02

Другие вопросы по тегам:

Похожие вопросы: