Philip Wiki

Персональный wiki-сайт

Инструменты пользователя

Инструменты сайта


docs:blog:2021:12:kak_dobavljat_glavy_v_mp4_s_pomoschju_ffmpeg_i_powershell

Как добавлять главы в MP4 с помощью FFmpeg и Powershell

Тут появилась недавно необходимость добавить в видео-файл главы… Сразу скажу, что вдохновился я вот этой статьёй. Быть может кому-то она окажется даже полезнее, так как там описана реализация на python, я же опишу как сделал это с powershell.

Итак. Подробнее читайте в той статье, ссылку на которую я привёл в начале. Там описана как структура файлов, так и технические моменты. Здесь же я просто расскажу про свою реализацию.

  1. Все файлы должны находиться в одной директории (в ней же выполняется и скрипт set-chapters.ps1)
  2. ffmpeg прописана у меня в переменной PATH, вам, возможно, понадобится указать путь к исполняемому файлу ffmpeg.exe1)
  3. В директории нужно создать файл chapters.csv в котором указывается конечное время для главы2)
  4. Перед запуском скрипта в папке должно быть три файла:
    INPUT.avi # оригинальный видео-файл
    chapters.csv # описание глав
    set-chapters.ps1 # наш скрипт
  5. Запускаем set-chapters.ps1
  6. На выходе мы получим файл OUTPUT.mp4 с главами

Пример файла chapters.csv:

chapters.csv
endtime;title
00:21:34;Превью
00:45:19;Раулиан Пэйва - Шон О'Мэлли
01:07:56;Кай Кара Франс - Коди Гарбрандт
01:45:50;Джефф Нил - Сантьяго Понзиниббио
02:21:25;Аманда Нунес - Джулианна Пенья
02:48:00;Чарльз Оливейра - Дастин Порье

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

set-chapters.ps1
$filename = 'INPUT.avi'
ffmpeg.exe -i $filename -f ffmetadata FFMETADATAFILE.txt
 
$table = Import-Csv .\chapters.csv -Delimiter ';'
$table | ForEach-Object {
    $time = $_.endtime -split ':'
    $end = [int](New-TimeSpan -Hours $time[0] -Minutes $time[1] -Seconds $time[2]).TotalMilliseconds
 
    if (!$start) {
        $start = '00:00:35' -split ':'
        $start = [int](New-TimeSpan -Hours $start[0] -Minutes $start[1] -Seconds $start[2]).TotalMilliseconds
    }
$chapter = @"
 
[CHAPTER]
TIMEBASE=1/1000
START=$start
END=$end
title=$($_.title)
 
"@
    $start = $end
 
    $chapter | Out-File -FilePath FFMETADATAFILE.txt -Append -NoNewline
 
}
 
ffmpeg.exe -i $filename -i FFMETADATAFILE.txt -map_metadata 1 -codec copy OUTPUT.mp4
1)
Или разместить утилиту в той же папке
2)
Которое по сути является началом следующей и именно на этой отметке будет создано превью, если последнее заложено в плеере
Только авторизованные участники могут оставлять комментарии.
docs/blog/2021/12/kak_dobavljat_glavy_v_mp4_s_pomoschju_ffmpeg_i_powershell.txt · Последнее изменение: 28.12.2021 19:52 — philip

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki