我在为我的Mac构建一个ffmpeg二进制文件时遇到了很大的麻烦,因为我的所有需求都无法满足。我有一个旧版本的二进制文件,可以轻松地重新封装h264视频而不出现问题,但是它缺少我需要的库,即libspeex。我基于ffmpeg的git构建了一个新的版本,其中包括libspeex,但是当尝试重新封装带有错误时间码(从rtmpdump中实时转储)的.flv文件的h264时,它会崩溃。因此,我有两个ffmpeg二进制文件,每个文件只能完成我所需的一半功能。这是我当前的.command文件内容:
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
这种情况有可能吗?有没有其他选择?
Input #0, flv, from '/Users/Greeny/Desktop/input.flv':Duration: 00:37:01.36, start: 0.000000, bitrate: 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: Audio: speex, 16000 Hz, 1 channels, s16
- Eli Greenberg