Board logo

标题: [文件操作] [已解决]批处理ffmpeg单视频根据音频时长拼接的问题 [打印本页]

作者: 877    时间: 2024-3-27 11:49     标题: [已解决]批处理ffmpeg单视频根据音频时长拼接的问题

本帖最后由 877 于 2024-3-27 19:04 编辑

当前目录内只有1个mp4视频和1个wav配音,
想将视频复制拼接成超过wav配音时长5秒的视频!
单一mp4视频时长短,想将这个视频复制拼接超过wav时长~
搞了两天了搞不定~求大神指点!谢谢~
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. REM 获取wav配音时长
  4. for %%I in (*.wav) do (
  5.     for /f %%A in ('ffprobe -v error -show_entries format^=duration -of default^=noprint_wrappers^=1:nokey^=1 "%%I"') do (
  6.         set "wav_duration=%%A"
  7.     )
  8. )
  9. REM 获取视频时长
  10. for %%J in (*.mp4) do (
  11.     for /f %%B in ('ffprobe -v error -show_entries format^=duration -of default^=noprint_wrappers^=1:nokey^=1 "%%J"') do (
  12.         set "video_duration=%%B"
  13.     )
  14. )
  15. REM 计算需要拼接的视频时长
  16. set /a target_duration=wav_duration+5
  17. REM 复制并拼接视频
  18. for %%K in (*.mp4) do (
  19.     ffmpeg -i "concat:%%K|%%K" -c copy -t !target_duration! output1.mp4
  20. )
  21. endlocal
复制代码

作者: 77七    时间: 2024-3-27 12:00

尽量取一个合适的标题
标题违规以语意模糊、不利于论坛搜索为常见,常见的形式有:


         (1) 万能标题类:关于××、××的问题、求助、求一个代码、这样的代码怎么
    写……
         (2) 催命类:十万火急、在线等、跪求、雪地裸体跪求……
         (3) 指名求助类:高手请进、版主请进、××请进……
         (4) 博取同情类:菜鸟求助、新手请教、帮帮小妹……


批处理之家论坛发帖规则[2009.3.6更新]
作者: 877    时间: 2024-3-27 12:07

回复 2# 77七


    好的,已经修正标题。

求助77七大佬~谢谢您~
作者: 77七    时间: 2024-3-27 13:51

  1. @echo off
  2. cd /d "%~dp0"
  3. for %%a in (wav mp4) do (
  4. for %%i in (*.%%a) do (
  5. for /f "delims=" %%j in ('ffprobe -v error -show_entries format^=duration -of default^=noprint_wrappers^=1:nokey^=1 "%%i"') do (
  6. if not defined target_duration (
  7. for /f "delims=" %%k in ('powershell -c "%%j+5"') do (
  8. set target_duration=%%k
  9. )
  10. ) else (
  11. set video_duration=%%j
  12. )
  13. )
  14. )
  15. )
  16. for /f "tokens=1 delims=." %%a in ('powershell -c "%target_duration% / %video_duration% + 1"') do (
  17. for %%b in (*.mp4) do (
  18. (for /l %%l in (1,1,%%a) do (
  19. echo file '%%~fb'
  20. ))>x.txt
  21. )
  22. )
  23. ffmpeg -f concat -safe 0 -i x.txt -t %target_duration% -c copy output1.mp4
  24. del x.txt
  25. pause
复制代码

作者: 877    时间: 2024-3-27 16:58

回复 4# 77七


    大佬好,运行代码后并没有将这单一mp4视频合并为新的视频
x.txt里面内容为:
file 'C:\测试\output.mp4'
file 'C:\测试\output.mp4'
file 'C:\测试\output.mp4'
file 'C:\测试\output.mp4'
file 'C:\测试\output.mp4'
file 'C:\测试\output.mp4'
file 'C:\测试\output.mp4'
作者: 77七    时间: 2024-3-27 17:17

回复 5# 877


   
我这里测试成功,请提供一个测试失败的样本(wav、mp4文件、批处理文件)
作者: 877    时间: 2024-3-27 17:55

回复 6# 77七


    链接:https://pan.baidu.com/s/1_2zTOCzT8ieKnx3XVylqKw?pwd=a123
提取码:a123
作者: 877    时间: 2024-3-27 17:58

回复 6# 77七


    批处理文件就是您的代码,运行之后出现这个,没有拼接视频~
  1. ffmpeg version 6.0-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
  2.   built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  3.   configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
  4.   libavutil      58.  2.100 / 58.  2.100
  5.   libavcodec     60.  3.100 / 60.  3.100
  6.   libavformat    60.  3.100 / 60.  3.100
  7.   libavdevice    60.  1.100 / 60.  1.100
  8.   libavfilter     9.  3.100 /  9.  3.100
  9.   libswscale      7.  1.100 /  7.  1.100
  10.   libswresample   4. 10.100 /  4. 10.100
  11.   libpostproc    57.  1.100 / 57.  1.100
  12. 请按任意键继续. . .
复制代码

作者: 77七    时间: 2024-3-27 18:45

回复 8# 877


   我试了,正常,如果没有把批处理代码与其它代码一起使用,换个ffmpeg版本试试。
作者: 877    时间: 2024-3-27 19:03

回复 9# 77七


    换了个版本可以了,一语点醒梦中人!感谢大佬!
作者: 877    时间: 2024-3-27 21:32

回复 9# 77七


    大佬,在中文路径下运行时,加上chcp 65001 > nul之后可以正常运行~

但是后面我还想继续运行其他代码。请问如何结束chcp 65001 > nul
作者: 77七    时间: 2024-3-27 22:28

回复 11# 877


这个不好中途切换
4楼代码保存为ansi编码格式执行遇到什么问题了吗?
作者: 877    时间: 2024-3-27 22:57

回复 12# 77七


没事了大佬,谢谢您~




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