批处理ffmpeg?

批处理ffmpeg?

给定一个带有 WMA2 音频和 MP4 视频的 AVI 封装视频,我如何传递视频、将音频转换为 MP3;然后将整个文件重新封装为 AVI?

ffmpeg -i "foo bar.avi" -acodec libmp3lame "Converted\foo bar.avi"

现在我如何对该.avi目录下的每个文件执行相同的命令?

(需要使用 bash 或 Windows CLI 的解决方案 [ for?])

答案1

这难道不简单吗?

for file in *.avi;do ffmpeg -i "$file" -acodec libmp3lame "Converted\\$file";done

编辑

似乎存在反斜杠问题......

尝试这个:

for file in *.avi;do ffmpeg -i "$file" -acodec libmp3lame 'Converted\\'"$file";done

或这个:

for file in *.avi;do ffmpeg -i "$file" -acodec libmp3lame 'Converted\'"$file";done

答案2

bash如果您在包含文件的目录中运行它,则以下内容将执行您想要的操作.avi

#!/bin/bash
for file in *.avi; do
    ffmpeg -i "$file" -c:a libmp3lame "Converted\\$file";
done;

答案3

Python 解决方案

from sh import ffmpeg
from os import listdir
from os.path import split
from sys import argv

[ffmpeg("-i '{0}' -acodec libmp3lame 'Converted\{0}'".format(_file))
 for _file in sum([listdir(split(arg)[0]) for arg in argv], [])]

答案4

在对所涉及的命令进行反复试验后,我发现这在 bash shell 中有效

for i in *.ts; do ffmpeg -i "$i" -threads 6 -f mpegts -vcodec libx264 -preset slow -bufsize 8000 -async 48000 -acodec ac3 -ab 384k -n subdir/"${i%}"; done

这将生成一个高质量压缩版本的输入 .ts 文件,其名称相同,但位于子目录中。我猜如果不存在子目录,它就不会写入子目录,因此您必须指定一个子目录来替代我所说的“子目录”。此外,在我发现此批处理的正确语法之前,我使用了 -n 来防止它覆盖我单独渲染的文件。(我有一个 6 核处理器,因此“-threads”也应该根据您的硬件进行调整)

相关内容