reminett Skrevet 7. mars 2011 Skrevet 7. mars 2011 Hei! Jeg har ca 11 000 jpg filer som jeg skal gjøres om til en video. Har sett på "convert"-kommandoen, men den lager ukomprimerte bilder i /tmp først, noe som spiser noe helt vanvittig med diskplass. Jeg har søkt litt på nettet, og finner andre løsninger. Men da må filene være nummererte. Mine filer er datostemplet slik: bilde-020211-120301.jpg (2. feb. kl. 12:03:01) bilde-020211-120601.jpg (2. feb. kl. 12:06:01) Hvordan gjør jeg dette? Kanskje jeg må rename alle bildene slik: bilde000001.jpg, bilde000002.jpg osv osv? Hvordan gjør jeg det, i tilfelle? Alle filene har riktig "created date" timestamp... Noen glupe hoder med noen gode idéer?
Sokkalf™ Skrevet 7. mars 2011 Skrevet 7. mars 2011 #!/usr/bin/env bash for fil in *.jpg; do DATE=`echo $fil | awk -F- '{print $2}'` TIME=`echo $fil | awk -F- '{print $3}'` TIME=${TIME%.jpg} D3=`echo $DATE | cut -c1-2` D2=`echo $DATE | cut -c3-4` D1=`echo $DATE | cut -c5-6` T1=`echo $TIME | cut -c1-2` T2=`echo $TIME | cut -c3-4` T3=`echo $TIME | cut -c5-6` TIME=`echo $T1:$T2:$T3` DATE=`echo $D1-$D2-$D3` DATETIME=`echo "${DATE} ${TIME}"` TIMESTAMP=`date +"%s" --date "${DATETIME}"` mv ${fil} bilde-${TIMESTAMP}.jpg done Dette bør gjøre om filnavnet til bilde-unixtimestamp.jpg isteden, da får du ihvertfall tall i stigende rekkefølge, selv om de ikke akkurat begynner på 0..
reminett Skrevet 7. mars 2011 Forfatter Skrevet 7. mars 2011 Wow, det var kjapt! Tester det ut i skrivende stund Tusen takk!
reminett Skrevet 7. mars 2011 Forfatter Skrevet 7. mars 2011 (endret) Jeg fikk denne ca 11 000 ganger date: illegal time format usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format] Edit: My bad! Jeg kjørte scriptet på en FreeBSD-boks. Tester på en linuxbox asap Endret 7. mars 2011 av reminett
reminett Skrevet 7. mars 2011 Forfatter Skrevet 7. mars 2011 Det ser ut som det virker Så nå er jeg nærmere målet mitt. Jeg har altså filer som har filnavn i stigende rekkefølge, men de kommer ikke etter hverandre med et ett siffer mellom seg... Hvordan skal jeg gå frem videre?
anders iver Skrevet 7. mars 2011 Skrevet 7. mars 2011 noe slikt kanskje? #!/bin/bash num=1 for fil in *.jpg; do mv ${fil} bilde-${num}.jpg (( num += 1 )) done
reminett Skrevet 8. mars 2011 Forfatter Skrevet 8. mars 2011 Nja, men jeg må vite at den tar den eldste filen først...
Sokkalf™ Skrevet 8. mars 2011 Skrevet 8. mars 2011 Har alle filene fortsatt riktig timestamp i filystemet? for fil in `ls -tr *.jpg`; do ..osv..
reminett Skrevet 8. mars 2011 Forfatter Skrevet 8. mars 2011 Nice one! Ja, det har de. Dette skal testes nå
reminett Skrevet 8. mars 2011 Forfatter Skrevet 8. mars 2011 Nå er vi veldig nær her! Renamingsprosedyren funker bra. Det eneste problemet er at jeg må ha dem nummerert slik: bilde-000001,jpg, bilde-000002.jpg osv osv for at ffmpeg skal kunne lage en film av det. Noen idéer?
Sokkalf™ Skrevet 8. mars 2011 Skrevet 8. mars 2011 (endret) num=1 for fil in `ls -tr *.jpg`; do num=`printf "%0.6d" ${num}` mv ${fil} bilde-${num}.jpg (( num += 1 )) done burde i teorien fikse det. Edit; vil nok være bedre å la num-variablen være urørt. Så noe sånt: numwithzeroes=`printf "%0.6d" ${num}` mv ${fil} bilde-${numwithzeroes}.jpg Endret 8. mars 2011 av Sokkalf™
reminett Skrevet 8. mars 2011 Forfatter Skrevet 8. mars 2011 Heheheh fantastisk. Kjører den nå.. Spent
reminett Skrevet 8. mars 2011 Forfatter Skrevet 8. mars 2011 Denne meldingen kommer om og om igjen: ./script.sh: line 7: ((: 000008: value too great for base (error token is "000008") ./script.sh: line 5: printf: 000008: invalid octal number
Sokkalf™ Skrevet 8. mars 2011 Skrevet 8. mars 2011 Prøvde du med forslaget fra det redigerte innlegget over?
reminett Skrevet 8. mars 2011 Forfatter Skrevet 8. mars 2011 Dette funker: #!/bin/bash num=1 for fil in `ls -tr *.jpg`; do filnummer=`printf "%0.6d" ${num}` mv ${fil} bilde-${filnummer}.jpg (( num += 1 )) done Prøvde du med forslaget fra det redigerte innlegget over? Ah, så denne rett etter at jeg hadde funnet det ut selv Tusen hjertelig takk for hjelpen!
reminett Skrevet 8. mars 2011 Forfatter Skrevet 8. mars 2011 (endret) Eneste som gjenstår nå er å lage videoen, og det gjør jeg slik: ffmpeg -f image2 -v 5 -r 25 -i bilde-%06d.jpg -vcodec copy testfilm.avi Problemet er at det virker som den ikke får med seg alt.. Dvs den får med seg de første dagene bare (det er 11000 bilder, tatt hvert 3. min). Edit: Det viser seg at noen få av bildene er korrupte. Derfor stopper ffmpeg konverteringen.. Endret 8. mars 2011 av reminett
reminett Skrevet 8. mars 2011 Forfatter Skrevet 8. mars 2011 Siden problemet var at noen av bildene var helt tomme (0 bytes), løste jeg det ved å slette de tomme filene før renaming. Scriptet blir da slik: #!/bin/bash find . -maxdepth 1 -empty -exec rm {} \; num=1 for fil in `ls -tr *.jpg`; do filnummer=`printf "%0.6d" ${num}` mv ${fil} bilde-${filnummer}.jpg (( num += 1 )) done Jeg kan da kjøre ffmpeg for å lage en video av bildene slik: ffmpeg -v 5 -r 25 -i bilde-%06d.jpg -vcodec copy testfilm.avi
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå