[分享] 影片與聲音混合處理(ffmpeg+yt-dlp) - 討論區

[分享] 影片與聲音混合處理(ffmpeg+yt-dlp)

文章瀏覽次數 729 文章回覆數 2

特種兵

特種兵圖像(預設)

2024-08-31 15:37:14

From:111.249.158.113

前言

我之前介紹過 ffmpeg 這個以指令來對影片或聲音處理的軟體。

因為懶惰,所以一直沒有去尋找有gui且無障礙可行的剪輯軟體,這方面有心得的朋友請分享給大家。

最後還是用指令處理了自己的需求。希望不要因為這樣,就覺得我很老派。

以前需要對指令做筆記,還要因為需求的小不同而調整一下參數,現在 AI 工具發達,什麼都省了。

方便的是不需要去查指令,直接問 gpt 就有了,而且他們都很有帶入感,把需求與檔名都寫清楚,都可以直接給你可以複製貼上就能用的指令,對我來說實在是太方便了。

而需要的音樂,直接使用本版伙伴分享的 yt-dlp 就能下載到,什麼軟體都不用裝。

需求

之前練球的影片,想要加上一點背景音樂,看起來很有趣,就這樣嘗試了一下。

ffmpeg 比我想像的強大,不只轉檔與剪片,混入背景音樂也是沒問題,還有更複雜的操作,只是超過我的需求,就沒有研究了。

想像

先撇開無障礙的部分。

如果以剪片為例,在我的想像中,有gui介面是比較方便的,例如播放到想要截取的開始處按個按鈕,再播放到結尾處按個按鈕,最後另存新檔就完成了。

如果是下指令,還要看好開始的時間,結尾的時間或經過的時間,然後下指令去剪,自然還是gui為佳。

但是如果面對比較複雜的操作,就不知道是下指令快,還是gui仍然取勝,就留給伙伴來討論了。

總之,習慣就好,沒有什麼好壞或比較。但是能多一種選擇的話就應該多多嘗試看看。

準備

程式

  1. ffmpeg 已經放到習慣位置
  2. yt-dlp 已經放到習慣位置

這兩個軟體都不需要安裝,很方便,下載回來就行了。

影片

當時練球,旁邊的志工拍攝的,他上傳到 line 是 mov 檔,我下載回來。

先來把他轉成 mp4 比較小,格式也比較普遍:

ffmpeg -i 0825.mov -c:v libx264 -c:a aac -strict experimental 0825.mp4

音樂

在 yt 找到適合的音樂,使用 yt-dlp 下載回來:

yt-dlp url

url 就是指想要的音樂網址。

下載回來的是 .webm 檔,可以用 ffmpeg 把他轉成 mp3:

ffmpeg -i music.webm -vn -ab 128k -ar 44100 -y music.mp3

另外一個方法是在下載時,就直接利用 yt-dlp 來下載最高音質的 mp4 影片:

yt-dlp -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' -o '%(title)s.%(ext)s' url

再用剛剛的指令把 mp4 轉成 mp3。

更簡噔方式是在 yt-dlp 下載時就直接提取聲音,也就是直接變成 mp3:

yt-dlp -x --audio-format mp3 --audio-quality 0 -o "%(title)s.%(ext)s" url

處理音樂

因為下載回來的是一整首,我只需要其中的一部分,所以使用可以看到播放時間的播放器,如 vlc,確認開頭的地方是 01:03 也就是一分3秒是我要的。

而我的影片只有 20 秒,所以我只要 20 秒的音樂素材當背景即可。

那就來剪一下音樂,並另存新檔:

ffmpeg -i music.mp3 -ss 00:01:03 -t 00:00:20 -acodec copy 0825.mp3

混入音樂

原本的聲音沒了

最後,就是把音樂變成背景,放到原本的影片中。

一開始做錯了,就是以為這樣放就可以,結果他會把原本影片的聲音取待掉,變成只聽得到音樂:

ffmpeg -i 0825.mp4 -i 0825.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 nono.mp4

結果原來影片的球聲,人聲都沒了,這樣全盲視障者如我,就沒有那種球場的臨場感,變成像明眼人聽著音樂看 mv,對我來說,那就失去意義了。

背景音樂

不好意思,我完全沒有音樂的基本知識,原來這叫背景音樂啊。然後,我覺得混音好像是做更高明的處理,所以我不敢說我這個動作是混音,感覺那很專業。

我發現原本影片的聲音就偏小,下載回來的音樂聲音太大,因此在變成背景音樂時,需要調整聲音的比例。

反正執行的速度很快,我就邊聽邊調整,最後是要把音樂縮小聲音到原來的 15% 才行,不然原本的影片聲音會被蓋過太多。

所以,這邊的數字要注意,數字越小,表示聲音會越小。

如果是 1 的話,就是保持原本的音量,也可以擴大聲音,不過要小心破音,或者音質下降的問題。

因此,我最後是,保持原本影片的聲音,讓音樂小於原本音樂的 15% 來當背景音樂,並且讓這兩種聲音混成一個音軌:

ffmpeg -i 0825.mp4 -i 0825.mp3 -filter_complex "[0:a]volume=1[a1]; [1:a]volume=0.15[a2]; [a1][a2]amix=inputs=2:duration=longest" -c:v copy finish.mp4

結語

好了,我主要的目的是希望大家用簡單的方式來解決自己平常可能遇到的資訊問題,目的是快速解決問題,而不是花時間去學習或研究軟體。

我們需要善用方便的資訊科技,並且跟上時代的腳步,我舉個聽音樂的例子好了。

以前,想聽音樂只能去買錄音帶,後來變成 CD 片,現在直接透過影音平臺就好了。

一開始有影音平臺,我們還不習慣,或者擔心音樂會不見,還需要自己收集喜歡的 mp3 來播放,現在都不用,人家幫你做好播放清單,或者你自己也可以做,平臺上什麼都有了,事情變得簡單而單純。

你自己收集還要備份,害怕硬碟壞了什麼都沒了,網上人家幫你保存,多好啊。

補充

如果需要 ffmpeg 或 yt-dlp 軟體的基本操作,可以看之前的文章。

需要逐一參數的說明,可以自己查,其實 gpt 都寫得很清楚,我這邊就不要把文章寫得太冗長,讓大家有機會去嘗試一下。

其實還有更細更多的參數,基本上沒有你達不到的需求才是。

備註

平常自己使用的 gpt 包括 chatgpt 與 claude.ai,寫程式的話就用 copilot。

下載音樂或影片想利用的話要注意版權問題喔。

留言

#1

Maxe

Maxe圖像(預設)

2024-08-31 23:20:03

From:36.230.210.92

可以考慮將 ffmpeg 和 yt-dlp 加入 path 環境變數,我自己是這麼做的,很方便

#2

特種兵

特種兵圖像(預設)

2024-09-01 11:02:59

From:111.249.158.113

這樣就不用在處理好後搬檔案了
我沒這樣做的原因是,過程會產生一些到時不需要的檔案
統一在一個地方處理好,最後把成品複製出來即可