ffmpeg指令將視訊檔案的一部分轉換為音訊文件

ffmpeg指令將視訊檔案的一部分轉換為音訊文件

我有一個視訊檔案(時長 1 小時)。我需要將視訊檔案(30 分鐘)的任何部分轉換為音訊文件

ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -vcodec copy -acodec copy /opt/b.mp4

然後我用了

ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -acodec copy /opt/b.mp4

但我仍然可以觀看視訊和音訊。我只需要音訊文件

答案1

如果您只需要音訊(我希望我理解正確),那麼您根本不需要第一步。如果您使用:

ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -vn -acodec copy /opt/b.mp3

它會做到的假如原來的音訊編解碼器是mp3。如果沒有,您可以強制重新編碼:

ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -vn -acodec libmp3lame ...other_parameters.. /opt/b.mp3

other_parameters有比特率等。

答案2

有兩種主要方法可以從包含視訊或音訊的檔案中獲取兩者。預設情況下流選擇ffmpeg 中的行為將為每種流類型選擇一個流。請注意,輸入可以包含多種串流類型:視訊、音訊、字幕和資料。有些輸入甚至可以包含其中每種流類型的多個;例如兩個視訊串流。


-vn或者-an

這些選項告訴 ffmpeg 忽略視訊 ( -vn) 或音訊 ( -an)。

若要省略影片並複製音訊:

ffmpeg -i input -vn -codec:a copy output.mka

若要省略音訊並複製影片:

ffmpeg -i input -an -codec:v copy output.mkv
  • 這些例子將串流複製所需的流。這意味著 ffmpeg 將簡單地重新復用它而不是重新編碼。這非常快,而且由於本質上是“複製和貼上”,因此不會影響品質。

  • 使用-vn-an不會忽略可能存在的其他串流,例如字幕或資料流,但純音訊格式無論如何都會忽略這些。


-map

-map選項可能看起來更複雜,但更靈活和有用。例如,-vn告訴 ffmpeg 僅省略視訊串流,但使用流說明符 -map可以告訴 ffmpeg 忽略除所需流之外的所有內容。

僅複製影片:

ffmpeg -i input -map 0:v -codec copy output.mkv

僅複製音訊:

ffmpeg -i input -map 0:a -codec copy output.mka
  • 0:v是一個串流說明符,告訴 ffmpeg 僅包含第一個輸入中的0視訊串流v。這可以進一步擴展。如果您的輸入包含多個視訊串流並且您只需要第一個視訊串流,則使用0:v:0方法和 會很有用。first input:video:first video stream請參閱 ffmpeg 控制台輸出以找出輸入中流的順序。

  • 您也可以使用負映射。使用-map 0 -map -0:a:1將映射除第二個音訊串流之外的所有串流。-map 0告訴 ffmpeg 包含來自輸入0(第一個輸入)的所有串流,然後-map -0:a:1告訴 ffmpeg 忽略來自第一個輸入的第一個音訊串流。

答案3

第一部分是對的。在第二部分中,僅提取 b.mp4 檔案的音訊。

ffmpeg -i b.mp4 -vn -acodec copy audio_b.mp3

相關內容