Обработка видео. Командная строка

Обработка видео. Командная строка

2021-10-21 · 2 мин. для прочтения

Обработка видео. Командная строка

Содержание

1 Инструментарий

1.1 ffmpeg

  • Комплексное решение по обработке видео.
  • Установка
    • Linux
      • Gentoo
        1emerge media-video/ffmpeg
        

1.2 mkvtoolnix

  • Инструменты для создания, изменения и проверки файлов формата Matroska.
  • Установка
    • Linux
      • Gentoo
        1emerge media-video/mkvtoolnix
        

2 Задачи

2.1 Перекодирование звуковой дорожки в видеофайле

  • Есть видеофайлы (в частности, в формате mp4).
  • При проигрывании на телевизоре нет звука.
  • Причина: звуковая дорожка закодирована с частотой дискретизации 48 кГц, а телевизор воспринимает только с частотой дискретизации 44,1 кГц.
  • В видеофайле одна видео-дорожка и одна аудио-дорожка.
  • Для перекодирования сделан командный файл:
     1#!/bin/bash
     2# recode-48to44.1
     3
     4OUTDIR_AUDIO=recoded-audio
     5OUTDIR=recoded
     6mkdir -p ${OUTDIR}
     7mkdir -p ${OUTDIR_AUDIO}
     8
     9for i in *.mp4
    10do
    11    NAME=`basename "${i}" .mp4`
    12    ffmpeg -i "${i}" -vn -ar 44100 -c:a libfdk_aac -b:a 192k "${OUTDIR_AUDIO}"/"${NAME}".aac
    13    mkvmerge --default-language rus -o "${OUTDIR}"/"${NAME}".mkv --language 1:rus "${i}" --default-track 0:1 "${OUTDIR_AUDIO}"/"${NAME}".aac
    14done
    
  • Сначала мы с помощью ffmeg перекодируем аудио-дорожку:
    • -vn : игнорирование видео-дорожек;
    • -ar 44100 : частота дискретизации 44,1 кГц;
    • -c:a libfdk_aac : задаём кодек для формата AAC;
    • -b:a 192k : задаём битрейт.
  • С помощью mkvmerge сливаем файлы в новый (формата mkv):
    • --default-language rus : задаём язык по умолчанию для дорожек;
    • --language 1:rus : меняем язык аудио-дорожки в исходном файле;
    • --default-track 0:1 : ставим новую звуковую дорожку дорожкой по умолчанию.

2.2 Объединить несколько файлов mp4

  • Дано: набор файлов вида video1.mp4, расположенных в алфавитном порядке.
  • Создадим файл input.txt с названиями видео-файлов:
    1for i in $(ls *.mp4 | sort)
    2do
    3        echo file \'$(readlink -f "${i}")\' >>input.txt
    4done
    
  • Соединим видеофайлы:
    1ffmpeg -f concat -safe 0 -i input.txt -c copy output.mp4
    

2.3 Объединить несколько файлов webm

  • Можно объединить несколько файлов:
    1mkvmerge -o output.webm -w file1.webm + file2.webm
    

2.4 Объединить несколько файлов mkv

  • Можно объединить несколько файлов:
    1mkvmerge --language "1:ru" --title "Title" --generate-chapters when-appending -o output.mkv file1.mkv + file2.mkv
    
  • Кроме объединения, мы задали язык звуковой дорожки (русский) и каждый файл обозначили как главу.