2012-05-26 12 views
5

Sto eseguendo un OSX, non so tonnellate di conversioni video. Ma ho 200 video che sono tutti in formato mp4 e non giocheranno in Firefox. Devo convertirli in ogg per usare il tag video html5.Come convertire in batch i file mp4 in ogg con ffmpeg utilizzando un comando bash o Ruby

Questi file si trovano in una struttura di cartelle che rende difficile eseguire i file uno alla volta. Vorrei che il comando bash o il comando Ruby passino attraverso tutte le cartelle figlio e trovino tutte le .mp4 e le convertano.

ho trovato uno di riferimento di come fare questo con Google: http://athmasagar.wordpress.com/2011/05/12/a-bash-script-to-convert-mp4-files-to-oggogv/

#!/bin/bash 
for f in $(ls *mp4 | sed ‘s/\(.*\)\..*/\1/’) 
do 
ffmpeg -i $f.mp4 -acodec vorbis -vcodec libtheora $f.ogg 
done 

ma non hanno idea di come convertire questo da Linux a osx.

+0

L'opzione '-sameq' NON significa 'stessa qualità' [https://ffmpeg.org/trac/ffmpeg/wiki/Option%20'-sameq'%20does%20NOT%20mean%20'same%20quality '] (https://ffmpeg.org/trac/ffmpeg/wiki/Option%20%27-sameq%27%20does%20NOT%20mean%20%27same%20quality%27) –

+0

Questa risposta non è pertinente al domanda in quanto non fa riferimento all'utilizzo di tale opzione. – depa

risposta

8

Mentre la risposta diretta alla sua domanda sarebbe come questo:

#!/bin/bash 
MOVIES=~/Movies/ 
find "$MOVIES" -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -sameq "${0%%.mp4}.ogg"' {} \; 
exit; 

Penso che si potrebbe trovare migliori risultati utilizzando il VP8 or webm codec in quanto vi darà risultati molto migliori ed è in realtà preferred nelle versioni moderne di Firefox . Dato che, si dovrebbe provare questo:

#!/bin/bash 
MOVIES=~/Movies/ 
find "$MOVIES" -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -sameq "${0%%.mp4}.webm"' {} \; 
exit; 

Entrambi questi metodi si tradurrà in una perdita di qualità nei tuoi video risultanti in quanto sono ri-codifica del materiale già codificato e, a mio parere, anche il codec WebM non è quasi buono come un MP4 correttamente codificato usando il codec h.264.

+0

alcun modo usare ffmpg per impostare la frequenza dei fotogrammi o altre impostazioni per migliorare la qualità nel comando? –

+0

Sicuramente il tag -r imposterà la frequenza dei fotogrammi ed è possibile impostare il bit rate con il tag -b: v in modo da poter usare qualcosa del tipo: '#!/Bin/bash MOVIES = ~/Movies/ find" $ MOVIES "-name" * .mp4 '-exec sh -c' ffmpeg -i "$ 0" -r 23.976 -b: v 800k -bt 800k -sameq -sameq "$ {0 %%. Mp4} .webm" ' {} \; exit; ' –

+0

Non suggerire l'uso di' -sameq' in questo caso. Questa opzione non significa "stessa qualità", come indicavano i documenti, e probabilmente non fa ciò che pensi che faccia. Non è progettato per essere utilizzato tra formati che non condividono la stessa scala di quantizzazione. – LordNeckbeard

5

è usare Ruby, assumendo la ffmpeg che hai utilizzato è corretto:

Dir.glob("**/*.mp4").each do |filename| 
    new_filename = File.join(
    File.dirname(filename), 
    "#{File.basename(filename, ".mp4")}.ogg") 
    `ffmpeg -i "#{filename}" -acodec vorbis -vcodec libtheora "#{new_filename}"` 
end 

Dir.glob con "**/*.mp4" corrisponde ricorsivamente tutti i file all'interno di estensione .mp4 sottodirectory servivano.

+0

Grazie per la risposta, ma restituisce: rubino convert.rb convert.rb: 3: in 'blocco nel

': non definito variabile locale o metodo' file' per main: Object (NameError) qualsiasi idea –

Problemi correlati