Цикл Simples для перебора файлов и отправки их в ffmpeg - PullRequest
0 голосов
/ 25 октября 2019

Я хочу создать сценарий оболочки, который будет перебирать несколько видеофайлов в каталоге, отправлять каждый из них в 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", как мне нужноизменить это?

Спасибо за любой вклад.

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