Может ли Win10 GURU автоматизировать это решение для разделения видео при изменении разрешения?

379
EverT

Может ли Windows10 Guru помочь автоматизировать это?

Мне не удалось автоматизировать решение лорда Некберда в следующем посте: Как разделить видеофайлы при обнаружении изменения разрешения? (т.е. записанные потоки, содержащие несколько ширин)

В идеале я должен либо запустить пакетный файл для всего каталога видео, либо, по крайней мере, поместить видео в пакетный файл в проводнике.

ПРИМЕР ФАЙЛА (temporarily available): Example.flv

Сбои:
я прибегнул к Powershell в качестве последнего средства, но это приводит к проблемам с подписью кода.
Я попытался извлечь уникальные изменения с помощью командного файла, но не смог заставить переменные сохранить их значения внутри циклов или подпрограмм. Одна из многих попыток:

SETLOCAL ENABLEDELAYEDEXPANSION SET lastres=none FOR /F "eol=; tokens=1,2,3 delims=, " %%i in (allkeyframes.txt) do (  if %j == %lastres% (echo "ignore") ELSE ( set lastres=%%j echo %%j %%i %%k  echo !lastres!  )  )  

Я пытался извлечь содержимое файла resolutionchanges.txt, SET /P segs=<resolutionchanges.txtно получил только специальные символы и 0.

SET /P segs=<resolutionchanges.txt set filenam=%1 echo %segs% echo %filenam% echo S:\_sys\ffmpeg\bin\ffmpeg -i %1 -map 0 -c copy -segment_times %segs% -reset_timestamps 1 -f segment %filenam%_%%03d.flv ) pause 

Вот работающий в данный момент «ручной» процесс:

перетащите видео в пакетный файл, который содержит:

ffprobe -v ошибка -show_entries frame = pkt_pts_time, width, height -select_streams v -of csv = p = 0% 1> allkeyframes.txt

(образец allkeyframes.txt ...)

13.652000,640,480 13.755000,640,480 13.597000,480,360 13.652000,480,360 

вставьте этот текст в POWERSHELL:

$o="" $n=0 foreach($line in (Get-Content allkeyframes.txt)){ $nline = $line.Split(",") $nline2=($nline[1]+$nline[2]) if ($nline2 -ne $preventry) { $n0=$nline[0] $o="$o,$n0" $n=$n0 } $preventry = $nline2 } if ($o.length -gt 1){ echo $o.Remove(0,1) > resolutionchanges.txt } else { Write-Host "No resolution changes found" -ForegroundColor Red } 

(Resolutionchanges.txt :)

13.597000,25.618000,33.628000,45.598000 

введите следующее в командном окне, после вставки содержимого resolutionchanges.txt и изменения «input.flv» на имя видео (Win10 отклонил мои попытки пакетирования этого):

ffmpeg -i input.flv -map 0 -c copy -segment_times 13.597000,25.618000,33.628000,45.598000 -reset_timestamps 1 -f сегмент output_% 03d.flv

2
Поскольку это все тот же вопрос, что и раньше, вы должны прокомментировать свои проблемы в этом другом посте, чтобы лорд Некбород мог улучшить свой ответ и получить полностью рабочее решение. music2myear 6 лет назад 0
@ music2myear Первоначальный вопрос состоял в основном из двух вопросов, поэтому я предложил разбить его на две части: 1) как использовать ffmpeg для разделения видео на основе изменения ширины видео x высоты (на что уже дан ответ) и 2) как реализовать это в сценарий Windows (о котором я ничего не знаю). LordNeckbeard 6 лет назад 0
@ EverT Можно ли загрузить короткий образец видео, чтобы поиграть с ним? nixda 6 лет назад 0
@nixda Я добавил в сообщение файл со смешанным разрешением 3Meg. EverT 6 лет назад 0

0 ответов на вопрос