Jump to content
geir__hk

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

Recommended Posts

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.

Edited by geir__hk

Share this post


Link to post

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
Edited by Occi

Share this post


Link to post

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:

Share this post


Link to post

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.

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...