2012-05-26 13 views
5

Mam system operacyjny OSX, nie wiem ton o konwersjach wideo. Ale mam 200 filmów, które są w formacie MP4 i nie będą odtwarzane w Firefoksie. Muszę przekonwertować je na ogg, aby użyć tagu wideo html5.Jak wsadowo konwertować pliki mp4 na ogg za pomocą ffmpeg za pomocą polecenia bash lub Ruby

Pliki te są wyświetlane w strukturze folderów, co utrudnia ich robienie pojedynczo. Chciałbym, aby polecenie bash lub polecenie Ruby przejrzało wszystkie foldery potomne i znajdowało wszystkie .mp4 i konwertuj je.

znalazłem jedno odwołanie, jak to zrobić z 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 

Ale nie mam pojęcia, jak przekształcić ten z linux do OSX.

+0

Opcja "-sameq" NIE oznacza "tej samej jakości" [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

Ta odpowiedź nie jest odpowiednia dla pytanie, ponieważ nie ma odniesienia do korzystania z tej opcji. – depa

Odpowiedz

8

Choć bezpośrednią odpowiedź na pytanie byłoby tak:

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

myślę, że można znaleźć lepsze wyniki przy użyciu VP8 or webm codec jak to daje znacznie lepsze rezultaty i jest rzeczywiście preferred w nowoczesnych wersjach Firefoksa . Biorąc pod uwagę, że należy spróbować tego:

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

Obie te metody spowoduje utraty jakości w swoich wynikających filmy, ponieważ są one ponownie kodującym już zakodowany materiał i, moim zdaniem, nawet kodek WebM nie jest tak dobry jak poprawnie zakodowany MP4 przy użyciu kodeka h.264.

+0

jakikolwiek sposób użyć ffmpg do ustawienia liczby klatek na sekundę lub innych ustawień, aby poprawić jakość w poleceniu? –

+0

Oczywiście tag -r ustawi liczbę klatek na sekundę i możesz ustawić szybkość transmisji za pomocą znacznika -b: v, aby można było użyć czegoś takiego: '#!/Bin/bash FILMY = ~/Movies/ znajdź" $ FILMY "-name" * .mp4 '-exec sh -c' ffmpeg -i "$ 0" -r 23,976 -b: v 800k -bt 800k -sameq -sameq "$ {0 %%. Mp4} .webm" ' {} \; exit; ' –

+0

Nie sugeruj użycia' -samejq' w tym przypadku. Ta opcja nie oznacza "tej samej jakości", co dokumenty sugerowały i prawdopodobnie nie robią tego, co myślisz. Nie jest przeznaczony do użycia między formatami, które nie mają tej samej skali kwantyzatora. – LordNeckbeard

5

ta używa Ruby, przy założeniu, że ffmpeg użyłeś jest poprawna:

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 z "**/*.mp4" rekurencyjnie pasuje do wszystkich plików w podkatalogach łączącą rozszerzeniem .mp4.

+0

Dzięki za odpowiedź ale zwraca: rubin convert.rb convert.rb: 3: w bloku w

'„: niezdefiniowana zmienna lokalna lub metoda 'file” za główny: Object (NameError) jakieś pomysły –

Powiązane problemy