在 Windows 中的批处理文件中使用 ffmpeg 剪切视频结尾的最后 30 秒

在 Windows 中的批处理文件中使用 ffmpeg 剪切视频结尾的最后 30 秒

这是我目前所拥有的:

for i in *.mp4; do ffprobe -show_format -i "%i"

// 获取持续时间,然后需要以某种方式减去 30 秒,并将这两个命令结合起来

ffmpeg -ss 0 -i "$i" -t %duration% "${i%.mp4}-cut.mp4

我以为这会很简单,呃......为什么你没有-结束修剪切换,ffmpeg?或者可以吗?也许另一个像这样的命令行可以?

答案1

代表自己解决问题的原贴作者发帖:

_trim.bat

@echo off
for %%i in (*.mp4) do (
call _trim2.bat "%%i"
)

_trim2.bat

@echo off
for /f "tokens=*" %%a in ('_ffprobe -show_format -i %1 ^| find "duration"') do set _duration=%%a
set _duration=%_duration:~9%
for /f "delims=. tokens=1*" %%b in ('echo %_duration%') do set /a "_durS=%%b"
for /f "delims=. tokens=2*" %%c in ('echo %_duration%') do set "_durMS=%%c"
rem following line is seconds to cut
set /a "_durS-=30"
set "_newduration=%_durS%.%_durMS%"
set "_output=%~n1"
md _fixed
_ffmpeg -ss 0 -i %1 -t %_newduration% -c copy "_fixed\%_output%.mp4"

处理后的文件将放入.\_fixed\相同名称.mp4并且都将缩短30秒。

答案2

对于我拥有的一些文件,我必须使用完全相同的方法。

当我执行时,_trim2.bat它会出现 Windows 无法识别的错误_ffprobe_ffmpeg当然这不是由下划线引起的)。

当我尝试在没有下划线的情况下执行时,它会分别给出如下ffprobe错误ffmpeg

Missing argument for option 'i'
Unrecognized option '15.'.(duration is 15)

答案3

我希望这对大家有帮助...... 对于上述情况来说可能已经太晚了,但无论谁去搜索...祝你有个愉快的一天

相关内容