Как ffmpeg помирил Panasonic X800 с iMovie

Как и большенство семейных людей, периодически, я сталкиваюсь с необходимостью снять на камеру детский праздник и превратить полученное файлы в законченный фильм. Но не всё так просто…

С первым этапом всё достаточно просто. Взял в руки видеокамеру, поймал в объектив ребенка и снимай. Камеры у меня Panasonic HC-X800. Она записывает файлы формата AVCHD (*.MTS) c кодированием H264 и разрешением 1080p/50fps на SDHC карту памяти . С карты памяти файлы попадают в компьютер для дальнейшей обработки.

Вот здесь я и сталкиваюсь с трудностями. То при импорте файлов с камеры вылетает iMovie, то получаю «ошибку рендеринга -50» при экспорте готового проекта. В общем, я сделал для себя вывод, что файлы с этой камеры не совместимы с iMovie. Точно определить причину я не могу, программа либо молчаливо вываливается, либо выдает неинформативные ошибки.

В качестве эксперимента, я пробовал снимать с помощью зеркального фотоаппарата Canon 70D. Полученные файлы были обработана iMovie без возражений. После этого можно было бы снимать видео с помощью фотоаппарата, но не дают покоя мысли о потраченных на видео камеру деньгах, да и снимать на легкую камеру удобнее.

В этой ситуации у меня оставался один вариант, привести файлы с моей видео камеры к тому виду, который сможет принять iMovie. В Интернете предлагают несколько программ преобразования файлов формата AVCHD в MOV. Все эти программы хотят отдельных денежек. Но мне удалось отделаться малой кровью, ведь все эти программы используют для преобразования файлов ffmpeg.

Далее все свелось к выполнению пары команд в консоли. Сначала необходимо приготовить файл со списком частей ролика, ведь камера создает файлы размером до 4Гб. Я назвал файл просто — list.

file ‘./00000.MTS’
file ‘./00001.MTS’
file ‘./00002.MTS’

Далее меняем контейнер видео файла с MTS на MP4 одновременно с склейкой файлов в один:

ffmpeg -f concat -i list -sn -c:a copy -c:v copy out.mp4

Если ваши файлы не являются частями одного ролика, то и склеивать их нет необходимости:

ffmpeg -i 00000.MTS -sn -c:a copy -c:v copy out.mp4

После всех указанных манипуляций я получил файлы пригодные для использования в iMovie. Хочу заметить, что при преобразовании файлов не происходит ухудшения их качества.

UP: Скрипт для преобразования всех MTS файлов в текущем каталоге:

#!/bin/bash
for file in *.MTS; do
ffmpeg -i «$file» -sn -c:a copy -c:v copy -async 1 ${file/.MTS/.mp4};
done;#!/bin/bash

PS: Надеюсь, эта заметка поможет другим любителям домашнего видео…

Ссылки по теме:
Опции FFMPEG
Склейка файлов