batch-file - 我需要剪切 MP4 视频。开头部分和结尾部分以批处理方式

标签 batch-file video ffmpeg batch-processing

我有几个培训视频。所有 .MP4。

我想从它们的整个文件夹中删除开头的 3.5 秒和结尾的 4.5 秒...

我知道 ffmpeg 和 ffprobe - 但我对它们的了解和掌握都有限。

有人可以为此提供脚本,或者至少提供一个程序来简化这对我来说吗?我一直在搜索,但每次都遇到死胡同或无法运行的脚本。

我也愿意使用 Linux/Windows 但不是 mac。

编辑:第一部分完成。将继续进一步研究该命令以学习批处理;这是简单的部分,如何批量修剪整个 MP4 文件夹:

for %%a in ("*.mp4") do ffmpeg -i "%%a" -ss 00:00:03.5 -vcodec copy -acodec copy "newfiles\%%~na.mp4"

pause

最佳答案

非常感谢这里的每一个人鼓励我继续寻找,我找到了一个完美的解决方案。这里是。恐怕即使在评论中给出的例子也让我望而却步,但我仍然会尝试阅读并自学这些命令是如何工作的。再次感谢。替换 8.25(结束修剪)和 4.25(开始修剪)并更改值,直到您对输出满意为止。

@Echo Off
SetLocal
Set "ext=mp4"
Set "opts=-v quiet"
Set "opts=%opts% -print_format "compact=print_section=0:nokey=1:escape=csv""
Set "opts=%opts% -show_entries "format=duration""
If Exist *.%ext% (If Not Exist "Trimmed\" MD Trimmed)
For %%a In (*.%ext%) Do Call :Sub "%%~a"
Exit/B

:Sub
For /f "Tokens=1* Delims=." %%a In (
    'FFProbe %opts% %1') Do (Set/A "ws=%%a-8.25" & Set "ps=%%b")
rem If %ws% Lss 20 GoTo :EOF
Set/A hh=ws/(60*60), lo=ws%%(60*60), mm=lo/60, ss=lo%%60
If %hh% Lss 10 Set hh=0%hh%
If %mm% Lss 10 Set mm=0%mm%
If %ss% Lss 10 Set ss=0%ss%
FFMpeg -i %1 -ss 00:00:04.2500 -to %hh%:%mm%:%ss%.%ps:~,3% -c:v copy -c:a copy "Trimmed\%~1"

关于batch-file - 我需要剪切 MP4 视频。开头部分和结尾部分以批处理方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31862634/

相关文章:

javascript - 在mvc中播放.mp4视频时如何停止 slider ?

windows-xp - 如何从另一个bat 文件在后台运行一个bat 文件?

xml - 如何使用for xml路径查询结果防止sqlcmd截断

powershell - 从 cmd 调用 powershell 命令时出错

image - FFmpeg:计算将图像和 .mp3 转换为视频的时间

macos - 在 OSX 上优化使用 hevc_videotoolbox 和 ffmpeg

video - 使用 ffmpeg 编码高质量视频

command-line - 将批处理文件结果打印到文本文件

ios - Whatsapp 没有从 UIActivityViewController 中的 assetURL 中选择视频

ios - 使用 ffmpeg 将 Mp4 转为 HLS