Як використовувати скрипт Bash для пошуку файлів .mov рекурсивно та перетворення їх у .mp4 за допомогою ffmpeg


2

Я працюю над системою Mac у відеокомпанії, де мені потрібно очистити багато папок і папок, що містять великі проміжні відеофайли.

Тому я шукав спосіб пакетного перетворення багатьох .mov-файлів у файли h.264 .mp4 за допомогою ffmpeg. Я знайшов кілька кодів, щоб зробити пакетне перетворення за допомогою сценарію, подібного до

for f in '*.mov';
   do ffmpeg -i $f -c:v libx264 -f mp4 "${%f.mov}.mp4" ; 
done

Однак це працює лише в поточній папці, в якій виконується сценарій, і я шукаю спосіб знайти .mov файли рекурсивно та пакетно конвертувати їх усі.

На даний момент рішення, яке працює для мене, відчуває трохи жорстокої сили; Я просто використовую пошук і виконання ffmpeg;

 find . -name '*.mov' -type f -exec ffmpeg -i {} -c:v libx264 -f mp4 {}.mp4 

Однак одна з проблем, яка у мене виникає, полягає в тому, що я не можу замінити .mov на .mp4 у цьому форматуванні, тому вихід буде додавати .mp4 до {}, а файли закінчуються як * .mov .mp4

Крім того, я здогадуюсь, що це не найбезпечніший чи найприємніший спосіб перегляду партії.

Мені було цікаво, чи існує більш безпечний або менш інтенсивний спосіб створення партії для ffmpeg, який може навіть вирішити мою проблему іменування, або спосіб зробити команду 'for f in * mov' знайти відео рекурсивно до 5 + папки глибокі.

Будь-яка допомога буде дуже вдячна.


Ваше заголовок погано фразоване. Це не рекурсивна конверсія. Ви хочете рекурсивний пошук / пошук, щоб допомогти з сценарієм пакетного перетворення.
джиггуньєр

Ви можете вільно редагувати свої власні публікації, але для вашого захисту це потрібно зробити в оригінальному обліковому записі користувача. Схоже, ви створили другий обліковий запис, який також буде заважати вашій здатності коментувати всередині своєї теми та приймати відповідь. Див. Розділ Об’єднати мої акаунти, щоб об’єднати ваші облікові записи, що вирішить проблему.
fixer1234

Дякуємо за допомогу та додали редагування заголовка. Як не дивно, обидва облікові записи були створені під одним електронним адресою, що зробило це доволі заплутаним, чому вони в першу чергу були окремими;)
JasonD

Відповіді:


2

Ось простий скрипт bash, який зробить те, що ви хочете (я думаю): 1) рекурсивно знайде всі файли MOV та конвертує їх, 2) належним чином замінить розширення файлу .mov на розширення файлу .mp4.

#!/bin/bash
while read mov; do
  mp4=$(echo "$mov"|sed -e 's|\.mov$|.mp4|i')
  if [ "$mov" == "$mp4" ]; then
    echo "Failed to generate unique MP4 filename for file $mov"
    exit 1
  fi
  echo ffmpeg -i "$mov" -c:v libx264 -f mp4 "$mp4"
done < <(find . -type f -iname '*.mov')

Як написано, це фактично не буде робити перетворення, воно просто повторює команду ffmpeg, яка буде запущена. Після того, як ви впевнені, що це зробить те, що ви хочете, просто видаліть "відлуння" перед командою ffmpeg.


Зауважте, що в OS X вам слід замінити сед-бінарний файл, щоб він працював наступною командою: варити інсталяцію gnu-sed - з іменами за замовчуванням
Хосеп Альсіна

0

чи допомагає це?

for i in `find . -name "*.mov" -print0| xargs -0`; do echo ffmpeg -i $i -c:v libx264 -f mp4 ${i%.mov}.mp4; done

видаліть луну, якщо вас влаштовує створена команда ffmpeg.

тут враховуються імена файлів, що містять один або кілька пробілів (через -print0 та xargs -0)


1
"це допомагає?" Ви публікуєте відповідь, яку ви не перевірили?
DavidPostill

Дійсно, коментар був опублікований після тестування «пошуку файлів» та «заміни mov на mp4», але я не був впевнений у синтаксисі ffmpeg, оскільки я не використовую ffmpeg. Крім того, в ОП була краща команда пошуку (використовуючи -типи f та -iname, які я опустив).
нагу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.