
從 YouTube 下載 MPEG4(MP4 容器、H264 AVC 影片、AAC 音訊)影片剪輯,如何使用免費的 Linux 工具將其音訊通道分離為獨立的音訊(最好不解壓縮音訊)檔案?
答案1
考慮 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
在終端機中安裝 和 :mediainfo <file>
。
答案2
如果您知道只有 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"