Gå til innhold

[Løst] Linux/ffmpeg/find - konvertere mange AAC-filer samtidig


Anbefalte innlegg

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 :wallbash:

 

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 :hmm:

 

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 av geir__hk
Lenke til kommentar
Videoannonse
Annonse

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 av Occi
Lenke til kommentar

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 :thumbs:

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...