ffmpeg: при обработке ввода найдены неверные данные - PullRequest
0 голосов
/ 20 сентября 2018

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

1 Ответ

0 голосов
/ 20 сентября 2018

Мне нужно было f.close, чтобы написать файл, чтобы ffmpeg мог прочитать его.Но shellwords также был ключевым.Спасибо .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...