标题: [文件操作] 批处理怎样调用ffmpeg封装mp4和m4a文件? [打印本页]
作者: joannec 时间: 2014-9-28 21:48 标题: 批处理怎样调用ffmpeg封装mp4和m4a文件?
想把同目录下的 mp4和m4a文件 用 ffmpeg封装成新的mp4文件,然后删除旧的mp4和m4a ,大家帮我看下代码:- @ECHO OFF & CD/D "%~dp0"
- title 封装
- cls
- ffmpeg -i "%~dpn1_v.mp4" -vcodec copy -i "%~dpn1_a.m4a" -acodec copy "%~dpn1_output.mp4"
-
- IF EXIST "%~dpn1_output.mp4" (
- DEL "%~dpn1_v.mp4"
- DEL "%~dpn1_a.m4a"
- cls
- echo 封装完成
- )
- pause
复制代码
不知道哪里错误了,老是这个提示,要把那个 %~dpn1 改成和文件一样的名字才可以,或者把文件重命名为 _v.mp4 和 _a.m4a 才可以
这样很麻烦啊,高手帮我看下,谢谢了,
或者帮我看下,我把文件打包了,看下在你们的电脑上能正常吗
http://pan.baidu.com/s/1gdqvHRl (18M)
作者: DAIC 时间: 2014-9-28 21:55
把 echo off 改成 echo on 看看是哪个命令在报错
另外,你是怎样执行代码的,直接双击执行?还是在命令行传一个参数给它?
作者: joannec 时间: 2014-9-28 22:05
回复 2# DAIC
双击执行也可以的,本来我是另外一个压制mp4的批处理传过来的,这步错了就停了,
我把那个改成ON,出现这样的提示,问题是不是可能是这个代码错了 %~dpn1
作者: Linuxer 时间: 2014-9-28 23:30
_v.mp4:NO such file or directory
没有此文件或目录
也就是说,你%~dpn1没有获取到值。
把%~dpn1改成%~dpn0试试呢?
作者: joannec 时间: 2014-9-29 00:57
回复 4# Linuxer
这里各种都改过了,,改成0变成这样,前面变成这个bat文件的名字
作者: DAIC 时间: 2014-9-29 08:57
回复 3# joannec
旧的mp4和m4a的文件名分别是什么?
你用%~dpn1_v.mp4这种格式是想表达什么意思?
作者: Linuxer 时间: 2014-9-29 09:21
回复 5# joannec
同上,,,为什么要用%~dp1加到文件名里?,,%~dp1是动态变化的,,你带入到文件名里不知道是要获取什么名字?,,
作者: joannec 时间: 2014-9-29 10:58
回复 6# DAIC
j旧的文件名是: test_v.mp4 和 test_a.m4a ,test随便起的名,问题不是在这,
代码里 %~dpn1_v.mp4 我改成 %~dpn1.mp4也不行,他就会提示 .mp4 No such file or directory ,一定要把%~dpn1 改成绝对文件才行,很奇怪
作者: joannec 时间: 2014-9-29 10:59
回复 7# Linuxer
文件名没有%~dpn1的,这个只是放在代码里的,
作者: yu2n 时间: 2014-9-29 11:43
前提:
限定音频文件后缀为_a.m4a
限定视频文件后缀为_v.mp4
限定输出文件后缀为_output.mp4
实例:
有test项目,其名称定义为:
音频文件为 test_a.m4a
视频文件为 test_v.mp4
输出文件为 test_output.mp4- @echo off
- title package [m4a + mp4 -^> mp4]
- color 5F
- cls
-
- call :_package "test"
- echo Done ^!
- pause
-
- goto :eof
- :_package
- set "project_name=%~1"
- set "WorkDir=%~dp0"
- set "WorkDir=%WorkDir:~0,-1%"
- set "acFile=%WorkDir%\%project_name%_a.m4a"
- set "vcFile=%WorkDir%\%project_name%_v.mp4"
- set "outFile=%WorkDir%\%project_name%_output.mp4"
- if not exist "%acFile%" goto :_error_miss_file
- if not exist "%vcFile%" goto :_error_miss_file
- if exist "%outFile%" del /q /f "%outFile%"
- ffmpeg -i "%vcFile%" -vcodec copy -i "%acFile%" -acodec copy "%outFile%"
- if exist "%outFile%" (
- del /q /f "%vcFile%"
- del /q /f "%acFile%"
- )
- goto :eof
-
- goto :eof
- :_error_miss_file
- echo Error, Miss File.
- goto :eof
复制代码
作者: joannec 时间: 2014-9-29 12:00
本帖最后由 joannec 于 2014-9-29 12:02 编辑
回复 10# yu2n
这个可以搞定,就是要限定文件名为test,比如01_v.mp4就不行了
能不能改成不限定文件名的,就是只要认_v.mp4和_a.m4a,文件名随意
作者: DAIC 时间: 2014-9-29 13:04
回复 8# joannec
其实问题就在这里,%~dpn1在BAT里面有特殊含义,如果你不知道它代表什么意思就不要乱用。
一个文件夹下面只有一个mp4和一个m4a是吗?
作者: joannec 时间: 2014-9-29 13:12
本帖最后由 joannec 于 2014-9-29 13:15 编辑
回复 12# DAIC
是的,,目录下只有一个xx_v.mp4和一个 xx_a.m4a ,是X264压制出来的文件,xx是avs的文件名,所以它压制出来叫xx_v.mp4
讲的好乱啊,,哈哈,,现在只要能装起来,删掉旧文件就行,
作者: DAIC 时间: 2014-9-29 13:28
- @echo off
- title 封装
- cls
- pushd "%~dp0"
- ffmpeg -i "*_v.mp4" -vcodec copy -i "*_a.m4a" -acodec copy "output.mp4"
-
- if exist "output.mp4" (
- del /f /q "*_v.mp4" "*_a.m4a"
- cls
- echo 封装完成
- )
- pause
复制代码
作者: joannec 时间: 2014-9-29 13:50
回复 14# DAIC
好用,,感谢啊,哥们,,!
被这个%~dpn1搞死了,
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |