2012-04-02 43 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

相关问题