2012-05-26 68 views
5

我正在運行OSX,不知道大量視頻轉換。但我喜歡200個視頻,全部採用mp4格式,不會在Firefox中播放。我需要將它們轉換爲ogg才能使用html5視頻標記。如何使用bash命令或Ruby通過ffmpeg將mp4文件批量轉換爲ogg

這些文件存在於一個文件夾結構中,使得一次只能處理一個文件很困難。我希望bash命令或Ruby命令遍歷所有子文件夾並查找所有.mp4文件並將其轉換。

我發現如何與谷歌做一個參考: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 

,但不知道如何將這種從Linux轉換爲OSX。

+0

選項'-sameq'並不意味着'相同質量' [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) – 2013-04-03 19:59:01

+0

這個答案不適用於因爲它沒有提及使用該選項。 – depa

回答

8

雖然直接回答你的問題是這樣的:

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

我想你可能使用VP8 or webm codec因爲它會給你更好的結果,實際上preferred是在Firefox的現代版本,找到更好的結果。鑑於這種情況,你應該試試這個:

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

這兩種方法都將導致質量的您造成視頻丟失,因爲它們是重新編碼的已編碼的材料,在我看來,即使是WEBM編解碼器幾乎不如使用H.264編解碼器的正確編碼的MP4。

+0

任何方式使用ffmpg設置幀速率或其他設置以提高命令的質量? –

+0

當然,-r標籤會設置幀速率,你可以用-b:v標籤設置比特率,這樣你可以使用像這樣的東西:'#!/ bin/bashMOVIES =〜/ 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

在這種情況下,不建議使用'-sameq'。這個選項並不意味着「相同的質量」,正如文檔中暗示的那樣,並且可能不會做你認爲它的作用。它不適用於不共享相同量化器比例的格式之間。 – LordNeckbeard

5

這是用Ruby,假設你使用的ffmpeg的是正確的:

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與"**/*.mp4"遞歸匹配的子目錄難熬.MP4的擴展名的所有文件。

+0

感謝您的回答,但它返回: 紅寶石convert.rb convert.rb:3:'在

塊「:未定義的局部變量或方法'文件」主:對象(NameError) 任何想法 –

相關問題