Как обрезать последние N секунд из видео TS
Есть ли способ обрезать последние N секунд из видео? Формат в этом случае "MPEG-TS".
Я знаю, что с FFMPEG есть опция для времени и продолжительности запуска, но ни одна из них не может быть использована в этом случае. Видео может иметь любую возможную длину, поэтому продолжительность не может быть фиксированным значением.
Кроме того, решение должно работать в командной строке Windows и может быть автоматизировано.
1 ответ
Решение
Желаемая функциональность может быть достигнута с помощью следующих шагов:
Используйте ffmpeg, чтобы определить длину видео. Используйте, например, сценарий cmd:
set input=video.ts ffmpeg -i "%input%" 2> output.tmp rem search " Duration: HH:MM:SS.mm, start: NNNN.NNNN, bitrate: xxxx kb/s" for /F "tokens=1,2,3,4,5,6 delims=:., " %%i in (output.tmp) do ( if "%%i"=="Duration" call :calcLength %%j %%k %%l %%m ) goto :EOF :calcLength set /A s=%3 set /A s=s+%2*60 set /A s=s+%1*60*60 set /A VIDEO_LENGTH_S = s set /A VIDEO_LENGTH_MS = s*1000 + %4 echo Video duration %1:%2:%3.%4 = %VIDEO_LENGTH_MS%ms = %VIDEO_LENGTH_S%s
Рассчитать начальную и конечную точку для операции клипа
rem ** 2:00 for the start, 4:00 from the end set /A starttime = 120 set /A stoptime = VIDEO_LENGTH_S - 4*60 set /A duration = stoptime - starttime
Клип видео. В качестве бонуса преобразуйте файл TS в более оптимальный формат, такой как H.264
set output=video.mp4 vlc -vvv --start-time %starttime% --stop-time %stoptime% "%input%" --sout=#transcode{vcodec=h264,vb=1200,acodec=mp3, ab=128}:standard{access=file,dst=%output%} vlc://quit rem ** Handbrake has much better quality ** handbrakeCLI -i %input% -o %output% -e x264 -B 128 -q 25 --start-at duration:%starttime% --stop-at duration:%duration%