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

[文本处理] [已解决]批处理调用程序时参数编码错误

[复制链接]
发表于 2022-4-9 16:48:03 | 显示全部楼层 |阅读模式
本帖最后由 yongxin55 于 2022-4-10 10:54 编辑

批处理的作用是从文件中提取中文文本,作为参数,用call调用ffmpeg,来处理视频文件。用chcp936可以成功提取中文并显示,但是作为参数调用ffmpeg时出错。我现在是将调用ffmpeg的命令输出到bat文件中(默认编码为UTF-8),手动将编码改成ansi,点击运行,能调用ffmpeg,完成剩余的工作。如何修改参数编码,直接在批处理中直接调用ffmpeg,而不出现参数错误呢?请大神指教。
发表于 2022-4-9 16:52:31 | 显示全部楼层
回复 1# yongxin55


    请把你的代码发出来看看
 楼主| 发表于 2022-4-9 17:16:59 | 显示全部楼层
回复 2# Batcher
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. chcp 936 > nul
  4. for /f %%a in ('dir /ad/b') do (
  5. ::a为根目录名称
  6. for /f %%p in ('dir /ad/b %a\') do (
  7. ::p为次级目录名称
  8.   for /f "delims=" %%e in (%a\%%p\entry.json) do (
  9. ::提取制定文件内文本
  10. set mingcheng=%%e
  11. set mingcheng=!mingcheng:*"title":"=!
  12.     for /f "delims= delims=," %%g in ("!mingcheng!") do (
  13.           set ming=%%g
  14.           set ming=!ming: =!
  15. ::截取出需要的文本
  16. call ffmpeg -i %cd%\%%a\%%p\16\video.m4s -i %cd%\%%a\%%p\16\audio.m4s -codec copy !ming!.mp4
  17. ::调用ffmpeg合并音频和视频,输出视频文件以提取到的中文文本命名
  18. ))))
  19. pause>nul
复制代码
发表于 2022-4-9 17:28:12 | 显示全部楼层
回复 3# yongxin55


第三行改成这样效果如何:
chcp 65001
 楼主| 发表于 2022-4-9 17:36:59 | 显示全部楼层
回复 4# Batcher


    试过了,这样提取中文文本时就会出错。
发表于 2022-4-9 17:43:18 | 显示全部楼层
回复 5# yongxin55


中文文本是从entry.json里面提取的吗?我重新描述一下:

第三行改成这样:
chcp 65001

然后entry.json和bat文件全都保存为UFT-8编码

如果还是不行,请把你的entry.json和bat打包压缩上传到网盘我试试。
 楼主| 发表于 2022-4-9 17:59:38 | 显示全部楼层
本帖最后由 yongxin55 于 2022-4-9 18:01 编辑

回复 6# Batcher


    如你所见,我是用for循环批量合并音视频文件,所以entry.json文件有很多个,属于原始文件,不可能一个个手动改编码的。
我宁愿将最后调用ffmpeg的命令输出到一个文件里,手动改编码运行。
另外有没有可能在批处理程序里修改文件的编码?
发表于 2022-4-9 18:23:56 | 显示全部楼层
回复 7# yongxin55


    entry.json是什么编码格式呢?请上传一个到网盘我试试
 楼主| 发表于 2022-4-9 19:46:21 | 显示全部楼层
回复 8# Batcher


    上传失败。。。。
发表于 2022-4-9 19:50:40 | 显示全部楼层
回复 9# yongxin55


我重新描述一下6楼最后一句:
请把你的entry.json和bat打包压缩上传到阿里云盘或百度网盘我试试。
 楼主| 发表于 2022-4-9 19:54:30 | 显示全部楼层
本帖最后由 yongxin55 于 2022-4-9 20:00 编辑

回复 10# Batcher


稍等,我重新传
 楼主| 发表于 2022-4-9 20:07:26 | 显示全部楼层
这个压缩包里有entry.json文件,我自己写的批处理文件,待合并的音视频文件和相对位置,以及需要调用的ffmpeg文件。拜托🙏
链接:https://pan.baidu.com/s/1p9d5Gav-0l2ZpYz8ddF1SQ?pwd=o569 
提取码:o569
发表于 2022-4-9 21:40:26 | 显示全部楼层
回复 12# yongxin55


我看了你上传的 entry.json 就是UTF-8编码,因此它需要做任何修改。

你把下面的代码保存为UTF-8编码,内容不要做任何修改,把执行结果截图发出来看看:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. chcp 65001
  4. for /f "delims=" %%a in ('dir /ad /b') do (
  5.     echo 正在处理文件夹:%%a
  6.     for /f "delims=" %%p in ('dir /ad /b "%%a"') do (
  7.         echo 正在处理文件夹:%%p
  8.         for /f "delims=" %%e in ('type "%%a\%%p\entry.json"') do (
  9.             set "mingcheng=%%e"
  10.             set "mingcheng=!mingcheng:*"title":"=!"
  11.             for /f "delims=," %%g in ("!mingcheng!") do (
  12.                 set "ming=%%g"
  13.                 set "ming=!ming: =!"
  14.                 set "ming=!ming:~0,-1!"
  15.                 REM 请检查视频文件所在的文件夹到底是16还是32
  16.                 echo ffmpeg -i "%cd%\%%a\%%p\16\video.m4s" -i "%cd%\%%a\%%p\16\audio.m4s" -codec copy "!ming!.mp4"
  17.                 ffmpeg -i "%cd%\%%a\%%p\16\video.m4s" -i "%cd%\%%a\%%p\16\audio.m4s" -codec copy "!ming!.mp4"
  18.             )
  19.         )
  20.     )
  21. )
  22. pause
复制代码
 楼主| 发表于 2022-4-9 22:41:07 | 显示全部楼层
回复 13# Batcher


    成功了,已经成功按循环合并了文件夹里的音视频。
那么到底是哪里的编码没有对上呢?
以及我写的代码里有哪些错误的地方,以及需要注意的地方,请大神指点!
发表于 2022-4-10 11:43:07 | 显示全部楼层
回复 14# yongxin55


    你上传的那个bat文件不是按照6楼的方法操作的,无法判断你按照6楼的方法操作之后具体问题是什么。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 04:33 , Processed in 0.029459 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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