reminett Skrevet 7. mars 2011 Del 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? Lenke til kommentar
Sokkalf™ Skrevet 7. mars 2011 Del 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.. Lenke til kommentar
reminett Skrevet 7. mars 2011 Forfatter Del Skrevet 7. mars 2011 Wow, det var kjapt! Tester det ut i skrivende stund Tusen takk! Lenke til kommentar
reminett Skrevet 7. mars 2011 Forfatter Del 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 Lenke til kommentar
reminett Skrevet 7. mars 2011 Forfatter Del 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? Lenke til kommentar
anders iver Skrevet 7. mars 2011 Del Skrevet 7. mars 2011 noe slikt kanskje? #!/bin/bash num=1 for fil in *.jpg; do mv ${fil} bilde-${num}.jpg (( num += 1 )) done Lenke til kommentar
reminett Skrevet 8. mars 2011 Forfatter Del Skrevet 8. mars 2011 Nja, men jeg må vite at den tar den eldste filen først... Lenke til kommentar
Sokkalf™ Skrevet 8. mars 2011 Del Skrevet 8. mars 2011 Har alle filene fortsatt riktig timestamp i filystemet? for fil in `ls -tr *.jpg`; do ..osv.. Lenke til kommentar
reminett Skrevet 8. mars 2011 Forfatter Del Skrevet 8. mars 2011 Nice one! Ja, det har de. Dette skal testes nå Lenke til kommentar
reminett Skrevet 8. mars 2011 Forfatter Del 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? Lenke til kommentar
Sokkalf™ Skrevet 8. mars 2011 Del 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™ Lenke til kommentar
reminett Skrevet 8. mars 2011 Forfatter Del Skrevet 8. mars 2011 Heheheh fantastisk. Kjører den nå.. Spent Lenke til kommentar
reminett Skrevet 8. mars 2011 Forfatter Del 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 Lenke til kommentar
Sokkalf™ Skrevet 8. mars 2011 Del Skrevet 8. mars 2011 Prøvde du med forslaget fra det redigerte innlegget over? Lenke til kommentar
reminett Skrevet 8. mars 2011 Forfatter Del 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! Lenke til kommentar
reminett Skrevet 8. mars 2011 Forfatter Del 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 Lenke til kommentar
reminett Skrevet 8. mars 2011 Forfatter Del 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 Lenke til kommentar
reminett Skrevet 8. mars 2011 Forfatter Del Skrevet 8. mars 2011 Det ble faktisk dritkult! Lenke til kommentar
anders iver Skrevet 8. mars 2011 Del Skrevet 8. mars 2011 Får vi se videoen også? Lenke til kommentar
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å