2016-02-19 4 views
0

Я пытаюсь использовать youtube-dl для получения URL-адресов некоторых видеороликов, а затем передать полученные URL-адреса на вход моего скрипт. Так что в моем терминале яВывод протокола youtube-dl скрипту, использующему ffmpeg, выглядит нормально, используя echo, но возвращает ошибку при выполнении

youtube-dl --ignore-config -iga ~/Desktop/youtube/videolist.txt | myscript.sh 

В моем сценарии я определяю вещи, как

command='ffmpeg'   
inputArgs='-i'    
outputArgs='-c:v libx264 -preset ultrafast -qp 0'  
directory="${HOME}/Desktop/Videos/" 
output="video${count}"  
extension='mp4'   

я проверить его с echo, чтобы убедиться, что все появляется в правильном порядке.

echo "${command}" "${inputArgs}" "${input}" "${outputArgs}" \ 
"${directory}""${output}${count}"."${extension}" 

И результат от этого выглядит правильно. Но когда я пытаюсь запустить то же самое без предыдущего echo команды, т.е.

"${command}" "${inputArgs}" "${input}" "${outputArgs}" \ 
"${directory}""${output}${count}"."${extension}" 

Я получаю сообщение об ошибке, говорящее должно быть указано

По крайней мере, один выходной файл.

Так что для меня кажется очевидным, что я делаю что-то неправильно при попытке выполнить его.

Я попытался:

  • со ссылкой на всю линию в целом
  • котирования различных секций вместе
  • не используя команду exec перед всем

Независимо от того, что я делаю , в какой-то момент процесса возникает ошибка. Я знаю, что это просто, я делаю неправильно. Кто-нибудь, пожалуйста, просветит меня, что это может быть?

Я чувствую себя очень сильно, что . не должен быть просто посреди всего такого, но я действительно не знаю.

Снова все выглядит так, как должно быть, когда я запускаю echo перед строкой параметров оболочки.

Если для того, чтобы понять, о чем я говорю, необходимо использовать более скрипт, который я использую, это не проблема.

+0

В сценарии .. как вы вызываете команду. Также вы используете этот файл youtube-dl --ignore-config -iga ~/Desktop/youtube/videolist.txt | myscript.sh ... Или вы делаете youtube-dl --ignore-config -iga ~/Desktop/youtube/videolist.txt | ./myscript.sh – Varun

+0

Ну, я называл это неправильным, но я называю это следующим образом: '' $ command "$ inputArgs" $ input "$ outputArgs" $ directory $ output $ count. $ extension "' Это то, что вы просили? Что касается трубопроводов, то я делаю «youtube-dl -ignore-config -iga ~/Desktop/youtube/videolist.txt | myscript.sh' Я видел ссылки на youtube-dl -thingsandstuff | ./myscript.sh раньше, но я не понимаю разницу между ними. –

ответ

0

Проблема заключается в том, что, поскольку вы помещаете ее в кавычки, "${outputArgs}" расширяется как один аргумент. Он не делится на отдельные аргументы, поэтому ffmpeg видит только одну опцию -c с действительно длинным спецификатором потока. Следующий аргумент, выходной файл интерпретируется как кодек.

Чтобы устранить проблему, просто удалите кавычки:

"$command" $inputArgs "$input" $outputArgs "$directory$output$count.$extension" 

Я удалил фигурные скобки ({}), чтобы сэкономить пространство. Нет ничего плохого в использовании их, если вы предпочитаете.

 Смежные вопросы

  • Нет связанных вопросов^_^