Board logo

标题: [文本处理] [已解决]批处理调用程序时参数编码错误 [打印本页]

作者: yongxin55    时间: 2022-4-9 16:48     标题: [已解决]批处理调用程序时参数编码错误

本帖最后由 yongxin55 于 2022-4-10 10:54 编辑

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

回复 1# yongxin55


    请把你的代码发出来看看
作者: yongxin55    时间: 2022-4-9 17:16

回复 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
复制代码

作者: Batcher    时间: 2022-4-9 17:28

回复 3# yongxin55


第三行改成这样效果如何:
chcp 65001
作者: yongxin55    时间: 2022-4-9 17:36

回复 4# Batcher


    试过了,这样提取中文文本时就会出错。
作者: Batcher    时间: 2022-4-9 17:43

回复 5# yongxin55


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

第三行改成这样:
chcp 65001

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

如果还是不行,请把你的entry.json和bat打包压缩上传到网盘我试试。
作者: yongxin55    时间: 2022-4-9 17:59

本帖最后由 yongxin55 于 2022-4-9 18:01 编辑

回复 6# Batcher


    如你所见,我是用for循环批量合并音视频文件,所以entry.json文件有很多个,属于原始文件,不可能一个个手动改编码的。
我宁愿将最后调用ffmpeg的命令输出到一个文件里,手动改编码运行。
另外有没有可能在批处理程序里修改文件的编码?
作者: Batcher    时间: 2022-4-9 18:23

回复 7# yongxin55


    entry.json是什么编码格式呢?请上传一个到网盘我试试
作者: yongxin55    时间: 2022-4-9 19:46

回复 8# Batcher


    上传失败。。。。
作者: Batcher    时间: 2022-4-9 19:50

回复 9# yongxin55


我重新描述一下6楼最后一句:
请把你的entry.json和bat打包压缩上传到阿里云盘或百度网盘我试试。
作者: yongxin55    时间: 2022-4-9 19:54

本帖最后由 yongxin55 于 2022-4-9 20:00 编辑

回复 10# Batcher


稍等,我重新传
作者: yongxin55    时间: 2022-4-9 20:07

这个压缩包里有entry.json文件,我自己写的批处理文件,待合并的音视频文件和相对位置,以及需要调用的ffmpeg文件。拜托🙏
链接:https://pan.baidu.com/s/1p9d5Gav-0l2ZpYz8ddF1SQ?pwd=o569 
提取码:o569
作者: Batcher    时间: 2022-4-9 21:40

回复 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
复制代码

作者: yongxin55    时间: 2022-4-9 22:41

回复 13# Batcher


    成功了,已经成功按循环合并了文件夹里的音视频。
那么到底是哪里的编码没有对上呢?
以及我写的代码里有哪些错误的地方,以及需要注意的地方,请大神指点!
作者: Batcher    时间: 2022-4-10 11:43

回复 14# yongxin55


    你上传的那个bat文件不是按照6楼的方法操作的,无法判断你按照6楼的方法操作之后具体问题是什么。
作者: yongxin55    时间: 2022-4-21 00:16

本帖最后由 yongxin55 于 2022-4-21 22:09 编辑

已经重新调整了,虽然不清楚问题出在哪里,好歹目标了。




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