Недавно, столкнулся со следующей задачей.
Есть роутер которые с подключенного винчестера в локальную сеть шарит медиа-данные: музыку, видео, фото и прочее. Сам роутер не обладает функцией транскодирования видео потоков, а не все девайсы умеют показывать видео в HD. Xbox 360 не стал исключением.
Изучив документацию по поддерживаемым форматам, было решено подготавливать видео для приставки закодированное h264 кодеком. Конвертировать будем на машине с установленным Linux. Для этого необходимо установить пакет ffmpeg.
Видео будем брать в формате mkv, хотя принципиальной разницы нет, есть разница в скорости кодирования и копирования файлов.
Вся работа сводится к одной команде:
ffmpeg -i inFile.mkv -vcodec copy -acodec aac -ac 2 -strict -2 outFile.mp4
Это для случая когда внутри mkv видео закодировано h264 кодеком, если же там другой кодек допустим mpeg, то команда немного измениться, нужно указать кодек для кодирования видео в параметре -vcodec, пример команды в этом случае:
ffmpeg -i inFile.mpeg -vcodec h264 -acodec aac -ac 2 -strict -2 outFile.mp4
Если файлов много, допустим нужно подготовить сезон любимого сериала, то набивать вручную и контролировать завершение не очень удобно. Поэтому можно написать простой скрипт на bash которые все сделает за нас, пока мы будем спать. На скорую руку вышло следующее:
#!/bin/bash for filename in *.mkv do newFileName=$filename'.mp4' convertCommand="ffmpeg -i $filename -vcodec copy -acodec aac -ac 2 -strict -2 $newFileName" eval $convertCommand done
Что он делает?
Берет каждый mkv файл в папке, копирует видео дорожку в новый файл без конвертации (потому что в mkv, как правило, внутри лежит видео закодированное необходимым нам кодеком h264), конвертирует аудио дорожку в aac и также записывает в новый файл. Все просто.
Этот скрипт закидываем в необходимую папку, даем права на запуск chmod +x script и запускаем. Немного ожидания и можно смотреть 😉