如何使用ffmpeg管道?

时间:2010-12-29 18:44:19

标签: ffmpeg

我的目标是使用wget下载flv文件,并将输出传输到ffmpeg以将其转换为MP3。这样用户可以下载MP3而无需等待FLV首先下载到我的服务器。我一直在玩它,似乎ffmpeg只能在原始视频上进行管道传输。所以我正在做这样的事情:

wget -O - 'videoinput.flv' | ffmpeg -y -i - -vcodec rawvideo -f yuv4mpegpipe - |  ffmpeg -y -i - -ab 128k audiooutput.mp3

有没有人有这种类型的即时ffmpeg编码过程的经验?

4 个答案:

答案 0 :(得分:15)

我没有测试过这个,但应该是这样或非常接近。

wget [URL] | ffmpeg -i pipe:0 -vcodec mpeg4 -s qcif -f m4v -y output.flv

答案 1 :(得分:3)

您将遇到的部分问题是某些文件格式在文件的 end 处有重要的文件容器信息。因此,将wget调用直接传递给ffmpeg是一个潜在的文件破坏者,因为ffmpeg可能会在文件完全下载之前阻塞。

你最好看一系列命令:wget'ing文件,然后运行ffmpeg。它忽略了管道功能,但这是你使用某些文件的问题。

另外,我会看一下FFMPEG网站上关于使用mkfifo管道视频和连接FLV的一组方法的常见问题解答:http://www.ffmpeg.org/faq.html#TOC27

答案 2 :(得分:2)

“ffmpeg只能对原始视频进行管道处理”< - 它不是。

您可以输入/输出ffmpeg支持的任何格式。

在命令行示例中,您从FLV中提取原始视频并编码为MP3。 它永远不会这样做。

答案 3 :(得分:2)

从单独的HTTP客户端进行管道传输的一个更好的选择是使用ffmpeg的内置服务器。至少较新的版本可以将URL作为输入文件参数。这样FFmpeg可以自己拉下文件,对于容器数据靠近文件末尾的格式,它可以(如果服务器支持它)首先抓取文件的那部分,不像curl或wget的管道,取这个文件顺序。见http://ffmpeg.org/ffmpeg-all.html#http