我的目标是使用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编码过程的经验?
答案 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