Может ли 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