我想在我的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文件?