У меня есть ситуация, когда 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
с той же ошибкой.Синтаксис генерируется нормально, вывод нормально, работает нормально вручную.