Ronstang
(Ronald J Kienle)
1
我之所以會這樣問,是因為某些步驟必須依序進行。我錄製的影片大多使用 AC3 5.1 音軌,因此我會先將其降取樣為立體聲 AAC,然後再用以下設定把所有音軌原封不動地複製一份:
ffmpeg-audioac3=-map 0:1 -map 0:1 -map 0:2 -c:a:0 aac -ab 384k -ac 2 -c:a:1 copy -c:a:2 copy
問題在於我還想對同一條 AAC 立體聲音軌做動態範圍壓縮,但這種處理必須等到檔案先被降取樣成立體聲之後才能進行……這就是我的難題。我需要在 MCEBuddy 產生立體聲 AAC 音軌之後,再用 ffmpeg 套用:
-af dynaudnorm=f=150
但我不知道 MCEBuddy 是否能做到這一點,如果可以,我也不確定該怎麼做。
任何建議都將不勝感激。
Goose
(Goose)
2
创建两个具有不同配置文件的转换任务,并尝试进行链式转换,如这里所述,其中一个转换的输出作为下一个转换的输入
Ronstang
(Ronald J Kienle)
3
所以,如果我理解正确,实现我想要的效果的一种方法是:保持当前设置不变,然后把输出的 MKV 文件重新丢回 MCEBuddy,用「MKV 未处理」模式跑一遍,但只对第一条音轨(现在是 2 声道 AAC)做动态范围压缩?
使用「监控文件夹」会惹出太多麻烦。对我来说,更简单的做法是把文件手动拖回 MCEBuddy,用我定制过的「MKV 未处理」配置,只改音频,并在完成后删除源文件。我一次跑 40+ 个转码任务,绝不想让监控文件夹往队列里塞文件——因为无论你怎么保证,它们都会插到队列最前面,而我从来没能阻止这种行为。
我在想,也许可以通过配置文件中的自定义命令来实现这一点。目前我还不太确定具体该怎么做,或者需要按什么顺序执行,但请给我一些时间研究一下,然后我会回复你。
好的,這是我想到的。免責聲明:我無法測試這段指令,而且我對 ffmpeg 的知識充其量只是中等。但這或許能成為一個不錯的起點,讓其他人加入並提供協助。
將以下內容加入你想要正規化立體聲音訊的設定檔中:
CustomCommandPath=C:\Windows\System32\cmd.exe
CustomCommandParameters="/c ren "%convertedfile%" %convertedfilename%-1.%convertedext% & "C:\Program Files\MCEBuddy2x\ffmpeg\ffmpeg.exe" -i "%workingpath%\%convertedfilename%-1.%convertedext% -map 0:v -c:v copy -map 0:1 -map 0:2 -map 0:3 -af dynaudnorm=f=150 -c:a:1 copy -c:a:2 copy "%convertedfile%" & del "%workingpath%\%convertedfilename%-1.%convertedext%""
CustomCommandHangPeriod=3600
CustomCommandCritical=false
CustomCommandUISession=false
CustomCommandShowWindow=false
CustomCommandExitCodeCheck=false
基本上,這段指令應該會在檔案轉換完成、但尚未移動到目的地之前,先執行 CMD 並帶入指定的參數。我們來拆解這些參數:
/c
執行命令提示字元並在完成後結束。這個不用擔心。
ren “%convertedfile%” %convertedfilename%-1.%convertedext%
這會在當前位置(因為我們使用 CustomCommand,所以會在工作目錄)將轉換後的檔案重新命名,加上 -1 後綴。我們需要重新命名,這樣才能在這些自訂命令完成、MCEBuddy 重新接管後,讓新檔案成為最終需要的檔案名稱。
&
這代表要執行新的命令。不用擔心這個。如果你想執行更多命令,就用 & 分隔。
“C:\Program Files\MCEBuddy2x\ffmpeg\ffmpeg.exe” -i “%workingpath%%convertedfilename%-1.%convertedext% -map 0:v -c:v copy -map 0:1 -map 0:2 -map 0:3 -af dynaudnorm=f=150 -c:a:1 copy -c:a:2 copy “%convertedfile%””
真正的關鍵在這裡,如果需要調整執行方式,就得修改這一段。這應該會原封不動地複製影片,對第一條音軌進行正規化,並原封不動地複製剩下的兩條音軌。
del “%workingpath%%convertedfilename%-1.%convertedext%”
刪除我們在第一個命令中重新命名的原始檔案。只是清理一下。
1 个赞
Ronstang
(Ronald J Kienle)
6
非常感谢……抱歉这么久才看到并测试,但我刚刚在一个5分钟的测试样本上试了一下,自定义命令确实运行了。现在唯一的问题是:我该如何确认动态范围压缩是否真的生效了?哦,等等……我可以分别从源文件和转换后的文件中提取音频,然后在音频编辑器里对比。
编辑……等有空时我会在音频编辑器里检查,但仅凭耳朵对比原文件和转换后的文件,已经能听出音效不再那么突兀,同时又保持稍大的音量,这看起来正是我想要的效果……谢谢!
Ronstang
(Ronald J Kienle)
8
現在唯一需要解決的問題是,我是否可以用 ffprobe 先分析音訊檔案,再讓它自動挑選動態範圍壓縮與正規化的參數(這樣所有節目/電影都能有統一的標準音量),如果你有什麼想法或建議,我會非常感激。
我一直在嘗試各種不同的方法,但沒有一個特別可靠。而且因為一個操作失誤,我把用來測試的設定檔全刪了,連範例都拿不出來,連日誌也莫名其妙清空了。
我試過幾種流程:
-
在 precustomcommand 裡先把音軌抽出成 stereo,用批次檔呼叫 ffprobe 把參數傳進去做正規化,影片本身走正常 MCEBuddy 流程(跳過那條 stereo 音軌),最後在 customcommand 把處理過的 stereo 塞回去。成功率大概 10%。
-
在 precustomcommand 直接抽出原音軌,讓影片以純 stereo 方式通過 MCEBuddy 並開啟 Volume leveling,完成後再把環繞音軌接回去。這招成功率最高,但我不確定是否達到你想要的正規化效果。
-
完全不用自訂命令,直接開 Volume leveling 處理,成功率 100%,但同樣不確定結果是否符合你的需求。
如果之後有空我會再玩玩看,不過我即將開始新工作,短期內大概抽不出時間。
Ronstang
(Ronald J Kienle)
11
非常感謝你的努力。我希望我的朋友能把他使用 ffmpeg 的方法告訴我,但他很難搞,因為他想讓我用 Sickbeard 腳本,卻又沒時間教我怎麼用。
如果我從他那裡拿到資訊,應該只要把你已經提供的指令做點自訂修改就行了。
再次感謝。
Ronstang
(Ronald J Kienle)
12
我找到了一种无需事先分析即可简化的方法。我在 ffmpeg 中发现了以下命令和设置,似乎大家一致认为就该用这个设置:
-af loudnorm=I=-16:LRA=11:TP=-1.5
这就能完成归一化。我假设必须先做动态范围压缩,然后再应用这个,所以基本上有没有办法把上面你创建的动态范围压缩自定义命令的输出,再通过另一个自定义命令应用这条命令?除非还有更好的办法,反正我是完全没主意。
Ronstang
(Ronald J Kienle)
13
我自己試著弄了一下,但沒辦法把兩個指令串接起來讓它正常運作。我在語法上卡住了,我又不是寫程式的……哈哈
大概就是這樣。
CustomCommandParameters="/c ren “%convertedfile%” %convertedfilename%-1.%convertedext% & “C:\Program Files\MCEBuddy2x\ffmpeg\ffmpeg.exe” -i “%workingpath%%convertedfilename%-1.%convertedext% -map 0:v -c:v copy -map 0:1 -map 0:2 -map 0:3 -af dynaudnorm=f=150 -c:a:1 copy -c:a:2 copy “%workingpath%%convertedfilename%-2.%convertedext%” & del “%workingpath%%convertedfilename%-1.%convertedext%” & “C:\Program Files\MCEBuddy2x\ffmpeg\ffmpeg.exe” -i “%workingpath%%convertedfilename%-2.%convertedext%” -map 0:v -c:v copy -map 0:1 -map 0:2 -map 0:3 -af loudnorm=I=-16:LRA=11:TP=-1.5 -c:a:1 copy -c:a:2 copy “%convertedfile%” & del “%workingpath%%convertedfilename%-2.%convertedext%””
Ronstang
(Ronald J Kienle)
15
太好了,谢谢,我知道你很忙。我今天晚些时候或今晚试试,然后告诉你。非常感谢。