Closed MAN-GOR closed 5 months ago
第一个问题,你的理解没问题,应该会不断向文件中增加内容,不会覆盖。之前我测试下来是正常的,我稍后也会再次测试一下网页版的直播。
第五个问题已修复 https://github.com/nilaoda/N_m3u8DL-RE/commit/4f809a42bb096b8b343c004957a916a6cf287631
第一个问题的测试:
N_m3u8DL-RE "https://edgeware-live.edgeware.tvb.com/__cl/slocalr43/__c/ott_J_h264/__op/cenc_m/__f/index.mpd?sig=.......&p=4092" --save-name "_TEST" --key 2747a13724124cc3cd7120b65fd6164c:92e0fe47d54ecba79141f1c9f2afe8fc --append-url-params --mp4-real-time-decryption --use-shaka-packager --live-real-time-merge
另外,录制同时可以使用如下命令将音视频进行实时混流以便在播放器中实时观看,(或进行串流)
ffmpeg -readrate 1 -i 2022-09-21_19-54-42_Jade.mp4 -i 2022-09-21_19-54-42_Jade.chi.m4a -c copy 2022-09-21_19-54-42_Jade.ts
只需要打开2022-09-21_19-54-42_Jade.ts
,大部分播放器都会自动随着TS文件的更新而更新可播放时长。
第一個問題的測試
我用你提供的命令,只是刪除掉--use-shaka-packager
:
N_m3u8DL-RE "https://edgeware-live.edgeware.tvb.com/__cl/slocalr43/__c/ott_J_h264/__op/cenc_m/__f/index.mpd?sig=.......&p=4092" --save-name "_TEST" --key "KEY" --append-url-params --mp4-real-time-decryption --live-real-time-merge
第一次是錄到2分鐘,影片長度也是2分鐘;第二次是錄到3分4秒,影片長度是1分4秒;第三次是錄到4分8秒,影片長度也是1分4秒
不太確定能不能幫到你,這是用--log-level "DEBUG"
錄製時的文本:
OneDrive
@MAN-GOR 这就是为什么我要加--use-shaka-packager。 mp4decrypt会造成时间戳问题 你可以用ffmpeg或者mkvmerge混流一下音视频 应该就正常了
@toyou-shu 录制GUI_20220923.zip
請問這個key“92e0fe47d54ecba79141f1c9f2afe8fc”是在哪裡看到的?
請問這個key“92e0fe47d54ecba79141f1c9f2afe8fc”是在哪裡看到的?
我不能教你我是如何獲取的,我只能給你人們普遍使用的方法 https://streamable.com/bjf5f8 有任何問題請善用Google,所有答案都會在開發者工具和Google裡找到
這就是為什麼我要加--use-shaka-packager。mp4decrypt會造成時間戳問題 你可以用ffmpeg或者mkvmerge混流一下音視頻 應該就正常了
mp4decrypt有時間戳問題,shaka-packager播放時會卡住,兩者都需要混流才能觀看XD 不過後者能支援實時混流觀看,前者只能混流從開始下載到輸入混流命令時所下載的那一段
@tvbent getwvkey.cc 可能会对你有帮助
話說如果合併時出現 「WARN : [h264 @ 000002405e3d7040] Increasing reorder buffer to 1」 「WARN : [h264 @ 000002405e3d7040] Increasing reorder buffer to 2」 會對合併後的影片有什麼影響嗎?
myTV SUPER每一支影片合併時都會出現「Increasing reorder buffer to 2」
話說如果合併時出現 「WARN : [h264 @ 000002405e3d7040] Increasing reorder buffer to 1」 「WARN : [h264 @ 000002405e3d7040] Increasing reorder buffer to 2」 會對合併後的影片有什麼影響嗎?
myTV SUPER每一支影片合併時都會出現「Increasing reorder buffer to 2」
没什么影响
下載ViuTV上的「ERROR自肥企畫」時發現,第4集和第6集合併會提示以下錯誤:
Application provided duration: 4293728615000 is invalid
WARN : av_interleaved_write_frame(): Invalid argument
WARN : Error muxing a packet for output file #0
分開下載影、音、字幕後發現,字幕最尾那一句的結束時間軸的修正有錯誤,可能是這個原因所導致的提示錯誤。
下載ViuTV上的「ERROR自肥企畫」時發現,第4集和第6集合併會提示以下錯誤:
Application provided duration: 4293728615000 is invalid
WARN : av_interleaved_write_frame(): Invalid argument
WARN : Error muxing a packet for output file #0
分開下載影、音、字幕後發現,字幕最尾那一句的結束時間軸的修正有錯誤,可能是這個原因所導致的提示錯誤。
我木有会员。。😂
我木有會員。。😂
你誤會了,它所提示的會員是指註冊而已,ViuTV並沒有付費機制
還有Viu(另一個平台)在「調用ffmpeg合併中...」時會多次提示:
WARN : [h264 @ 00000282f82cd380] non-existing SPS 0 referenced in buffering period
WARN : Last message repeated 1 times
WARN : [mpegts @ 00000282f829e880] Packet corrupt (stream = 0, dts = 1044000).
WARN : concat:000.ts|001.ts|002.ts|003.ts|004.ts|005.ts|006.ts|007.ts|008.ts|009.ts|010.ts|011.ts|012.ts|013.ts|014.ts|015.ts|016.ts|017.ts|018.ts|019.ts|020.ts|021.ts|022.ts|023.ts|024.ts|025.ts|026.ts|027.ts|028.ts|029.ts|030.ts|031.ts|032.ts|033.ts|034.ts|035.ts|036.ts|037.ts|038.ts|039.ts|040.ts|041.ts|042.ts|043.ts|044.ts|045.ts|046.ts|047.ts|048.ts|049.ts|050.ts|051.ts|052.ts|053.ts|054.ts|055.ts|056.ts|057.ts|058.ts|059.ts|060.ts|061.ts|062.ts|063.ts|064.ts|065.ts|066.ts|067.ts|068.ts|069.ts|070.ts|071.ts|072.ts|073.ts|074.ts|075.ts|076.ts|077.ts|078.ts|079.ts|080.ts|081.ts|082.ts|083.ts|084.ts|085.ts|086.ts|087.ts|088.ts|089.ts|090.ts|091.ts|092.ts|093.ts|094.ts|095.ts|096.ts|097.ts|098.ts|099.ts|100.ts|101.ts|102.ts|103.ts|104.ts|105.ts|106.ts|107.ts|108.ts|109.ts|110.ts|111.ts|112.ts|113.ts|114.ts|115.ts|116.ts|117.ts|118.ts|119.ts|120.ts|121.ts|122.ts|123.ts|124.ts|125.ts|126.ts|127.ts|128.ts|129.ts|130.ts|131.ts|132.ts|133.ts|134.ts|135.ts|136.ts|137.ts|138.ts|: corrupt input packet in stream 0
請問這個有什麼影響,或是有什麼解決方法嗎?
下載ViuTV上的「ERROR自肥企畫」時發現,第4集和第6集合併會提示以下錯誤:
另外之前說的ViuTV是指使用--mux-after-done
時的合併
還有Viu(另一個平台)在「調用ffmpeg合併中...」時會多次提示:
WARN : [h264 @ 00000282f82cd380] non-existing SPS 0 referenced in buffering period
WARN : Last message repeated 1 times
WARN : [mpegts @ 00000282f829e880] Packet corrupt (stream = 0, dts = 1044000).
WARN : concat:000.ts|001.ts|002.ts|003.ts|004.ts|005.ts|006.ts|007.ts|008.ts|009.ts|010.ts|011.ts|012.ts|013.ts|014.ts|015.ts|016.ts|017.ts|018.ts|019.ts|020.ts|021.ts|022.ts|023.ts|024.ts|025.ts|026.ts|027.ts|028.ts|029.ts|030.ts|031.ts|032.ts|033.ts|034.ts|035.ts|036.ts|037.ts|038.ts|039.ts|040.ts|041.ts|042.ts|043.ts|044.ts|045.ts|046.ts|047.ts|048.ts|049.ts|050.ts|051.ts|052.ts|053.ts|054.ts|055.ts|056.ts|057.ts|058.ts|059.ts|060.ts|061.ts|062.ts|063.ts|064.ts|065.ts|066.ts|067.ts|068.ts|069.ts|070.ts|071.ts|072.ts|073.ts|074.ts|075.ts|076.ts|077.ts|078.ts|079.ts|080.ts|081.ts|082.ts|083.ts|084.ts|085.ts|086.ts|087.ts|088.ts|089.ts|090.ts|091.ts|092.ts|093.ts|094.ts|095.ts|096.ts|097.ts|098.ts|099.ts|100.ts|101.ts|102.ts|103.ts|104.ts|105.ts|106.ts|107.ts|108.ts|109.ts|110.ts|111.ts|112.ts|113.ts|114.ts|115.ts|116.ts|117.ts|118.ts|119.ts|120.ts|121.ts|122.ts|123.ts|124.ts|125.ts|126.ts|127.ts|128.ts|129.ts|130.ts|131.ts|132.ts|133.ts|134.ts|135.ts|136.ts|137.ts|138.ts|: corrupt input packet in stream 0
請問這個有什麼影響,或是有什麼解決方法嗎?下載ViuTV上的「ERROR自肥企畫」時發現,第4集和第6集合併會提示以下錯誤:
另外之前說的ViuTV是指使用
--mux-after-done
時的合併
两种可能
--binary-merge
)来规避这些警告。兩種可能
- 如果重新下載沒有這些警告信息,說明真的是網絡原因丟包了
- 如果重新下載還是這樣,則可能是服務端切片的問題導致ffmpeg合並時警告TS包有問題(也可能是解密存在問題)。如果下載好的文件播放起來沒有什麼問題,可以啟用二進制合並(
--binary-merge
)來規避這些警告。
感謝,因為每套也會提示,而且Viu是無加密m3u8,所以加個--binary-merge
應該就可以了
使用「--mux-after-done "format=mp4"」混流HBO GO的檔案後,在potplayer裡所有語言標籤都變成不知名符號 而且在mkvtoolnix裡查看使用「--mux-after-done "format=mp4"」混流的檔案時,所有字幕皆沒有顯示。使用mkvtoolnix再度混流後的檔案會失去所有字幕
另外有一個問題,使用「--auto-select」時,音訊會自動選擇所有音質最好的原聲和配音 但是當我使用「-sa lang="ENG|YUE":for=best」時,它只會選擇其中一條音訊下載 我知道在best後面加2字能再多下載一條,但可能不是每一集都有配音,那這情況又會下載到1條最好和1條次好的英文音訊 請問有沒有一個選項能下載所有音質最好的原聲和配音?
@MAN-GOR 先设置到debug级别--log-level DEBUG
看看合并时使用的命令吧。我怀疑是语言描述是简体中文的问题(?)
mkvtoolnix看不到是因为mp4容器的字幕它识别不到。要想它能识别,需要设置format=mkv
。此外,为了MKV能有更好的兼容性,可以追加--sub-format SRT
。
选择音轨的问题,暂时应该做不到,等后续优化吧。
@MAN-GOR 先設置到debug級別
--log-level DEBUG
看看合並時使用的命令吧。我懷疑是語言描述是簡體中文的問題(?)
忘記給你密鑰和連結來測試了,現在補上:
N_m3u8DL-RE.exe --tmp-dir "Downloads" --save-dir "Downloads" --use-shaka-packager --auto-select --sub-format "SRT" --mux-after-done "format=mp4" --save-name "1" --key "41ec85b13972541d8cd968398182c1c7:f8ac68dd1de813d3383a3765290ed4a4" "https://hbogoprod-vod.akamaized.net/video/vod/output/HBOAsia/62aafc61d940521074a90c13_hbovodhd/dash0/TWN_index.mpd"
mkvtoolnix看不到是因為mp4容器的字幕它識別不到。要想它能識別,需要設置
format=mkv
。此外,為了MKV能有更好的兼容性,可以追加--sub-format SRT
--sub-format SRT
的話之前已經有加了,不過format=
是用mp4而已,我晚些看看mkv會不會一樣
選擇音軌的問題,暫時應該做不到,等後續優化吧。
好的,感謝!
@MAN-GOR 你这种场景,可以这样来实现音轨选择
直接通过group id来过滤
-sa id="(ENG|YUE).*/3":for=best2
过滤group id,再过滤语言
-sa id=".*/3":lang="ENG|YUE":for=best2
这样的话只会在最佳音轨里进行筛选,不会下载其他质量的音轨。
先設置到debug級別
--log-level DEBUG
看看合並時使用的命令吧。我懷疑是語言描述是簡體中文的問題(?)mkvtoolnix看不到是因為mp4容器的字幕它識別不到。要想它能識別,需要設置
format=mkv
。此外,為了MKV能有更好的兼容性,可以追加--sub-format SRT
。
使用format=mp4
合併時,沒有錯誤提示,但裡面的語言標籤全是不知名符號:
DEBUG : E:\widevine_keys-main\ffmpeg.exe: -loglevel warning -y -i "Downloads\1.mp4" -i "Downloads\1.THA.m4a" -i "Downloads\1.ENG.m4a" -i "Downloads\1.YUE.m4a" -i "Downloads\1.TH.srt" -i "Downloads\1.MA.srt" -i "Downloads\1.EN.srt" -i "Downloads\1.ID.srt" -i "Downloads\1.CZ.srt" -i "Downloads\1.CN.srt" -map 0 -map 1 -map 2 -map 3 -map 4 -map 5 -map 6 -map 7 -map 8 -map 9 -c:a copy -c:v copy -c:s mov_text -map_metadata -1 -metadata:s:0 language="und" -metadata:s:1 language="THA" -metadata:s:2 language="ENG" -metadata:s:3 language="YUE" -metadata:s:4 language="TH" -metadata:s:5 language="MA" -metadata:s:6 language="EN" -metadata:s:7 language="ID" -metadata:s:8 language="CZ" -metadata:s:9 language="CN" -metadata date="2022-10-11T18:16:07.0452334+08:00" -ignore_unknown -copy_unknown "Downloads\1.MUX.mp4"
WARN : Cleaning files...
WARN : Rename to 1.mp4
INFO : Done
使用format=mkv
合併後無亂碼標籤,但合併時有「Starting new cluster due to timestamp」提示
E:\widevine_keys-main\ffmpeg.exe: -loglevel warning -y -i "Downloads\1.mp4" -i "Downloads\1.THA.m4a" -i "Downloads\1.ENG.m4a" -i "Downloads\1.YUE.m4a" -i "Downloads\1.TH.srt" -i "Downloads\1.MA.srt" -i "Downloads\1.EN.srt" -i "Downloads\1.ID.srt" -i "Downloads\1.CZ.srt" -i "Downloads\1.CN.srt" -map 0 -map 1 -map 2 -map 3 -map 4 -map 5 -map 6 -map 7 -map 8 -map 9 -c copy -map_metadata -1 -metadata:s:0 language="und" -metadata:s:1 language="THA" -metadata:s:2 language="ENG" -metadata:s:3 language="YUE" -metadata:s:4 language="TH" -metadata:s:5 language="MA" -metadata:s:6 language="EN" -metadata:s:7 language="ID" -metadata:s:8 language="CZ" -metadata:s:9 language="CN" -metadata date="2022-10-11T18:13:31.3668000+08:00" -ignore_unknown -copy_unknown "Downloads\1.MUX.mkv"
WARN : [matroska @ 000002ba82643c00] Starting new cluster due to timestamp
WARN : Last message repeated 4 times
WARN : Cleaning files...
WARN : Rename to 1.mkv
INFO : Done
使用format=mkv:muxer=mkvmerge
時會直接提示合併失敗
DEBUG : E:\widevine_keys-main\mkvmerge.exe: -q --output "Downloads\1.MUX.mkv" --no-chapters --language 0:"und" "Downloads\1.mp4" --language 0:"THA" "Downloads\1.THA.m4a" --language 0:"ENG" "Downloads\1.ENG.m4a" --language 0:"YUE" "Downloads\1.YUE.m4a" --language 0:"TH" "Downloads\1.TH.srt" --language 0:"MA" "Downloads\1.MA.srt" --language 0:"EN" "Downloads\1.EN.srt" --language 0:"ID" "Downloads\1.ID.srt" --language 0:"CZ" "Downloads\1.CZ.srt" --language 0:"CN" "Downloads\1.CN.srt"
ERROR : Mux failed
mp4和mkvmerge混流出來的檔案有問題可能是因為語言標籤(CN和CZ)不符合規格?
另外關於我之前說的:
下載ViuTV上的「ERROR自肥企畫」時發現,第4集和第6集合併會提示以下錯誤:
Application provided duration: 4293728615000 is invalid
WARN : av_interleaved_write_frame(): Invalid argument
WARN : Error muxing a packet for output file #0
相信錯誤源頭在於字幕最尾句的結束時間軸 從下圖可以看到「--auto-subtitle-fix-True」的開始時間軸是00:23:03.200,但結束時間軸卻是00:02:24.519
最終測試強行合併會導致最後一句的字幕連影音一起被剪走 原片是23:04,合併後變成了23:03
@MAN-GOR 已修正时间轴问题
混流那个确实是因为MPD描述中lang不是标准的ISO Code,导致合并失败的。这种情况还是手动混流吧……
@MAN-GOR 0.0.4对HBO的语言标签做了优化
@MAN-GOR 0.0.4对HBO的语言标签做了优化
感謝您!
MA是馬來文,是找不到馬來文的語言標籤嗎? 因為MA還是會顯示und
另外那些中文名稱是根據語言標籤來對應嗎? 所以Yue、CN、CZ才不會顯示為粵語、簡中、繁中
@MAN-GOR 程序判断逻辑在这里: https://github.com/nilaoda/N_m3u8DL-RE/blob/9ad3b9edb12c78b1f6a7d9c4342fb9c72ff5b21b/src/N_m3u8DL-RE/Util/MergeUtil.cs#L267
在Windows上支持的全部标签和显示名称:
Yue、CN、CZ不在里面,所以识别不到。我还在考虑更好的方式,也许应该允许用户输入自定义映射?
另外,录制同时可以使用如下命令将音视频进行实时混流以便在播放器中实时观看,(或进行串流)
ffmpeg -readrate 1 -i 2022-09-21_19-54-42_Jade.mp4 -i 2022-09-21_19-54-42_Jade.chi.m4a -c copy 2022-09-21_19-54-42_Jade.ts
只需要打开
2022-09-21_19-54-42_Jade.ts
,大部分播放器都会自动随着TS文件的更新而更新可播放时长。
请问对字幕有什么比较好的办法可以加入串流吗?看了一下新增的--live-pipe-mux
参数,发现在代码里排除了字幕流,mpeg-ts 也确实不支持 srt 字幕。也尝试过用下面的ffmpeg
命令转成 hls 流,但是-readrate 1
参数似乎对字幕无效,只有在命令运行时已经写入部分的srt有被转成webvtt,后续追加的字幕ffmpeg
就没有继续读取了。
有没有可能根据下载的分段直接动态生成 m3u8 呢?但是目前即使开启--live-keep-segments
,字幕保留的分段格式还是转成srt之前的原始格式。
ffmpeg -re -i ${infile_prefix}.mp4 -i ${infile_prefix}.chi.m4a -i ${infile_prefix}.chi.srt \
-map 0 -map 1 -map 2 \
-c:v copy -c:a copy -c:s webvtt \
-hls_flags delete_segments -f hls \
-var_stream_map "a:0,agroup:chi,default:yes v:0,agroup:chi,s:0,sgroup:chi" \
-hls_time 30 -master_pl_name index_test.m3u8 "$stream_dir/live_%v.m3u8"
@benwwchen 生成m3u8是可行的,不过需要花费大量的时间对字幕进行单独处理,暂时搁置。
在myTV SUPER下載「日語」或「韓語」影劇時開啟自動合併: 使用ffmpeg自動合併時,音軌會顯示為und,而非對應標籤。 使用mkvmerge自動合併時,會提示合併失敗。
@MAN-GOR 加进去了,可以从Actions下载新版本:
https://github.com/nilaoda/N_m3u8DL-RE/actions/runs/4626229144 https://nightly.link/nilaoda/N_m3u8DL-RE/actions/runs/4626229144
測試版本:Build Latest #61 測試系統:Win 10
不確定是我理解錯誤還是「錄製直播時即時合併」有BUG 在我預想中是把最新分片合併在之前下載的尾段,例如我之前下載2分鐘,最新分片是40秒,那就合併為2分40秒 但根據我測試是把最新分片覆蓋掉之前下載的,例如我之前下載2分鐘,最新分片是40秒,那40秒就會把2分鐘覆蓋掉 到錄製完成後合併片段只是最後一次下載的分片,之前下載的全都被覆蓋
錄製myTV SUPER的回放直播(我測試是翡翠台),不會錄製到當前最新的直播片段,而是會錄製到3小時前的片段(3小時是回放極限) 實測是因為myTV SUPER網頁版的mpd連結上會附帶「&mode=admarker%2Cticks」(模式=廣告標記,刻度),把它刪除掉就可以錄製到當前最新的直播片段
以「點播」形式下載myTV SUPER的回放直播(我測試是翡翠台),由於混流時會提示「pts has no value」、「Application provided duration: 47528000000 / timestamp: 47528000000 is out of range for mov/mp4 format」,觀看混流字幕時發現字幕會提前很多顯示 但導入沒刪除的外部字幕時發現,只需把字幕提前XX秒就能對應一整部錄製的直播…
由於錄製直播會「自動併發下載」且預設的「下載執行緒數」為8,當「auto-select」選擇的選項有點多時(1影+1音+3字幕),會提示「Response status code does not indicate success: 403 (Forbidden).」,有時候甚至會用盡重試次數,手動設置「下載執行緒數」為4後會比較少提示,就算提示也不會用盡重試次數
在繁體界面裡,「--use-shaka-packager」的解釋是「解密?使用shaka-packager替代mp4decrypt」,有個「?」在裡面