Я пытаюсь переименовать выходные файлы, выходящие из процессов ffmpeg, которые я создал с помощью find и xargs. У меня есть каталог файлов, которые я хотел бы преобразовать в определенный формат, и все эти файлы в конечном итоге должны называться .mov. Поэтому я отфильтровываю файлы .mp4 и .mov, а затем использую xargs для передачи их в ffmpeg.
Предположим, что в текущем рабочем каталоге есть такие файлы, как abc.mp4, abcd.mp4, abcde.mp3, bcd.mov и т. д., а затем я делаю что-то подобное, чтобы отфильтровать только файлы mp4 и mov и передать их в ffmpeg. для кодирования:
find . -type f -name "*.mp4" -o -name "*.mov" | xargs -n 1 -p 5 -I '{}' ffmpeg -i '{}' ....... $PWD/{}"_h264.mov"
Это будет делать то, что я хочу, чтобы ffmpeg делал, но он будет называть файлы как
abc.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 выдаст ошибку.
Может ли кто-нибудь помочь мне добиться этого за один раз, где я могу указать, что делает «базовое имя», но где я указываю имя выходного файла ffmpeg, пожалуйста?
Большое спасибо за любую помощь, которую вы можете предоставить. Очень ценю сообщество.
ffmpeg
с исправленными аргументами. Удачи. - person shellter   schedule 18.03.2020