2012-04-02 158 views
1

所以我有一個令人難以置信的麻煩構建Mac的ffmpeg的二進制文件,可以正常工作滿足我的所有需求。我有一個較舊的版本,可以毫無問題地很好地重新編排h264視頻,但缺少我需要的庫,即libspeex。我基於ffmpeg的git構建了一個更新的版本,其中包含libspeex,但在嘗試從具有錯誤時間碼的.flv文件(從rtmpdump進行實時轉儲)中重新構建h264時崩潰。所以我有兩個ffmpeg二進制文件,每個都會執行我需要的一半。這是我作爲當前.command文件:如何解析ffprobe輸出並根據結果運行ffmpeg?

for f in ~/Desktop/Uploads/*.flv 
do 
/usr/local/bin/ffmpeg -i "$f" -vcodec copy -acodec libfaac -ab 128k -ar 48000 -async 1 "${f%.*}".mp4 && rmtrash "$f" || rmtrash "${f%.*}".mp4 
done 

這ffmpeg的二進制有包括libspeex所以它可以解碼的FLV的輸入文件的Speex音頻。什麼我希望做的是這樣的僞代碼(我在僞第一次嘗試,所以裸跟我來!):

for f in ~/Desktop/Uploads/*.flv 
do 
ffprobe input.flv 
    if Stream #0:1 contains speex 
     ffmpeg-speex -i input.flv -acodec copy -async 1 output.m4a 
    fi 
ffmpeg-h264 -i input.flv -vcodec copy output.mp4 
MP4Box -add output.mp4 -add output.m4a finaloutput.mp4 
done 

是這樣的可能嗎?有沒有其他的選擇? (任何人都想用libspeex,libfaac和libx264構建Mac的ffmpeg?D)所有想法都歡迎在這裏!謝謝。

+0

ffprobe的輸出是什麼樣的?運行grep可能會非常簡單。 – 2012-04-02 23:51:44

+0

'輸入#0,flv,來自'/Users/Greeny/Desktop/input.flv':持續時間:00:37:01.36,開始:0.000000,比特率:351 kb/s Stream#0:0:Video:h264 (Main),yuv420p,320x240 [SAR 1:1 DAR 4:3],15 tbr,1k tbn,30 tbc Stream#0:1:Speex,16000 Hz,1 channels,s16' – 2012-04-02 23:58:38

+0

評論是不可能的格式! -.- – 2012-04-03 00:02:45

回答

1

您可以運行在其輸出端grep,並測試它是否找到了你想要的字符串:

for f in ~/Desktop/Uploads/*.flv; do 
    if ffprobe ${f} 2>&1 | egrep 'Stream #0:1.+speex'; then 
     ffmpeg-speex -i ${f} -acodec copy -async 1 ${f/%.flv/.m4a} 
     SPEEX_ADD="-add ${f/%.flv/.m4a}" 
    fi 
    ffmpeg-h264 -i ${f} -vcodec copy ${f/%.flv/.mp4} 
    MP4Box -add ${f/%.flv/.mp4} ${SPEEX_ADD} ${f/%.flv/-final.mp4} 
done 

假設輸入文件abc.flvffmpeg-speex將輸出abc.m4affmpeg-h264將輸出abc.mp4,並MP4Box將輸出abc-final.mp4

編輯:在stderr上也固定爲grep;修復了不存在的.m4a文件可能作爲輸入提供給MP4Box的問題。

+0

它沒有找到與此代碼一致的speex:/只是跳到視頻部分的右邊 – 2012-04-03 00:33:35

+1

顯然ffprobe輸出到stderr。新增了2>&1,它似乎可以解壓縮音頻。現在我只需要找出爲什麼MP4Box失敗... – 2012-04-03 00:42:53

+0

我不知道這是你遇到的問題,但我只是解決了一個問題,我的答案MP4Box將接收.m4a文件作爲輸入,即使ffmpeg-speex從未創建它。 – 2012-04-03 01:17:15

相關問題