找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25081|回复: 12

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

[复制链接]
发表于 2024-3-27 11:49:18 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-3-27 12:00:52 | 显示全部楼层
尽量取一个合适的标题
标题违规以语意模糊、不利于论坛搜索为常见,常见的形式有:


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


批处理之家论坛发帖规则[2009.3.6更新]
 楼主| 发表于 2024-3-27 12:07:33 | 显示全部楼层
回复 2# 77七


    好的,已经修正标题。

求助77七大佬~谢谢您~
发表于 2024-3-27 13:51:31 | 显示全部楼层
  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
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-3-27 16:58:13 | 显示全部楼层
回复 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'
发表于 2024-3-27 17:17:16 | 显示全部楼层
回复 5# 877


   
我这里测试成功,请提供一个测试失败的样本(wav、mp4文件、批处理文件)
 楼主| 发表于 2024-3-27 17:55:43 | 显示全部楼层
回复 6# 77七


    链接:https://pan.baidu.com/s/1_2zTOCzT8ieKnx3XVylqKw?pwd=a123
提取码:a123
 楼主| 发表于 2024-3-27 17:58:00 | 显示全部楼层
回复 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. 请按任意键继续. . .
复制代码
发表于 2024-3-27 18:45:00 | 显示全部楼层
回复 8# 877


   我试了,正常,如果没有把批处理代码与其它代码一起使用,换个ffmpeg版本试试。
 楼主| 发表于 2024-3-27 19:03:58 | 显示全部楼层
回复 9# 77七


    换了个版本可以了,一语点醒梦中人!感谢大佬!
 楼主| 发表于 2024-3-27 21:32:51 | 显示全部楼层
回复 9# 77七


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

但是后面我还想继续运行其他代码。请问如何结束chcp 65001 > nul
发表于 2024-3-27 22:28:28 | 显示全部楼层
回复 11# 877


这个不好中途切换
4楼代码保存为ansi编码格式执行遇到什么问题了吗?
 楼主| 发表于 2024-3-27 22:57:55 | 显示全部楼层
回复 12# 77七


没事了大佬,谢谢您~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 02:47 , Processed in 0.021307 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表