如何通过命令行或批处理脚本与ffmpeg转换整个目录/文件夹?
当前回答
为了逗你笑,这里有鱼壳的解决方案:
for i in *.avi; ffmpeg -i "$i" (string split -r -m1 . $i)[1]".mp4"; end
其他回答
这将从当前目录中的所有jpg文件创建mp4视频。
echo exec("ffmpeg -framerate 1/5 -i photo%d.jpg -r 25 -pix_fmt yuv420p output.mp4");
另一个简单的解决方案是使用xargs:
ls *。Avi | xargs -i -n1 ffmpeg -i {} "{}.mp4"
一个小缺陷是输出文件的尴尬命名(例如input.avi.mp4)。一个可能的解决方法是:
ls *。Avi | xargs -i -n1 bash -c "i={};Ffmpeg -i {} "\${i%.*}.mp4""
对于任何想要用ffmpeg批量转换任何东西,但想要有一个方便的Windows界面的人,我开发了这个前端:
https://sourceforge.net/projects/ffmpeg-batch
它为ffmpeg添加了一个窗口时尚界面,进度条和时间剩余信息,这些功能是我在使用ffmpeg时经常错过的。
对于Windows,这是行不通的
FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"
即使我做了双倍的%。
我甚至建议:
-acodec ***libmp3lame***
另外:
FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec libmp3lame "%~nG.mp3"
当然,现在PowerShell出现了,专门设计来让这样的事情变得非常简单。
是的,除了Windows, PowerShell也可以在其他操作系统上使用,但它是预装在Windows上的,所以这应该对每个人都有用。
首先,你想要列出当前目录中的所有文件,所以,我们将从:
ls
如果你想递归地转换子目录中的所有文件,也可以使用ls -Recurse。
然后,我们将这些文件过滤下来,只有我们想转换的文件类型-例如。“avi”。
ls | Where { $_.Extension -eq ".avi" }
之后,我们将通过ForEach将该信息传递给FFmpeg。
对于FFmpeg的输入,我们将使用FullName——这是文件的整个路径。对于FFmpeg的输出,我们将使用Name -但是将结尾的.avi替换为.mp3。所以,它看起来是这样的:
$_.Name.Replace(".avi", ".mp3")
所以,让我们把所有这些放在一起,这是结果:
ls | Where { $_.Extension -eq ".avi" } | ForEach { ffmpeg -i $_.FullName $_.Name.Replace(".avi", ".mp3") }
这将改变所有人。”通过FFmpeg将avi"文件转换为".mp3"文件,只需替换引号中的三个内容来决定您想要的转换类型,并随时向FFmpeg中的ForEach中添加任何其他参数。
您还可以更进一步,在末尾添加Remove-Item以自动删除旧文件。
如果ffmpeg不在您的路径中,而实际上在您当前所在的目录中,请在那里写入./ffmpeg,而不仅仅是ffmpeg。
希望这对大家有所帮助。
推荐文章
- 使用ffmpeg添加文本字幕
- ffmpeg输出的含义(tbc, tbn, tbr)
- 最快的方法提取帧使用ffmpeg?
- 哪个HTTP状态代码表示“尚未准备好,稍后再试”?
- Android上的FFmpeg
- 实时http流到HTML5视频客户端的最佳方法
- 如何添加一个新的音频(不混合)到一个视频使用ffmpeg?
- ffmpeg、libav和avconv之间有什么不同和相似之处?
- Ffmpeg覆盖输出文件,如果存在
- 如何安装和运行phpize
- 使用ffmpeg将音频文件转换为mp3
- FFMPEG (libx264)高度不能被2整除
- 操作系统检测生成文件
- 如何创建一个视频从图像与FFmpeg?
- 如何用ffmpeg转换整个目录?