Пакетный скрипт HandbrakeCLI bash транскодирует только один файл и завершает работу

644
David Okwii

Я пишу сценарий bash, который просматривает файлы webm и транскодирует их в .mp4, используя HandbrakeCLI. Однако, к моему удивлению, Handbrake транскодирует только один файл вместо всех. Вот мой сценарий.

#!/bin/bash  trxcode(){ fp=$1 new_fp=$2 HandBrakeCLI --preset "Normal" -i "$fp" -o "$new_fp" }  find ~/Videos/zik_vids/ -iname "*.webm" -type f | while read fp; do  fd=$(dirname "$")  fn=$(basename "$") f="$"; new_fp="$/$.mp4" trxcode "$fp" "$new_fp" done 

Ручной тормоз говорит "Кодирование сделано!

HandBrake вышел ".

0
Единственное, что я вижу неправильно, это назначения в `trxcode ()`: они должны быть заключены в кавычки (`fp =" $ 1 "; new_fp =" $ 2 "`); они потерпят неудачу, если в любом пути к файлу есть пробелы. AFH 7 лет назад 0
Я снова запустил скрипт, он просто выходит после того, как выполнено первое задание кодирования. Это не продолжается с цикла David Okwii 7 лет назад 0
Что произойдет, если вы поместите `echo` перед вызовом` HandBrakeCLI`? Вы получаете более одной команды в списке? Как насчет размещения его перед вызовом `trxcode`? Это имеет значение? AFH 7 лет назад 0
На самом деле выводит пустую строку и передает ее на ручной тормоз, как эхо "" | HandBrakeCLI --preset "Normal" -i "$ fp" -o "$ new_fp" решает проблему. Я читал, что это как-то связано с ручным тормозом и циклом while, противоречащим стандартному вводу. Я не очень понимаю, но это решает мою проблему сейчас. David Okwii 7 лет назад 0
ХОРОШО. Не зная, что делает Handbrake, я бы никогда не догадался, что он читает со стандартного ввода, когда задан параметр `-i`. Если вы хотите вообще не использовать стандартный ввод, вы можете поместить обработку для каждого файла в скрипт (например, `CallHB`) и использовать` find ... -exec CallHB {} \; `. Я обычно предпочитаю этот способ обработки вывода `find`, а не конвейерную передачу` while read ... `, хотя есть некоторые случаи, когда последнее может быть предпочтительнее. AFH 7 лет назад 0

0 ответов на вопрос