标题: [文本处理] [已解决]批处理调用程序时参数编码错误 [打印本页]
作者: 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 - @echo off
- setlocal enabledelayedexpansion
- chcp 936 > nul
- for /f %%a in ('dir /ad/b') do (
- ::a为根目录名称
- for /f %%p in ('dir /ad/b %a\') do (
- ::p为次级目录名称
- for /f "delims=" %%e in (%a\%%p\entry.json) do (
- ::提取制定文件内文本
- set mingcheng=%%e
- set mingcheng=!mingcheng:*"title":"=!
- for /f "delims= delims=," %%g in ("!mingcheng!") do (
- set ming=%%g
- set ming=!ming: =!
- ::截取出需要的文本
- call ffmpeg -i %cd%\%%a\%%p\16\video.m4s -i %cd%\%%a\%%p\16\audio.m4s -codec copy !ming!.mp4
- ::调用ffmpeg合并音频和视频,输出视频文件以提取到的中文文本命名
- ))))
- 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编码,内容不要做任何修改,把执行结果截图发出来看看:- @echo off
- setlocal enabledelayedexpansion
- chcp 65001
- for /f "delims=" %%a in ('dir /ad /b') do (
- echo 正在处理文件夹:%%a
- for /f "delims=" %%p in ('dir /ad /b "%%a"') do (
- echo 正在处理文件夹:%%p
- for /f "delims=" %%e in ('type "%%a\%%p\entry.json"') do (
- set "mingcheng=%%e"
- set "mingcheng=!mingcheng:*"title":"=!"
- for /f "delims=," %%g in ("!mingcheng!") do (
- set "ming=%%g"
- set "ming=!ming: =!"
- set "ming=!ming:~0,-1!"
- REM 请检查视频文件所在的文件夹到底是16还是32
- echo ffmpeg -i "%cd%\%%a\%%p\16\video.m4s" -i "%cd%\%%a\%%p\16\audio.m4s" -codec copy "!ming!.mp4"
- ffmpeg -i "%cd%\%%a\%%p\16\video.m4s" -i "%cd%\%%a\%%p\16\audio.m4s" -codec copy "!ming!.mp4"
- )
- )
- )
- )
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |