我遇到ffmpeg
抛出错误的情况:
Invalid data found when processing input
我在这里还查看了其他答案,但是我的情况有所不同。我在Ruby
中生成了一个文本文件,其中包含要合并到一个大视频中的输入文件列表。
我在Ruby
中生成了用于bash
的命令,该命令也输出给我手动复制:
ffmpeg -y -f concat -safe 0 -i /Volumes/Dragon2/Yums/randoms.txt /Volumes/Dragon2/Yums/final.mp4
引发错误:
/Volumes/Dragon2/Yums/randoms.txt: Invalid data found when processing input
这是文件:
file '/Volumes/Dragon2/Yums/0CEDC3CA-4571-4271-9938-A161EC2A887B.mov'
file '/Volumes/Dragon2/Yums/0D25D907-D053-443B-AFC6-9F12B1711BBF.mov'
file '/Volumes/Dragon2/Yums/6A272808-7706-435D-801E-ACE6B42EC749.mov'
file '/Volumes/Dragon2/Yums/6E9BA2F1-C5E7-4C1C-B290-D116105732FA.mov'
file '/Volumes/Dragon2/Yums/0A41C7B7-74CE-484E-B029-3AE57B8BB4EA.mov'
运行bash
时,它抱怨输入文件 randoms.txt 包含无效数据。当我在bash
中复制并粘贴相同的命令时,它可以正常工作。我对这两者有何不同以及为什么ffmpeg
在shell
中启动感到不满意感到困惑。
我该如何使用它?我想念什么?干杯
编辑:原始ruby
代码:
`clear`
require 'pathname'
require 'pp'
s = '/Volumes/Dragon2/Yums'
files = []
Dir.foreach(s) do |path|
files << "#{ s }/#{ path }"
end
result = files.sample(files.size) # randomizer
f = File.open("#{ s }/randoms.txt", 'w+')
result.each_with_index do |item, i|
pp "#{ i }: #{ item }" if item.include?('mov')
f << "file '#{ item }'\n" if item.include?('mov')
end
`echo `
File.delete("#{ s }/final.mp4") if File.exists?("#{ s }/final.mp4")
s = "ffmpeg -y -f concat -safe 0 -i #{ s }/randoms.txt #{ s }/final.mp4"
puts s
sleep 3
`#{ s }`
我也尝试过system s
,但有相同的错误。语法生成正常,输出正常,手动操作正常。
答案 0 :(得分:1)
我需要f.close
来写文件,以便ffmpeg
可以从中读取文件。但是shellwords
也是关键。谢谢 。