如何通过命令行或批处理脚本与ffmpeg转换整个目录/文件夹?
当前回答
Windows:
这里我正在将所有(.mp4)文件转换为(.mp3)文件。 只需打开cmd,转到所需的文件夹并键入命令。 快捷方式:(可选) 1. 转到(.mp4)文件所在的文件夹 2. 按Shift键,点击左键,选择“在这里打开PowerShell窗口” 或“此处打开命令提示窗口” 3.输入“cmd”[注意:如果它直接打开cmd而不是PowerShell,则跳过此步骤] 4. 执行命令
for %i in (*.mp4) do ffmpeg -i "%i" "%~ni.mp3"
如果你想把它放到Windows 10的批处理文件中,你需要使用%%i。
其他回答
当然,现在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。
希望这对大家有所帮助。
如果您想要一个图形界面来使用ffmpegX进行批处理,请尝试Quick Batcher。它是免费的,并将使用您最后的ffmpegX设置来转换您放入其中的文件。
注意,不能将文件夹拖放到Quick Batcher上。所以选择文件,然后把他们通过快速批处理。
小PHP脚本来做它:
#!/usr/bin/env php
<?php
declare(strict_types = 1);
if ($argc !== 2) {
fprintf ( STDERR, "usage: %s dir\n", $argv [0] );
die ( 1 );
}
$dir = rtrim ( $argv [1], DIRECTORY_SEPARATOR );
if (! is_readable ( $dir )) {
fprintf ( STDERR, "supplied path is not readable! (try running as an administrator?)" );
die(1);
}
if (! is_dir ( $dir )) {
fprintf ( STDERR, "supplied path is not a directory!" );
die(1);
}
$files = glob ( $dir . DIRECTORY_SEPARATOR . '*.avi' );
foreach ( $files as $file ) {
system ( "ffmpeg -i " . escapeshellarg ( $file ) . ' ' . escapeshellarg ( $file . '.mp4' ) );
}
如果你有GNU并行,你可以将vid_dir以下的所有。avi文件并行转换为mp4,使用你的CPU内核
find vid_dir -type f -name '*.avi' -not -empty -print0 |
parallel -0 -j -1 ffmpeg -loglevel fatal -i {} {.}.mp4
要从/转换为不同的格式,请更改'*。Avi '或。mp4。GNU parallel在大多数Linux发行版的存储库中以一个通常称为parallel的包的形式列出。
我用这个为Windows上的电视节目或电影添加字幕。
只需在视频和子目录中创建“subbed”文件夹和bat文件。将代码放入bat文件并运行。
for /R %%f in (*.mov,*.mxf,*.mkv,*.webm) do (
ffmpeg.exe -i "%%~f" -i "%%~nf.srt" -map 0:v -map 0:a -map 1:s -metadata:s:a language=eng -metadata:s:s:1 language=tur -c copy ./subbed/"%%~nf.mkv"
)