geir__hk Skrevet 6. august 2019 Del Skrevet 6. august 2019 (endret) Har en mappe med AAC audio-filer. Planen er å bruke ffmpeg til å "renske opp" i filene pga har en bilstereo som kun klarer å spille av noen av aac-filene. Dette har jeg fått til for hver enkelt fil av gangen: ffmpeg -i 'input.aac' -vn -c:a copy 'output.aac' Jeg fant en forumtråd der et tilsvarende problem ble løst via find -kommandoen: https://unix.stackexchange.com/questions/80851/how-do-i-run-a-command-on-multiple-files Eksempel på kommando (kopiert/limt inn fra nevnte nettside): find . -name "*.js" -exec java -jar compiler.jar --js {} --js_output_file new{} \; Slik jeg leser kommandoen i eksemplet, så burde det være en enkel sak å tilpasse det til ffmpeg -kommandoen jeg prøver å kjøre på aac-filene i mappa. Prøver på en variant som oppretter ny fil med samme navn, som får "NEW" i begynnelsen av filnavnet. I teorien : Enkelt - easy-peecy I praksis : Får det overhodet ikke til å fungere Dette er de kommandoene jeg har prøvd å kjøre i terminal: find . -name "*.aac" -exec ffmpeg -i {} -vn -c:a copy 2_{} find . -name "*.aac" -exec ffmpeg -i {} -vn -c:a copy 2_{} \; find . -name "*.aac" -exec ffmpeg -i {} -vn -c:a copy NEW{} \; find . -name "*.aac" -exec ffmpeg -i {} -vn -c:a copy NEW{}\; find . -name "*.aac" -exec ffmpeg -i {} -vn -c:a copy NEW{} \; find . -name "*.aac" -exec ffmpeg -i '{}' -vn -c:a copy 'NEW{}'\; Når kommandoene kjøres, kan jeg enkelt se at de traverserer hver enkel ac-fil i tur og orden, problemet er bare at ffmpeg printer en feilmelding på hver av filene som blir traversert - noe slik som dette:NEW./input-file-name.aac: No such file or directory Nå kan jeg ikke "se" de eksakte kommandoene som ffmpeg mottar, men utfra feilmeldinga ser det ut til at det være noe surr angående formattering på filnavnet Er åpen for en løsning mhp lage et .sh script dersom dette skulle vise seg å ikke være mulig via en enkeltstående kommando. Endret 6. august 2019 av geir__hk Lenke til kommentar
Occi Skrevet 7. august 2019 Del Skrevet 7. august 2019 (endret) Hva med bare en enkel loop i sh/bash? Testet bare med noen dummyfiler som eksempel på kopiering og renaming av filer: $ touch foo.aac bar.aac $ for i in *.aac; do cp "$i" "NEW$i"; done $ ls -l total 0 -rw-rw-r-- 1 user user 0 Aug 7 16:05 bar.aac -rw-rw-r-- 1 user user 0 Aug 7 16:05 foo.aac -rw-rw-r-- 1 user user 0 Aug 7 16:05 NEWbar.aac -rw-rw-r-- 1 user user 0 Aug 7 16:05 NEWfoo.aac Kan også være greit å være klar over at hvis du ønsker å endre file extension, f. eks hvis du konverterer til noe annet enn AAC med ffmpeg, eller du ønsker å legge til etter basename så kan du bruke parameter expansion: $ for i in *.aac; do cp "$i" "${i%.*}_new.aac"; done $ ls -l total 0 -rw-rw-r-- 1 user user 0 Aug 7 16:06 bar.aac -rw-rw-r-- 1 user user 0 Aug 7 16:07 bar_new.aac -rw-rw-r-- 1 user user 0 Aug 7 16:06 foo.aac -rw-rw-r-- 1 user user 0 Aug 7 16:07 foo_new.aac For å gjøre dette med ffmpeg vil det nok se slik ut, uten at jeg har testet selv: for i in *.aac; do ffmpeg -i "$i" -vn -c:a copy "NEW_$i"; done Endret 7. august 2019 av Occi Lenke til kommentar
geir__hk Skrevet 7. august 2019 Forfatter Del Skrevet 7. august 2019 Takker så meget. Da har jeg fått meg en dytt i riktig retning mhp lære meg bash scripting (om ikke annet, så veldig basic) Kan bekrefte at følgende kommando fungerer: for i in *.aac; do ffmpeg -i "$i" -vn -c:a copy "NEW$i"; done Men så fant jeg ut at jeg vil oppgradere: - nye filer skal ha samme fildato som de gamle - vil heller at de gamle filene skal omdøpes istedet for de nye. - Vil ha mellomrom i output mellom hver fil i Terminalvinduet Så jeg fant denne guiden for bash loop på nettet: https://www.cyberciti.biz/faq/bash-for-loop/ Og endte opp med følgende bash-script - testet og fungerer: #!/bin/bash for i in *.aac do echo "" ffmpeg -i "$i" -vn -c:a copy "NEW_$i" touch -cm --reference="$i" "NEW_$i" mv "$i" "OLD $i" mv "NEW_$i" "$i" echo "" done Konklusjon: Dette fungerer for meg og saken er løst Lenke til kommentar
tingo Skrevet 11. august 2019 Del Skrevet 11. august 2019 Et tips når det gjelder find: den har også '-print' som printer filnavnet for hver gang den evaluerer. Ofte så gir det nødvendig hint om hva som er feil. 1 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å