Vraag converteer een reeks van ppm-afbeeldingen naar avi-video


Ik wil een reeks van ppm-afbeeldingen converteren naar avi-video (of een ander mogelijk videoformaat dat door OpenCV wordt geaccepteerd) Eerst heb ik de ppm-afbeeldingen geconverteerd zonder kwaliteitsverlies naar jpg:

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

dan gebruikte ik het volgende commando om naar avi te converteren:

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

Maar ik kreeg de volgende foutmelding:

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

Toen dacht ik om deze andere methode te gebruiken, maar krijg nog steeds een foutmelding:

$  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.

De namen van de ppm-bestanden zien er als volgt uit:

$ 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
2017-10-31 02:37


oorsprong


Jouw ffmpeg is absoluut oud. Download een nieuwe versie en hoofdpijn voorkomen. - LordNeckbeard


antwoorden:


Je hebt verschillende opties beschikbaar met de beeldbestand demuxer.

Het volgordepatroon gebruiken

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

U kunt het startnummer wijzigen met de -start_number invoeroptie.

Het glob-patroon gebruiken

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

Als dit de enige PPM-bestanden in de directory zijn, kan uw glob-patroon eenvoudiger zijn:

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

1
2017-10-31 18:57





Ik weet niet zeker welk bash-script de taak zal uitvoeren, maar dit Python-script werkt als een charme:

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
2017-10-31 04:27