将cURL输出管道输出到FFmpeg不能与mp4文件一起使用

时间:2015-11-07 23:15:40

标签: ruby curl video ffmpeg mp4

我想在我的Ruby脚本中以下列方式将cURL输出管道输出到FFmpeg,以便在将来剥离元数据,章节以及设置其他元数据:

#!/usr/bin/ruby
url=ARGV[0]

fname=url.split("/").last
extension=File.extname(fname)
options=""
case extension 
  when /mp4/i
    format="mp4"
    options=" -movflags frag_keyframe+empty_moov "
  when /avi/i
    format="avi"
  when /mkv/i
    format="matroska"
  when /wmv/i
    format="asf"
  else
    format="matroska"
 end

cmd=%Q{ curl -b cookie-file.txt #{url} -L -o - | ffmpeg -y -i - -map 0:v -map 0:a -c:v copy -c:a:0 copy -map_metadata -1 -map_chapters -1 #{options} -f #{format} - | cat > #{fname} }

system cmd

当url(ARGV [0])指向.avi,.wmv或.mkv文件时,脚本会执行其工作。但是,当它指向.mp4或.mov文件时,它不起作用,因为输入不可搜索,FFmpeg首先尝试读取整个输入。当url指向mp4文件时,输出到stdout甚至不起作用,只有在选项" -movflags frag_keyframe + empty_moov"用于输出格式。否则我收到一条错误消息:" muxer不支持非可搜索输出"。需要最后一个cat命令,因为此命令管道将在CGI脚本中工作,并将使用适当的HTTP头将其输出写入STDOUT。我应该使用哪些选项来输入管道以使我的脚本也能用于mp4文件?

0 个答案:

没有答案