Я видел несколько замечательных статей о том, как использовать ffmpeg для копирования метаданных из одного файла в другой без перекодирования. Но у меня есть более 100 файлов, и я хотел бы сделать это в пакетной операции. Какие-либо предложения?

Дополнительная информация: у меня есть 2 папки, одна содержит видеофайлы с правильными метаданными, другая содержит видеофайлы с неверными метаданными. Файлы имеют одинаковые соответствующие имена файлов.

1 ответ1

0

Я собираюсь дать вам ответ сценариев, вполне может быть более общий инструмент для этого.

Для будущих читателей этот сценарий описывает, как копировать метаданные: Использование ffmpeg для копирования метаданных из одного файла в другой.

Следующий скрипт перебирает файлы в одном каталоге, находит соответствующие файлы во втором каталоге и затем объединяет эти два файла в третий выходной каталог

dir1=FIRST DIRECTORY
dir2=SECOND DIRECTORY
output=OUTPUT DIRECTORY
for file in $(ls $dir1); do
  ffmpeg -i "$dir1/$file" -i "$dir2/$file" -map 1 -c copy \
   # copies all global metadata from in0.mkv to out.mkv  
   -map_metadata 0 \
   # copies video stream metadata from in0.mkv to out.mkv
   -map_metadata:s:v 0:s:v \
   # copies audio stream metadata from in0.mkv to out.mkv
   -map_metadata:s:a 0:s:a \
   "$outdir/$file"
done

Команда отображения метаданных адаптирована из цитируемого ответа.

Если вы хотите сделать что-то повторно используемое, вы можете поместить это в скрипт со следующим заголовком (удалите присвоение для dir1, dir2 и выведите его в приведенном выше скрипте). И затем назовите это как script.sh dir1 dir2 outdir

#!/bin/bash
set -x errexit # exit immediately on error
dir1="$1"
dir2="$2"
output="$3"

Предупреждение: у меня нет ни одного из этих скриптов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .