Я хочу создать сценарий оболочки, который будет перебирать несколько видеофайлов в каталоге, отправлять каждый из них в ffmpeg, который затем перекодирует каждый из них, создавая перекодированный файл, который будет иметь то же имя, что и оригинал, кромес расширением .avi вместо .mkv или .mp4.
Я нашел довольно простой скрипт в другой теме здесь, на SO, попытался слегка изменить его, чтобы учесть расширение файла и каталог назначения.
Однако мой сценарий производит только бесчисленное множество «ничего: такого файла или каталога нет»
Вот оно:
$ for f in $(find -type f -name *.mkv); do ffmpeg -n -i "$f" -c:v copy ".$f" ; done
И вот команда ffmpeg, которую я обычно использую:
ffmpeg -y -i -vf scale=720:-2 -c:v mpeg4 -vtag xvid -b:v 969k -pass 1 -an -f avi /dev/null && ffmpeg -i -c:a libmp3lame -b:a 48k -ac 1 -vf scale=720:-2 -c:v mpeg4 -vtag xvid -b:v 969k -pass 2 .avi
Так что мне нужно определить, что неверно в первом скрипте, который рассматривает каждое маленькое слово имени файла как файл, а затем изменить его, добавив все эти параметры ffmpeg.
Что-то, чего я не понимаю в сценарии:
1) Необходимы ли -type и f в команде find. Из того, что я прочитал в документации, все, что он делает, это говорит, что он ищет нормальные файлы, что кажется мне неуместным для моего случая. Когда я использую find, я делаю: find начальный dir -name имя файла. Так я должен сохранить это?
2) Что означает -n для ffmpeg? Я в настоящее время без записи мужчина для ffmpeg. Это необходимо для моих нужд?
3) Нужно ли иметь "" около $ f? Что он делает?
4) Насколько я понимаю, $ обозначает переменную. Но что за «е» после этого делает? Нужно ли это?
5) ";"после закрытия ")" и ". $ f" нужны? Первый используется для обозначения конца цикла for, а второй - для конца команды ffmpeg?
6) "do" и "do" также необходимы для тех же мотивов, стоящих за "; "
Вот моя попытка части сценария ffmpeg. Скажите, пожалуйста, что в нем изменить, как в части find.
do ffmpeg -n -y -i "$f.mkv" -vf scale=720:-2 -c:v mpeg4 -vtag xvid -b:v 969k -pass 1 -an -f avi /dev/null && ffmpeg -n -i "$f" -c:a libmp3lame -b:a 48k -ac 1 -vf scale=720:-2 -c:v mpeg4 -vtag xvid -b:v 969k -pass 2 ".$f.avi" ; done
Если бы я хотел, чтобы скрипт также искал ".mp4" помимо ".mkv", как мне нужноизменить это?
Спасибо за любой вклад.