[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

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

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

TOP

回复 14# yongxin55


    你上传的那个bat文件不是按照6楼的方法操作的,无法判断你按照6楼的方法操作之后具体问题是什么。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 13# Batcher


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

TOP

回复 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
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

TOP

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

回复 10# Batcher


稍等,我重新传

TOP

回复 9# yongxin55


我重新描述一下6楼最后一句:
请把你的entry.json和bat打包压缩上传到阿里云盘或百度网盘我试试。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 8# Batcher


    上传失败。。。。

TOP

回复 7# yongxin55


    entry.json是什么编码格式呢?请上传一个到网盘我试试
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

回复 6# Batcher


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

TOP

回复 5# yongxin55


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

第三行改成这样:
chcp 65001

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

如果还是不行,请把你的entry.json和bat打包压缩上传到网盘我试试。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4# Batcher


    试过了,这样提取中文文本时就会出错。

TOP

回复 3# yongxin55


第三行改成这样效果如何:
chcp 65001
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

TOP

返回列表