ffmpeg批量转码目录中的视频

ffmpeg批量转码目录中的视频

我有大量名为不同内容和不同扩展名的视频(一些 mp4 一些 wmv 等)。

我想运行下面的命令,但在特定目录中的每个视频上运行,然后将其保存在另一个目录中,不覆盖原始文件。

有些视频可能会重复,如果发生这种情况,应该暂停脚本。例如,可能video1.mp4&video1.avi两者都不能是video1.mp4,/home/videos/processed因此脚本应该暂停。

ffmpeg -i '/home/videos/unprocessed/vidabc.mp4' -f mp4 -vcodec libx264 -preset fast -profile:v main -acodec aac -movflags +faststart '/home/videos/processed/vidabc.mp4'
ffmpeg -i '/home/videos/unprocessed/vidxyz.mp4' -f mp4 -vcodec libx264 -preset fast -profile:v main -acodec aac -movflags +faststart '/home/videos/processed/vidxyz.mp4'

答案1

find您可以使用带有标志的命令来处理目录中的每个文件-execdir

例子:

find /home/videos/unprocessed -type f \
   -execdir ffmpeg -i '{}' -f mp4 -vcodec libx264 -preset fast \
   -profile:v main -acodec aac -movflags +faststart '/home/videos/processed/{}.mp4' \;

-type f表示您只想查找文件,而不是目录。

标志后-execdir'{}'替换为文件的路径,例如./vidabc.mp4.

在命令末尾-execdir包含 a\;来终止命令。

请注意,在此示例中,生成的文件名可能如下所示:

  • /home/videos/processed/vidabc.mp4.mp4
  • /home/videos/processed/vidxyz.avi.mp4
  • /home/videos/processed/vidxyz.mp4.mp4

如果这是一个问题,有一些方法可以解决这个问题。看命令“find”-exec替换字符串举一个类似的例子。

相关内容