Linux

ffmpeg 批量轉碼目錄中的影片

  • July 1, 2018

我有大量名為不同事物和不同副檔名的影片(一些 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'

您可以使用帶有標誌的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 替換字元串。

引用自:https://unix.stackexchange.com/questions/452738