Audio

如何將 MP4 影片文件中的音頻通道抓取到單獨的音頻文件中?

  • May 11, 2017

擁有從 YouTube 下載的 MPEG4(MP4 容器、H264 AVC 影片、AAC 音頻)影片剪輯,如何使用免費的 Linux 工具將其音頻通道分離為獨立的音頻(最好不解壓縮音頻)文件?

如果您知道只有 1 個音頻流並且它是aac,那麼您只需要這個:

ffmpeg -acodec copy -i "movie.mp4" -y "audio.aac"

如果要編寫第一個音頻流 ID 和編解碼器類型/文件副檔名的腳本,可以使用以下命令:

eval $(ffmpeg -i "movie.mp4" 2>&1 |awk '/Stream.*Audio/{print "stream=" $2 ";codec=" $4}' |head -n1)
stream=${stream:1}; stream=${stream/:/}
extn=${codec/,/}; [[ $extn == "aac" ]] || 
   { echo "You need to manually set the fiie extension. Codec type is: $codec"; exit 1; } 

ffmpeg -map $stream -acodec copy -i "movie.mp4" "audio.$extn"

考慮到 Youtube 影片,可能不需要從影片中提取音頻,因為可以通過使用帶有最新 Flashgot 外掛的 Firefox 或使用mps-youtube****單獨下載音軌(它是一種用於播放和下載音軌的工具) youtube:更多在這裡)。


考慮 mp4 影片文件:

正如這裡所回答的那樣,我們可以使用更通用的命令而不需要文件的特定名稱,並將其添加到文件管理器自定義菜單中,例如:

ffmpeg -i "$0" -map 0:1 -c:a copy "${0%%.*}".m4a

(使用.m4a更可取,因為它在很大程度上被支持作為 的容器.aac,但如果您願意,可以使用 raw.aac代替。)

此外,在終端中執行的此命令將從目前文件夾中的所有 mp4 文件中提取音軌:

for i in *.mp4; do ffmpeg -i "${i}" -map 0:1 -c:a copy "${i%.mp4}.m4a"; done

這裡是源文章)


有關如何在文件管理器的上下文菜單中使用此類命令的連結答案和問題,請參閱評論和相關資訊。


通過相應地替換輸入和輸出副檔名,上述命令和其他類似命令也可用於從其他類型的影片文件中提取音頻。

第一個命令flv也同樣適用;但對於其他影片,只需替換m4a影片剪輯中包含的任何音頻即可。如果應用於不同類型的影片文件,第二個命令需要替換影片和音頻副檔名。

通常,mp4並且flv文件包含aac音頻,Webm文件包含ogg並且avi文件包含mp3音頻。要確定影片包含哪些音頻,請使用 mediainfo: mediainfo-GUI,或僅安裝mediainfoand 在終端中:mediainfo <file>

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