Re: Webラジオの保存方法の質問はこちら【27】 ( No.13 )
日時: 2020/11/20 09:40
名前: おひげ

>>12

入力ソースにどの .m3u8 のURLを指定されているかわかりませんが、入力ソースに複数のProgramが存在する場合
ffmpeg の入力ソースに -map オプションを指定すれば入力するソースから指定されたデータを引っ張ることが可能です。

例えば下記のようなソースであった場合(下記は響の映像付きラジオのソースで超A&G+のソース情報ではありません)

Program 0
Metadata:
variant_bitrate : 72000
Stream #0:0: Audio: aac (HE-AACv2) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp
Metadata:
variant_bitrate : 72000
Program 1
Metadata:
variant_bitrate : 1508000
Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp
Metadata:
variant_bitrate : 1508000
Stream #0:2: Video: h264 (Constrained Baseline) ([27][0][0][0] / 0x001B), yuv420p, 320x180 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Metadata:
variant_bitrate : 1508000
Program 2
Metadata:
variant_bitrate : 2012000
Stream #0:3: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp
Metadata:
variant_bitrate : 2012000
Stream #0:4: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 320x180 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Metadata:
variant_bitrate : 2012000


とくにオプションを指定しない場合のffmpegの動作は検出された1番目の映像と音声をコピーして保存する仕様となります。

その為、上記のようなソースの場合、最初に検出された動画 Stream #0:2 と 音声 Stream #0:0 が自動選択されるため、
保存時のログには

Stream mapping:
Stream #0:2 -> #0:0 (copy)
Stream #0:0 -> #0:1 (copy)

といった形の #0:2 を #0:0 (ビデオ) #0:0 を #0:1 (オーディオ) に設定した旨のログが記録されます。

別の動画や音声プログラムのデータを保存したい場合、入力ソースの後ろに下記のような記載をしてやれば必要なデータを構築することができます。

例) ffmpeg "入力URL" -map 0:4 -map 0:3

このような記載をした場合、動画を Stream #0:4 音声を Stream #0:3 から入力する形となるため

実行時のログは

Stream mapping:
Stream #0:4 -> #0:0 (copy)
Stream #0:3 -> #0:1 (copy)

と指定した形のデータを持ってくることが可能となります。

現在保存されている際の実行ログを確認され Stream mapping: がどうなっているかを見て必要なデータを -map オプションで指定してやれば
動画付きにすることが可能ではないかと思われます。



もっとも、超A&G+の場合、下記ソースを使用すれば現時点では映像と音楽が1種類しかない(Program0しか存在しない)為、細かいオプションなしで
映像付きで保存できるはずです。

入力ソース1 (標準のPCブラウザ用) : https://fms2.uniqueradio.jp/agqr10/aandg1.m3u8
入力ソース2 (iphoneから視聴した場合) : https://hls-base1.mitene.ad.jp/agqr1/iphone/3Gs.m3u8

このどちらかを入力ソースにすれば

Program 0
Metadata:
variant_bitrate : 0
Stream #0:0: Video: h264 (Baseline) ([27][0][0][0] / 0x001B), yuv420p(tv, smpte170m/smpte170m/bt709), 320x180 [SAR 1:1 DAR 16:9], 10 tbr, 90k tbn, 19.98 tbc
Metadata:
variant_bitrate : 0
Stream #0:1: Audio: aac (HE-AACv2) ([15][0][0][0] / 0x000F), 24000 Hz, stereo, fltp
Metadata:
variant_bitrate : 0

上記のようなプログラム構成なので、特に何もオプションをしていしなくても映像付きになると思われます。
(ソースは本日20/11/20時点では有効ですが、今後無効になる可能性はあります)


コマンド例 1 (記録時にログをすべて出す場合)

ffmpeg -i "入力ソースのURL" -t 記録時間 -movflags faststart -c copy -bsf:a aac_adtstoasc 出力ファイル.mp4

コマンド例 2 (記録時にログを最小限にする場合)

ffmpeg -loglevel error -stats -i "入力ソースのURL" -t 記録時間 -movflags faststart -c copy -bsf:a aac_adtstoasc 出力ファイル.mp4


入力ソースURLは上記のソース1かソース2のURLを記載、記録時間は秒で記載(30分の場合は1800)、出力ファイルは保存したいファイル名.mp4を記載してください


※記録の際は ffmpeg をなるべく新しいバージョンにしておかなければ、不定期にフリーズや停止をするため最後まで記録されない場合があるようです。




トップページ