Board logo

标题: [文本处理] 求助批处理获取wav时长切割mp4 [打印本页]

作者: 877    时间: 2023-10-23 16:21     标题: 求助批处理获取wav时长切割mp4

如何实现获取a.wav的时长,然后把b.mp4切割成和其一样?

最好是弄成获取本文件夹下wav,然后切割本文件夹下mp4这种。

感谢大佬~


另一个思路是获取wav时长,然后把mp4变速成wav时长一致。
这个要是能弄好最好了...

在此感谢站长大大了!
作者: Batcher    时间: 2023-10-23 18:42

回复 1# 877


参考:
https://mp.weixin.qq.com/s/uYfEnWYtEAwgN_NnoHyQ6Q
作者: 877    时间: 2023-10-23 18:58

回复 2# Batcher


   非常感谢老大出的教程!万分感谢!

只是执行场景1和2都没生成出来变速的视频,执行场景1直接黑闪了一下,生成了一个0字节的output.mp4。还望指教
作者: 877    时间: 2023-10-23 19:46

回复 2# Batcher


    老大, 弄成获取wav时长,然后切割mp4为相同时间。要怎样写呢?变速那个教程试了没成功...
作者: Batcher    时间: 2023-10-23 20:23

回复 3# 877


请参考Q-04把test.bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA

请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: 877    时间: 2023-10-23 20:43

回复 5# Batcher



大佬您看下吧
作者: buyiyang    时间: 2023-10-23 22:42

回复 6# 877
第23行有个笔误,应该为set "SecondMp4=%CS%"
  1. @echo off
  2. REM 1、下载并安装 FFmpeg 这个命令行工具
  3. REM https://github.com/BtbN/FFmpeg-Builds/releases
  4. REM 2、根据自己电脑实际安装路径设置以下临时环境变量
  5. set "path=C:\Program Files\ffmpeg\ffmpeg-n6.0-latest-win64-gpl-6.0\bin\;%path%"
  6. cd /d "%~dp0"
  7. set "OutputName=output.mp4"
  8. for %%i in (*.wav) do (
  9.     set "InputWav=%%i"
  10. )
  11. for %%i in (*.mp4) do (
  12.     set "InputMp4=%%i"
  13. )
  14. for /f "tokens=2-5 delims=:., " %%a in ('ffmpeg.exe -i "%InputWav%" 2^>^&1 ^| find "Duration:"') do (
  15.     call :Time2SS %%a %%b %%c %%d
  16. )
  17. set "SecondWav=%CS%"
  18. for /f "tokens=2-5 delims=:., " %%a in ('ffmpeg.exe -i "%InputMp4%" 2^>^&1 ^| find "Duration:"') do (
  19.     call :Time2SS %%a %%b %%c %%d
  20. )
  21. set "SecondMp4=%CS%"
  22. set "VideoFactor=%SecondWav%/%SecondMp4%"
  23. set "AudioFactor=%SecondMp4%/%SecondWav%"
  24. ffmpeg.exe -i "%InputMp4%" -vf "setpts=%VideoFactor%*PTS" -af "atempo=%AudioFactor%" "%OutputName%"
  25. goto :eof
  26. :Time2SS
  27. set /a HH=1%1-100,MM=1%2-100,SS=1%3-100
  28. set "CS=(%HH%*3600+%MM%*60+%3.%4)"
  29. goto :eof
复制代码

作者: Batcher    时间: 2023-10-23 22:44

回复 6# 877


    根据这个截图可以看出,场景1代码23行的SeconMp4需要修改成SecondMp4
作者: 877    时间: 2023-10-24 01:18

回复 7# buyiyang


    感谢大佬,帮忙看下这段代码,如何裁剪完后,删除原文件吧~后面加del哪个呢?
  1. CD /D "%~dp0"
  2. md "1"
  3. for %%i in (*.flv *.mp4 *.mkv *.mov) do ffmpeg.exe -i "%%i" -vf crop=1080:1520:0:200 ".\1\%%~nxi"
  4. del %%i 么?
  5. pause
复制代码

作者: 877    时间: 2023-10-24 02:15

回复 8# Batcher


    大佬,我想在一个bat里面继续执行下面的命令,需要删除原wav和mp4,只保留output.mp4,那个goto :eof应该怎样改呢?
作者: 877    时间: 2023-10-24 02:47

回复 7# buyiyang


    大佬。还有个问题,是根据wav的时长合并成mp4了,但是没有声音。。。
作者: 77七    时间: 2023-10-24 08:56





执行下面代码后想继续执行后面的命令,goto应该怎样改呢?
  1. ffmpeg.exe -i "%InputMp4%" -vf "setpts=%VideoFactor%*PTS" -af "atempo=%AudioFactor%" "%OutputName%"
  2. goto :eof
复制代码



写在这个 goto :eof 前
作者: 877    时间: 2023-10-24 09:01

回复 12# 77七


    大佬,怎样在这段代码后面加上del删除源文件,只保留合并后的mp4。求指教~
  1. @echo off
  2. REM 1、下载并安装 FFmpeg 这个命令行工具
  3. REM https://github.com/BtbN/FFmpeg-Builds/releases
  4. REM 2、根据自己电脑实际安装路径设置以下临时环境变量
  5. set "path=C:\Program Files\ffmpeg\ffmpeg-n6.0-latest-win64-gpl-6.0\bin\;%path%"
  6. cd /d "%~dp0"
  7. set "OutputName=output.mp4"
  8. for %%i in (*.wav) do (
  9.     set "InputWav=%%i"
  10. )
  11. for %%i in (*.mp4) do (
  12.     set "InputMp4=%%i"
  13. )
  14. for /f "tokens=2-5 delims=:., " %%a in ('ffmpeg.exe -i "%InputWav%" 2^>^&1 ^| find "Duration:"') do (
  15.     call :Time2SS %%a %%b %%c %%d
  16. )
  17. set "SecondWav=%CS%"
  18. for /f "tokens=2-5 delims=:., " %%a in ('ffmpeg.exe -i "%InputMp4%" 2^>^&1 ^| find "Duration:"') do (
  19.     call :Time2SS %%a %%b %%c %%d
  20. )
  21. set "SecondMp4=%CS%"
  22. set "VideoFactor=%SecondWav%/%SecondMp4%"
  23. set "AudioFactor=%SecondMp4%/%SecondWav%"
  24. ffmpeg.exe -i "%InputMp4%" -vf "setpts=%VideoFactor%*PTS" -af "atempo=%AudioFactor%" "%OutputName%"
  25. goto :eof
  26. :Time2SS
  27. set /a HH=1%1-100,MM=1%2-100,SS=1%3-100
  28. set "CS=(%HH%*3600+%MM%*60+%3.%4)"
  29. goto :eof
复制代码

作者: 77七    时间: 2023-10-24 09:05

回复 13# 877


  
  1. ffmpeg.exe -i "%InputMp4%" -vf "setpts=%VideoFactor%*PTS" -af "atempo=%AudioFactor%" "%OutputName%"
  2. del "%InputMp4%";"%InputWav%"
  3. goto :eof
复制代码

作者: 877    时间: 2023-10-24 09:12

回复 14# 77七


    感谢大佬!还是这段代码,看站长大大写的是实现音画同步,我合成后的output.mp4是根据wav变速合成了,但是没有声音。请大佬给看下是哪里问题呢?
作者: 877    时间: 2023-10-24 09:27

回复 14# 77七


    大佬,这段代码如何删除已裁剪好的原文件呢?
  1. CD /D "%~dp0"
  2. md "裁剪好"
  3. for %%i in (*.flv *.mp4 *.mkv *.mov) do ffmpeg.exe -i "%%i" -vf crop=1080:1520:0:200 ".\裁剪好\%%~nxi"
  4. pause
复制代码

作者: Batcher    时间: 2023-10-24 09:47

回复 16# 877


第3行下面加一句:
  1. del /f /q *.flv *.mp4 *.mkv *.mov 2>nul
复制代码

作者: 77七    时间: 2023-10-24 11:01

回复 15# 877


   只是变速了,没有合成,如果原来的mp4是没有声音的,就仍然没有声音。
作者: Batcher    时间: 2023-10-24 18:02

回复 11# 877


场景1代码第32行下面增加一行:
  1. ffmpeg.exe -i "%InputWav%" -i "%OutputName%" -c:v copy -c:a aac -strict experimental "output_mix.mp4"
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2