docs:blog:2021:12:kak_dobavljat_glavy_v_mp4_s_pomoschju_ffmpeg_i_powershell
Как добавлять главы в MP4 с помощью FFmpeg и Powershell
Тут появилась недавно необходимость добавить в видео-файл главы… Сразу скажу, что вдохновился я вот этой статьёй. Быть может кому-то она окажется даже полезнее, так как там описана реализация на python, я же опишу как сделал это с powershell.
Итак. Подробнее читайте в той статье, ссылку на которую я привёл в начале. Там описана как структура файлов, так и технические моменты. Здесь же я просто расскажу про свою реализацию.
- Все файлы должны находиться в одной директории (в ней же выполняется и скрипт
set-chapters.ps1
) - ffmpeg прописана у меня в переменной PATH, вам, возможно, понадобится указать путь к исполняемому файлу
ffmpeg.exe
1) - В директории нужно создать файл
chapters.csv
в котором указывается конечное время для главы2) - Перед запуском скрипта в папке должно быть три файла:
INPUT.avi # оригинальный видео-файл chapters.csv # описание глав set-chapters.ps1 # наш скрипт
- Запускаем
set-chapters.ps1
- На выходе мы получим файл
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;Чарльз Оливейра - Дастин Порье
Скрипт формирующий данные для записи глав и переконвертирующий видео:
В скрипте последовательность конца строки должна быть выставлена как
LF
- 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