作者falcon (falcon)
標題Re: [請問] 轉檔出現怪現象
時間Wed Dec 11 17:53:10 2013
剛剛不小心把文章刪了
只好重發 (′゚д゚`)
這個給你參考
https://www.dropbox.com/s/y9nuoprdmaij98z/AutoRec.7z
把影片檔拖給 AutoRecodec.bat 開啟即可
qaac 需要安裝 Apple Application Suport
QuickTime 或 iTunes 安裝包內有
我已經在 qaac 目錄下放入 Apple 的 dll
所以不需要安裝 Apple Application Suport
如果不行的話還是安裝看看
ffmpeg -i "輸入檔案" 參數 "輸出檔案"
qaac 參數 -o "輸出檔案" "輸入檔案"
使用 ffmpeg 解碼為 WAV (PCM) 給 qaac 編碼輸出 M4A(AAC)
ffmpeg -i "輸入檔案" 參數 - | qaac 參數 --ignorelength -o "輸出檔案" -
ffmpeg -i "%~1" -vn -ac 2 -async 1 -f wav -y - | qaac -q 2 --tvbr 100 --ignorelength -o "%~dp1TempAudio.m4a" -
-vn 禁用視訊 -an 禁用音訊 -sn 禁用字幕
-ac 2 是 downmix 至 雙聲道(6即5.1,8即7.1)
如果你有多聲道輸出的話就刪掉吧
-async 1 如果音訊有延遲則會插入空白部分填補
這樣音訊和視訊一樣長,就不會 不同步
qaac 的部分
-q 2 有最高校率
--tvbr 100 為 VBR 模式 指定輸出品質 0~127 可選
ffmpeg -i "%~1" -i "%~dp1TempAudio.m4a" -c:a copy -map 0:v -map 1:a -vf scale='1280:trunc((1280/dar)/16+0.5)*16' -c:v libx264 -profile:v high -preset veryslow -x264opts crf=18:ref=4:bframes=5 -y "%~dp1%~n1.recode.mp4"
-c:a copy 是複製音訊
-map 0:v -map 1:a 篩選出 第一個(0)輸入檔的視訊 與 第二個(1)輸入檔的音訊
例 -map 0:1 篩選出 第一個輸入檔的第二個 track
例 -map 0:s:2 篩選出 第一個輸入檔的第三個 字幕track
-vf scale='1280:trunc((1280/dar)/16+0.5)*16
scale=寬:高
假輸入檔為 1440x1080 PAR=4/3
那輸入檔 dar 就是 (1440/1080)*(4/3)=16/9
1280/dar 就是輸出高, trunc() 就是取整數,trunc(數值/16+0.5)*16 就是取16整數倍
不喜歡的話就刪掉吧
縮到 1280x* 是因為 高解析度影片的位元速率都需要很大才能維持畫質
否則還不如 Resize 縮小解析度
至於x264 我懶得調整細部參數
都是直接用 x264 preset + ref 或 x264 preset + h.264 level
詳細請 Google...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.173.98.192
※ 編輯: falcon 來自: 1.173.98.192 (12/11 17:55)
※ 編輯: falcon 來自: 1.173.98.192 (12/11 18:06)
※ 編輯: falcon 來自: 1.173.98.192 (12/11 18:37)
1F:推 ThisIsNotKFC:推分享 12/11 18:51
※ 編輯: falcon 來自: 1.173.98.192 (12/12 01:25)
2F:→ y3k:<=不會用ffmpeg 和時代脫節的廢渣orz 12/12 09:37
3F:→ falcon:別說得那麼難聽嘛,MEGUI配AVS自動產生,的確好用 12/12 11:46
4F:→ falcon:但 AviSynth 很久沒更新了,一堆問題 12/12 11:46
5F:→ falcon:現在有類似 AviSynth 的替代方案 - VapourSynth 12/12 11:47
※ 編輯: falcon 來自: 1.173.98.192 (12/12 11:58)
6F:→ james1201:AVS一堆問題? 只有不會用的人才一堆問題 12/12 12:14
7F:→ james1201:而且AVS+ 正由另一群人在開發中 目標是原生多線程+x64 12/12 12:15
8F:→ james1201:VPS現在開發的還不夠完整 事實上不太能用 12/12 12:16
9F:→ falcon:VapourSynth 確實還沒完善,需要再等等 12/12 12:44
10F:→ falcon:AVS 問題一堆不是我只有我在說而已 12/12 12:50
11F:→ falcon:AVS載入視訊後會流失一些訊息,必須靠第三方工具取得 12/12 12:53
12F:→ falcon:如 Pixel aspect ratio, display aspect ratio 12/12 12:54
13F:→ falcon:這對我而言很困擾,因為我要用C#或是BAT製作無腦轉換方案 12/12 12:55
14F:→ falcon:我希望能高度自動化,減少麻煩,我才不喜歡AVS 12/12 13:00
15F:→ falcon:用AVS作會複雜很多,而ffmpeg單一工具就能解決大部分問題 12/12 13:06
16F:→ james1201:高度自動化會出的問題是因為源濾鏡的選擇 而非AVS的問題 12/12 14:56
17F:→ james1201:選到不適合的源濾鏡就會直接載入錯誤影像 12/12 14:57
18F:→ james1201:甚至連載入都不能就終止了 12/12 14:58
19F:→ falcon:常用demuxer decoder,ffmpeg都有內建,會自動載入合適的 12/12 15:32
而 resize 是最基本東西,但使用AVS要自動化處裡還真難搞
變形顯示比例的 Pixel Aspect Ratio, Display Aspect Ratio
假設來源是以下...
704x480, NTSC 16:9 (PAR 40:33), DAR 1.78:1
720x480, NTSC 16:9 (PAR 40:33), DAR 1.82:1
1440x1080, PAR 4:3, DAR 1.78:1
ffmpeg 寫個 function 即可自動 Resize,不必手動計算輸入
無論來源 解析度 PAR DAR 如何,都能正確處理
輸出: 1280x* (取 mod 16), 自動PAR(令DAR與來源相同)
scale='1280:trunc((1280/dar)/16+0.5)*16'
輸出: 寬<1280 & 高<720 (取 mod 16), PAR 1:1
scale='min(1280,trunc((720*dar)/16+0.5)*16):min(720,trunc((1280/dar)/16+0.5)*16)',setsar=sar=1/1
輸出: Letterbox, 720x480, PAR 40:33
scale='min(720,trunc((480*33/40*dar)/16+0.5)*16):min(480,trunc((720*40/33/dar)/16+0.5)*16)',pad='w=720:h=480:x=(ow-iw)/2:y=(oh-ih)/2',setsar=sar=40/33
而 AVS 可以用來源的寬高計算 DAR
但如果 PAR 不是 1:1,則會得到錯誤的DAR
只能呼叫第三方程式取得原始 DAR 或 PAR 後將 resize function 插入 AVS
※ 編輯: falcon 來自: 1.173.98.192 (12/12 15:33)
※ 編輯: falcon 來自: 1.173.98.192 (12/12 15:35)
※ 編輯: falcon 來自: 1.173.98.192 (12/12 15:40)
20F:→ falcon:VFR的timecode以及AudioDelay,AVS好像能用ffms自動處理 12/12 17:04
21F:→ falcon:但速度比lavf慢,支援格式也較少 12/12 17:04
22F:→ falcon:AVS相對也比較消耗資源,相同filters、decoder 12/12 17:10