Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 创建递归ffmpeg转换器_Batch File_Video_Ffmpeg - Fatal编程技术网

Batch file 创建递归ffmpeg转换器

Batch file 创建递归ffmpeg转换器,batch-file,video,ffmpeg,Batch File,Video,Ffmpeg,我正在尝试创建某种脚本,它将在扫描子文件夹的文件夹中检测到的任何视频文件转换为相同位置的同名.avi文件,然后删除原始文件。我并没有在任何编程/脚本中真正使用cmd,所以我怀疑有一些非常简单的语法问题 如果有人熟悉编码和ffmpeg,请指出编码选项是否错误,我目前正在黑暗中摸索 使用,我正在处理一些类似于: dir/b/s *.(mkv|mp4|m4v|wmv) >listing.txt #Make a list of all the files with certain extensi

我正在尝试创建某种脚本,它将在扫描子文件夹的文件夹中检测到的任何视频文件转换为相同位置的同名.avi文件,然后删除原始文件。我并没有在任何编程/脚本中真正使用cmd,所以我怀疑有一些非常简单的语法问题

如果有人熟悉编码和ffmpeg,请指出编码选项是否错误,我目前正在黑暗中摸索

使用,我正在处理一些类似于:

dir/b/s *.(mkv|mp4|m4v|wmv) >listing.txt  #Make a list of all the files with certain extensions, for reading.
for /F "delims=;" %%F in (listing.txt) do ffmpeg.exe  -i "%%F" -c:v libx264 -preset slow -crf 20 -c:a libvo_aacenc -b:a 128k "%%~na.avi"
#Then to delete original files
for /F "delims=;" %%F in (listing.txt) do del %%F
del listing.txt
我遇到的第一个问题是,我希望能够用所有常见的视频类型填充列表。我想象cmd有一些类似于perl字符串匹配的语法,例如AB | C将匹配AB和AC,我可以模仿它们来匹配任何视频文件扩展名?我在上面的代码中编写了它来说明这一点,但我知道它不起作用

我希望这足以说明我的尝试。

dir*.ext1*.ext2

但是,如果名称中需要空格,最好指定完整路径并使用引号

Dir "%userprofile%\documents\*.avi" "%userprofile%\documents\*.mp4" /a /s /b
比For更简单的是forfiles命令。但不适用于多种文件类型

它也可以是一行

@for /f "usebackq delims=" %A in (`dir "%Userprofile%\documents\*.avi" "%Userprofile%\documents\*.mp4" /a /s /b`)  do @echo %A

在批处理文件中使用%%A,如果键入命令,则使用%A。

为什么使用AVI而不是更现代的容器格式,如通常用于H.264视频的MP4?此外,本机FFmpeg AAC编码器-c:AAC-严格的实验性编码器在128k时可能比libvo_aacenc听起来更好。纯粹是因为我想将这些文件可靠地流式传输到另一台设备,即X360,并且它不会播放mp4的所有编码变体,但会播放avi的所有编码变体-至少在我过去的经验中是这样。比你还棒,这几乎实现了我所追求的目标。你知道为什么我说%%F在这个时候是意外的吗?因为我使用%%A,你使用%%F。确保所有%%F都是%%A,反之亦然。是的,你的最后一点得到了,我是通过直接输入到提示符进行测试的,它抱怨有两倍。在这种情况下,我认为这几乎解决了之前的最后一个问题,目前,我上面的代码将输出文件命名为%%~na.avi,而不是解析输入文件名并更改扩展名。我在这里遗漏了什么?如果您使用的是%%a.%%nA或F,则案例必须是相同的%%a与%%a.%%nA或F不同。