标题: [文本处理] 求助批处理获取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%"- @echo off
- REM 1、下载并安装 FFmpeg 这个命令行工具
- REM https://github.com/BtbN/FFmpeg-Builds/releases
- REM 2、根据自己电脑实际安装路径设置以下临时环境变量
- set "path=C:\Program Files\ffmpeg\ffmpeg-n6.0-latest-win64-gpl-6.0\bin\;%path%"
-
- cd /d "%~dp0"
- set "OutputName=output.mp4"
- for %%i in (*.wav) do (
- set "InputWav=%%i"
- )
- for %%i in (*.mp4) do (
- set "InputMp4=%%i"
- )
-
- for /f "tokens=2-5 delims=:., " %%a in ('ffmpeg.exe -i "%InputWav%" 2^>^&1 ^| find "Duration:"') do (
- call :Time2SS %%a %%b %%c %%d
- )
- set "SecondWav=%CS%"
- for /f "tokens=2-5 delims=:., " %%a in ('ffmpeg.exe -i "%InputMp4%" 2^>^&1 ^| find "Duration:"') do (
- call :Time2SS %%a %%b %%c %%d
- )
- set "SecondMp4=%CS%"
-
- set "VideoFactor=%SecondWav%/%SecondMp4%"
- set "AudioFactor=%SecondMp4%/%SecondWav%"
-
- ffmpeg.exe -i "%InputMp4%" -vf "setpts=%VideoFactor%*PTS" -af "atempo=%AudioFactor%" "%OutputName%"
- goto :eof
-
- :Time2SS
- set /a HH=1%1-100,MM=1%2-100,SS=1%3-100
- set "CS=(%HH%*3600+%MM%*60+%3.%4)"
- goto :eof
复制代码
作者: Batcher 时间: 2023-10-23 22:44
回复 6# 877
根据这个截图可以看出,场景1代码23行的SeconMp4需要修改成SecondMp4
作者: 877 时间: 2023-10-24 01:18
回复 7# buyiyang
感谢大佬,帮忙看下这段代码,如何裁剪完后,删除原文件吧~后面加del哪个呢?- CD /D "%~dp0"
- md "1"
- for %%i in (*.flv *.mp4 *.mkv *.mov) do ffmpeg.exe -i "%%i" -vf crop=1080:1520:0:200 ".\1\%%~nxi"
- del %%i 么?
- 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应该怎样改呢?
- ffmpeg.exe -i "%InputMp4%" -vf "setpts=%VideoFactor%*PTS" -af "atempo=%AudioFactor%" "%OutputName%"
- goto :eof
复制代码
写在这个 goto :eof 前
作者: 877 时间: 2023-10-24 09:01
回复 12# 77七
大佬,怎样在这段代码后面加上del删除源文件,只保留合并后的mp4。求指教~- @echo off
- REM 1、下载并安装 FFmpeg 这个命令行工具
- REM https://github.com/BtbN/FFmpeg-Builds/releases
- REM 2、根据自己电脑实际安装路径设置以下临时环境变量
- set "path=C:\Program Files\ffmpeg\ffmpeg-n6.0-latest-win64-gpl-6.0\bin\;%path%"
-
- cd /d "%~dp0"
- set "OutputName=output.mp4"
- for %%i in (*.wav) do (
- set "InputWav=%%i"
- )
- for %%i in (*.mp4) do (
- set "InputMp4=%%i"
- )
-
- for /f "tokens=2-5 delims=:., " %%a in ('ffmpeg.exe -i "%InputWav%" 2^>^&1 ^| find "Duration:"') do (
- call :Time2SS %%a %%b %%c %%d
- )
- set "SecondWav=%CS%"
- for /f "tokens=2-5 delims=:., " %%a in ('ffmpeg.exe -i "%InputMp4%" 2^>^&1 ^| find "Duration:"') do (
- call :Time2SS %%a %%b %%c %%d
- )
- set "SecondMp4=%CS%"
-
- set "VideoFactor=%SecondWav%/%SecondMp4%"
- set "AudioFactor=%SecondMp4%/%SecondWav%"
-
- ffmpeg.exe -i "%InputMp4%" -vf "setpts=%VideoFactor%*PTS" -af "atempo=%AudioFactor%" "%OutputName%"
- goto :eof
-
- :Time2SS
- set /a HH=1%1-100,MM=1%2-100,SS=1%3-100
- set "CS=(%HH%*3600+%MM%*60+%3.%4)"
- goto :eof
复制代码
作者: 77七 时间: 2023-10-24 09:05
回复 13# 877
- ffmpeg.exe -i "%InputMp4%" -vf "setpts=%VideoFactor%*PTS" -af "atempo=%AudioFactor%" "%OutputName%"
- del "%InputMp4%";"%InputWav%"
- goto :eof
复制代码
作者: 877 时间: 2023-10-24 09:12
回复 14# 77七
感谢大佬!还是这段代码,看站长大大写的是实现音画同步,我合成后的output.mp4是根据wav变速合成了,但是没有声音。请大佬给看下是哪里问题呢?
作者: 877 时间: 2023-10-24 09:27
回复 14# 77七
大佬,这段代码如何删除已裁剪好的原文件呢?- CD /D "%~dp0"
- md "裁剪好"
- for %%i in (*.flv *.mp4 *.mkv *.mov) do ffmpeg.exe -i "%%i" -vf crop=1080:1520:0:200 ".\裁剪好\%%~nxi"
- pause
复制代码
作者: Batcher 时间: 2023-10-24 09:47
回复 16# 877
第3行下面加一句:- 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行下面增加一行:- ffmpeg.exe -i "%InputWav%" -i "%OutputName%" -c:v copy -c:a aac -strict experimental "output_mix.mp4"
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |