En iso-fil blev i "gamle dage" skrevet til en cdrom/dvd-skive, men nu er det vist mere normalt at skrive til en usb-stick. Det bruges f.eks. til at lave et boot-bar medie ved installation af Ubuntu. Læs videre "Skrive .iso til usb-stick"
Kategori: Kommandoer
Min huskeliste til Ubuntu og Linux-kommander som jeg har svært ved at huske :-)
Dette er ikke en brugsanvisning til Ubuntu, men til mit eget brug – andre er velkomne til at bruge det jeg har skrevet, men det er på absolut eget ansvar!
Finde forskel mellem to mapper
Hvis man har to mapper med filer, og vil se hvilke filer der findes i den ene mappe, og ikke i den anden, kan det gøres med kommandoen diff. Læs videre "Finde forskel mellem to mapper"
Konvertere billede til pdf
Det er nemt at ændre et billede til en pdf-fil, men det er som regel nødvendigt at bruge nogle parametre hvis man ønsker af få pdf-filen i en bestemt størrelse. Derfor har jeg lavet nogle one-liners der normalt klarer jobbet tilfredsstillende. Læs videre "Konvertere billede til pdf"
head og tail
Disse to kommander kan finde hoved og hale i filer, eller udelade hoved og hale – de er faktisk gode og simple hvis man kan huske hvorledes man kan angive antal linjer. Jeg har lavet et par eksempler som er gode at have ved hånden. Læs videre "head og tail"
Sortering i bash
Det er rart at kunne sortere et output eller en fil i bash – men det kan være svært at huske de parametre man ikke bruger så tit 😮 Derfor prøver jeg med en lille huskeliste. Læs videre "Sortering i bash"
Videoklip portræt/landskab
Mange personer optager video-klip med en mobil "på højkant", det vil sige 1080×1920 px, hvorimod et HD TV kører 1920×1080, altså bredt lige som et filmlærred – hvilket også er sådan de fleste mennesker opfatter omgivelserne 🙂
Nogle videoklip i portræt-format står med Rotation 90 i exif-data og fysisk 1920×1080, mendens andre (de fleste?) har 1080×1920 og Rotation 0. Desuden er der forskel på om afspillere/programmer læser og respekterer Rotations-tag i exif-data.
Det er mit indtryk at det er ret tilfældigt om et videoklip bliver vist med den rigtige orientering – dette i modsætning til fotos, hvor jeg synes der sjældent er problemer (undtaget med nogle digitale fotorammer).
Første del af denne post viser hvorledes jeg kan tilpasse videoer til mit TV, og derefter kommer der nogle generelle kommandoer.
Tilpasse problematiske videoer til mit tv.
Mit Samsung-TV (UE46H7005) kløjes ofte i det når jeg ser videoer på højkant. Hvis videoen er større end 1920 i bredden og/eller højere end 1080, kan mit TV ikke vise videoen.
Hvis det fysiske format er 1920×1080 med rotation 90, det vil sige portræt/højkant, virker det for nogle videoer – og for andre virker det ikke. Jeg har ikke kunnet finde ud af hvorfor det varierer.
Jeg konverterer nu alle .mov til .mpeg, roterer portræt fysisk og sætter exif-rotationen til nul samt ændrer størrelse til max 1920×1080. Endvidere bruger jeg codec h.264 samt tilføjer "_TV-kopi" til navnet. Det kan alt sammen ske i én behandling med ffmpeg.
Derved opnår jeg flere fordele, f.eks. at det (vist) virker for alle videoer, fil-størrelsen bliver mindre, og mit TV skal ikke bruge kræfter (og dermed tid) på at rotere eller resize videoen.
Det er sjovere at automatisere en proces end udføre den samme opgave mange gange 😉
Jeg bruger derfor nogle (ret lange) one-linere – der sker som skitseret her med kommentarer til kommandoerne.
Inden jeg går i gang med nedenstående sørger jeg for at ændre filnavne (dato som filnavn, store til små bogstaver mv.) som beskrevet i andre indlæg.
Find videoer, der ikke skal konverteres.
Først dannes en fil med de mp4-filer hvor rotation=0, og hvor størrelsen ikke overskrider 1920x1080px – disse .mp4-filer behøver ikke konvertering (jeg kopierer dem dog senere, så jeg har en kopi til TV-visning).
exiftool -q -s3 -if '$Rotation# eq 0' -if '$ImageWidth#<=1920' -if '$ImageHeight#<=1080' -FileName -ext mp4 . | sort > files2copy.txt
Finde videoer, der skal konverteres.
Denne kommando danner en fil med navne på alle .mov og .mp4 filer, undtagen dem der blev skrevet til filen i kommandoen ovenfor. Det vil sige alle .mov-filer (skal konverteres til .mp4), videoer, som skal formindskes til 1920×1080, eller som skal roteres fysisk i henhold til anført exif-data om rotation (rotation bliver automatisk sat til 0 så det passer sammen):
ls *.mov *.mp4 | grep -vf files2copy.txt > files2convert.txt
Tjekke rotation inden konvertering.
Normalt roterer ffmpeg en video uden problemer når der konverteres til et andet format – men det er ikke altid at kameraer håndterer og markerer portræt/landskab på en ordentlig måde, så andre programmer kan håndtere det.
Derfor udtrækker jeg et foto fra hver video anført i files2convert.txt – navnet på billedet bliver det oprindelige navn tilføjet _tmp.
De dannede tmp-fotos gennemses i min sædvanlige foto-viser. Hvis rotationen ikke passer på et foto, slettes det pågældende video-filnavn i files2convert.txt og medtages dermed ikke i automatikken, men skal konverteres manuelt fra kommandolinjen.
Udtræk af tmp-fotos:
while read -r f; do [[ -f "$f" ]] || continue; ffmpeg -nostdin -i "$f" -vframes 1 "${f%%.*}_tmp.jpg"; echo "*** "$f" - udført"; done < files2convert.txt
Denne kommando sletter tmp-fotos efter gennemgangen:
rm ./*_tmp.jpg
Konvertere og rotere
Tekstfilen files2convert.txt bruges som input til ffmpeg.
Der sker naturligvis en forringelse ved konverteringen, men med -crf 21 bliver det sjældent at se.
De nye filer får tilføjet "_TV-kopi" så de ikke forveksles med den originale, (høj)kvalitets-video.
new_w=1920; new_h=1080; while read -r f; do [[ -f "$f" ]] || continue; ffmpeg -nostdin -i "$f" -map_metadata 0 -filter:v scale=w="if(gt(dar\,${new_w}/${new_h})\,min(${new_w}\,iw*sar)\,2*trunc(iw*sar*oh/ih/2))":h="if(gt(dar\,${new_w}/${new_h})\,2*trunc(ih*ow/iw/sar/2)\,min(${new_h}\,ih))" -c:v libx264 -crf 21 -acodec copy "./${f%.*}_TV-kopi.mp4"; done < files2convert.txt
Kopiere ikke-konverterede videoer
Først tjekkes om der er problemer med rotation: Loop gennem videoerne i files2copy.txt - de stopper efter 1 sekund, hvorefter næste vises efter et tryk på ESC. Hvis der er nogle videoer, der ligger ned, fjernes pågældende filnavn i files2copy.txt, og videoen konverteres senere separat fra kommandolinjen.
while read -r f; do [[ -f "$f" ]] || continue; ffplay -noautorotate -x 800 -y 800 -t 1 "$f"; done < files2copy.txt
Dernæst kopieres de filer, der er anført i files2copy.txt:
while read -r f; do [[ -f "$f" ]] || continue; cp -n "$f" "./${f%.*}_TV-kopi.mp4"; done < files2copy.txt
Generelt gode kommandoer til manuel behandling.
Efterfølgende kommandoer er nogle generelle kommandoer, som jeg finder brugbare.
Det er vigtigt at holde sig for øje, at ændring af "rotate" ikke ændrer den fysiske orientering/rotering landskab/portræt, men kun exif-informationen "Rotation"!
Hvis der skal se en fysisk rotation, skal "transpose" anvendes i stedet.
Se dimension og rotation.
List ImageSize og Rotation for udvalgte filtyper:
exiftool -f -ImageSize -Rotation# -ext mp4 -ext mov . -csv
Nulstil "Rotation" uden re-encoding.
Denne kommando nulstiller rotation, men uden at ændre videoen - dvs. at videoen måske ligger ned når den afspilles:
ffmpeg -i input.mp4 -c copy -map_metadata 0 -metadata:s:v:0 rotate=0 output.mp4
Nulstil "Rotation" og roter fysisk (re-encode).
Argument -crf 21 angiver hvor høj kompression (interval 1-51) , der anvendes - husk at høj kompression = lavere kvalitet!
Crf på 18 giver en meget god kvalitet, default er 23, så jeg vælger 21 🙂 Argument -acodec copy kopierer lyden uden konvertering.
Normalt vil ffmpeg læse og følge exif-koden for Rotation - men hvis dette ikke ønskes skal der tilføjes -noautorotate som argument (kan sættes som første argument).
Denne one-liner klarer vist jobbet i de fleste tilfælde:
ffmpeg -i input.mp4 -map_metadata 0 -c:v libx264 -crf 21 -acodec copy output.mp4
Hvis videoen ligger ned (manglende exif-kode for rotation), skal der køres en "transpose". Der kan vælges mellem clock, cclock, vflip og hflip. Kan kombineres - en rotation på 180 grader kan klares med én af disse:
"transpose=clock,transpose=clock"
"transpose=vflip,transpose=hflip").
Denne drejer en kvart omgang med uret:
ffmpeg -i input.mp4 -map_metadata 0 -vf "transpose=clock" -c:v libx264 -crf 21 -acodec copy output.mp4
Ændre størrelse og evt. rotation.
Normalt vil orienteringen landskab/portræt passe eftersom ffmpeg læser og følger exif-koden for Rotation.
Tilpas videoen til en bredde på 1280, og behold proportionerne - højden på "-2" betyder højden skal være et multiplum af 2 af hensyn til det anvendte codec (libx264).
ffmpeg -i input.mp4 -map_metadata 0 -vf "scale=1280:-2" -c:v libx264 -crf 21 -acodec copy output.mp4
Sæt højde til 1080 (passer til mit HD TV), og behold proportioner.
ffmpeg -i input.mp4 -map_metadata 0 -vf "scale=-2:1080" -c:v libx264 -crf 21 -acodec copy output.mp4
Ændre filnavne upper/lower
Ændring af filnavne/extension til kun store, eller kun små bogstaver, kan udføres med nogle (halv-lange) "one-linere". Eksemplerne virker også på filer med mellemrum i navnet. Der er sikret mod overskrivning af eksisterende filer på case-sensitive systemer (Ubuntu/Linux), hvor FOTO.jpg og FOTO.JPG ellers vil få samme filnavn. Læs videre "Ændre filnavne upper/lower"
Gennemløbe filer i en mappe
Hvis der er brug for at foretage "et eller andet" med nogle/alle filer i en mappe er der brug for et loop af en eller anden slags. Disse eksempler skulle være robuste. Læs videre "Gennemløbe filer i en mappe"
Omdøbe filer
Omdøbning af filer sker typisk med commandoen mv, men man kan også bruge kommandoen rename som dog ikke er standard i alle linux-versioner.
Jeg har samlet nogle eksempler på omdøbning af filer Læs videre "Omdøbe filer"
Password, .htpasswd og .htaccess
Adgangen kan beskyttes med kodeord til (nogle) mapper på et websted. Det kræver at man opretter/ændrer et par filer, nemlig .htaccess og .htpasswd som er skjulte filer.
Læs videre "Password, .htpasswd og .htaccess"