Я пытаюсь переименовать выходные файлы, которые выходят из процессов ffmpeg, которые я создал, используя find и xargs. У меня есть каталог файлов, который я хотел бы преобразовать в определенный формат, и в конечном итоге все эти файлы должны иметь имя .mov. Поэтому я отфильтровываю файлы .mp4 & .mov, а затем использую xargs для передачи его в ffmpeg.
Предположим, есть такие файлы, как ab c .mp4, abcd.mp4, abcde.mp3, bcd. .mov et c в текущем рабочем каталоге, а затем я делаю что-то вроде этого, чтобы отфильтровать только файлы mp4 и mov и передать их в ffmpeg для кодирования:
find . -type f -name "*.mp4" -o -name "*.mov" | xargs -n 1 -p 5 -I '{}' ffmpeg -i '{}' ....... $PWD/{}"_h264.mov"
Это будет делать то, что я хочу, чтобы ffmpeg делал, но называет файлы как
ab c .mp4_h264.mov, abcd.mp4_h264.mov, bcd.mov_h264.mov
В идеале я хотел бы добиться, чтобы выходные файлы назывались
abc_h264.mov, abcd_h264.mov, bcd_h264.mov
В моем мозгу не возникает искорка о том, как это сделать. в том месте, где я указываю выходные файлы ffmpeg. Я знаю, что могу вызвать команду basename, используя xargs, как это
find . -type f -name "*.mp4" -o -name "*.mov" | xargs -n 1 basename | rev | cut -d . -f 2 | rev
, и извлечь имя файла без расширения, но если я использую это, то как я могу передать его в ffmpeg как входной файл, потому что он потерял бы расширение, когда выйдет из xargs, а ffmpeg выдаст ошибку.
Может ли кто-нибудь помочь мне достичь этого за один go, где я могу указать, что делает «basename», но где я указываю имя выходного файла ffmpeg, пожалуйста?
Большое спасибо за любую помощь, которую вы можете предоставить. Очень ценю сообщество.