gpt4 book ai didi

bash - 如何解析 ffprobe 输出并根据结果运行 ffmpeg?

转载 作者:行者123 更新时间:2023-12-04 22:45:36 28 4
gpt4 key购买 nike

我在为 Mac 构建一个可以满足我所有需求的 ffmpeg 二进制文件时遇到了难以置信的麻烦。我有一个较旧的版本,可以很好地重新混合 h264 视频而没有问题,但缺少我需要的库,即 libspeex。我基于 ffmpeg 的 git 构建了一个更新的版本,其中包括 libspeex,但在尝试从具有错误时间码的 .flv 文件(来自 rtmpdump 的实时转储)中重新混合 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

这样的事情可能吗?有没有其他选择?

最佳答案

你可以运行 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.flv , ffmpeg-speex将输出 abc.m4a , ffmpeg-h264将输出 abc.mp4 , 和 MP4Box将输出 abc-final.mp4 .

编辑:固定为 grep也在标准错误上;修复了可能将不存在的 .m4a 文件提供给 MP4Box 的问题作为输入。

关于bash - 如何解析 ffprobe 输出并根据结果运行 ffmpeg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9985345/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com