hr3lxphr6j / bililive-go

一个直播录制工具
GNU General Public License v3.0
3.83k stars 493 forks source link

较新版本的 ffmepg 参数设定错误 #422

Closed paomian closed 1 year ago

paomian commented 1 year ago

程序版本

0.7.8

所使用的 config 文件的内容

# config.yml
rpc:
  enable: true            # 是否开启API
  bind: 127.0.0.1:8080    # 监听地址
debug: true               # debug模式
interval: 15              # 直播间状态查询间隔时间(秒)
  #out_put_path: ./          # 输出文件路径
  #out_put_tmpl: ""          # 输出文件模板
feature:
    use_native_flv_parser: false
live_rooms:               # 直播间url
    - https://live.bilibili.com/25836285
    - https://live.bilibili.com/13
video_split_strategies:   # 分隔策略
    on_room_name_changed: false    # 是否在直播间名改变时分隔录像
    max_duration: 1h               # 单个录像最大时长
on_record_finished:       # 录制结束后的动作
  convert_to_mp4: true             # 把录制好的视频转换一份到 mp4
  delete_flv_after_convert: true   # 转换完成后删除原视频文件

程序 log

time="2023-03-20 11:02:52" level=info msg="exit status 1" host="哔哩哔哩刀塔2赛事" room="【预告】21日12点 VG vs OFC"
time="2023-03-20 11:02:52" level=debug msg="End ParseLiveStream(https://cn-gddg-ct-01-15.bilivideo.com/live-bvc/283927/live_46936_bs_5716239_bluray.flv?expires=1679285031&pt=web&deadline=1679285031&len=0&oi=3703081186&platform=web&qn=10000&trid=10006672f6521666409c9eeee57175cb5ad4&uipk=100&uipv=100&nbs=1&uparams=cdn,deadline,len,oi,platform,qn,trid,uipk,uipv,nbs&cdn=cn-gotcha01&upsig=59c2187f026e6895b705c5de17200726&sk=d8fe3d6494139fe43fc16b21400a9061&p2p_type=0&src=57345&sl=10&free_type=0&mid=0&sid=cn-gddg-ct-01-15&chash=0&sche=ban&score=14&pp=rtmp&source=one&trace=0&site=c5b1506d54ab4faa6415482067a02755&order=1, 哔哩哔哩/哔哩哔哩刀塔2赛事/[2023-03-20 11-02-51][哔哩哔哩刀塔2赛事][【预告】21日12点 VG vs OFC].flv)" host="哔哩哔哩刀塔2赛事" room="【预告】21日12点 VG vs OFC"
time="2023-03-20 11:02:52" level=debug msg="exit status 1" host="哔哩哔哩刀塔2赛事" room="【预告】21日12点 VG vs OFC"
time="2023-03-20 11:02:52" level=debug msg="Start ParseLiveStream(https://cn-zjjh-ct-04-14.bilivideo.com/live-bvc/429509/live_17561885_332_c521e483_bluray.flv?expires=1679285032&pt=web&deadline=1679285032&len=0&oi=3703081186&platform=web&qn=10000&trid=100059f5b51dba584602894fa07ac2d07926&uipk=100&uipv=100&nbs=1&uparams=cdn,deadline,len,oi,platform,qn,trid,uipk,uipv,nbs&cdn=cn-gotcha01&upsig=362c6b0a1429cc439691a4c7f032563f&sk=e481755799bdde5d651c5dc7f4cf19ce&p2p_type=0&src=57345&sl=10&free_type=0&mid=0&sid=cn-zjjh-ct-04-14&chash=0&sche=ban&score=14&pp=rtmp&source=one&trace=0&site=b2eec71a5f4bf2ac4e4e98d540aa0525&order=1, 哔哩哔哩/哔哩哔哩刀塔2赛事/[2023-03-20 11-02-52][哔哩哔哩刀塔2赛事][【预告】21日12点 VG vs OFC].flv)" host="哔哩哔哩刀塔2赛事" room="【预告】21日12点 VG vs OFC"
ffmpeg version 5.1.2 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 12.2.1 (Alpine 12.2.1_git20220924-r3) 20220924
  configuration: --prefix=/usr --enable-avfilter --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-gnutls --enable-gpl --enable-libass --enable-libmp3lame --enable-libpulse --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libx264 --enable-libx265 --enable-libtheora --enable-libv4l2 --enable-libdav1d --enable-lto --enable-postproc --enable-pic --enable-pthreads --enable-shared --enable-libxcb --enable-librist --enable-libsrt --enable-libssh --enable-libvidstab --disable-stripping --disable-static --disable-librtmp --disable-lzma --enable-libaom --enable-libopus --enable-libsoxr --enable-libwebp --enable-vaapi --enable-vdpau --enable-vulkan --enable-libdrm --enable-libzmq --optflags=-O2 --disable-debug --enable-libsvtav1
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
Option timeout not found.

自由描述

我使用的 docker 镜像,我发现我试过的版本基本上都有这个问题,包含以下几个版本

  929  docker run --rm -v ~/Movies:/srv/bililive -v  ./config:/etc/bililive-go -p 8080:8080 chigusa/bililive-go;v0.7.7
  930  docker run --rm -v ~/Movies:/srv/bililive -v  ./config:/etc/bililive-go -p 8080:8080 chigusa/bililive-go;v0.7.6
  931  #docker run --rm -v ~/Movies:/srv/bililive -v  ./config:/etc/bililive-go -p 8080:8080 chigusa/bililive-go
  932  docker pull chigusa/bililive-go:v0.7.7
  933  #docker run --rm -v ~/Movies:/srv/bililive -v  ./config:/etc/bililive-go -p 8080:8080 chigusa/bililive-go:v0.7.7
  934  docker run --rm -v ~/Movies:/srv/bililive -v  ./config:/etc/bililive-go -p 8080:8080 chigusa/bililive-go:v0.7.7
  935  docker run --rm -v ~/Movies:/srv/bililive -v  ./config:/etc/bililive-go -p 8080:8080 chigusa/bililive-go:v0.7.6
  936  docker run --rm -v ~/Movies:/srv/bililive -v  ./config:/etc/bililive-go -p 8080:8080 chigusa/bililive-go:v0.7.5
  937  docker run --rm -v ~/Movies:/srv/bililive -v  ./config:/etc/bililive-go -p 8080:8080 chigusa/bililive-go:v0.7.0
  938  docker run --rm -v ~/Movies:/srv/bililive -v  ./config:/etc/bililive-go -p 8080:8080 chigusa/bililive-go:v0.6.5
  939  docker run --rm -v ~/Movies:/srv/bililive -v  ./config:/etc/bililive-go -p 8080:8080 chigusa/bililive-go:v0.6.0
  940  docker run --rm -v ~/Movies:/srv/bililive -v  ./config:/etc/bililive-go -p 8080:8080 chigusa/bililive-go:v0.5.15

大部分的 ffmpeg 都是 5.1.2 版本。这个版本我去 ffmepg 看了。是相对比较新的。我用 ps 看了一下,跑的 ffmpeg 的命令应该是

ffmpeg -nostats -progress - -y -re -user_agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 -referer https://live.bilibili.com/25836285 -timeout 60000000 -i https://cn-gddg-ct-01-15.bilivideo.com/live-bvc/523875/live_2049801772_12600990_bluray.flv?expires=1679256626&pt=web&deadline=1679256626&len=0&oi=3080705143&platform=web&qn=10000&trid=100025b498e20ed343dc8a65e67975aad16d&uipk=100&uipv=100&nbs=1&uparams=cdn,deadline,len,oi,platform,qn,trid,uipk,uipv,nbs&cdn=cn-gotcha01&upsig=94baeac981ece397933bfad68c6ceae4&sk=4207df3de646838b084f14f252be3aff4b18779093814a14930f0aa3303e094e&p2p_type=0&src=57345&sl=10&free_type=0&mid=0&sid=cn-gddg-ct-01-15&chash=1&sche=ban&score=15&pp=rtmp&source=one&trace=0&site=7f3047baad0affe37943d2f2ab96fa61&order=1 -c copy -bsf:a aac_adtstoasc -f a.flv

有一个 -timeout 60000000 我看 5.1.2 版本的 ffmpeg 没有了这个参数。可能取而代之的是 -t 参数,他的描述在 https://ffmpeg.org/ffmpeg.html 在我本机的 5.1.2 ffmpeg 也看到这样的描述

-t duration (input/output)
When used as an input option (before -i), limit the duration of data read from the input file.

When used as an output option (before an output url), stop writing the output after its duration reaches duration.

duration must be a time duration specification, see [(ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual](https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax).

看起来 https://github.com/hr3lxphr6j/bililive-go/blob/master/src/pkg/parser/ffmpeg/ffmpeg.go#L137 这个指令在新版本的 ffmpeg 已经不适用了。

非常奇怪,但是在文档的 https://ffmpeg.org/ffmpeg-all.html#http 这里又可以看到这些选项。但是 http 这个段落里没有 timeout 选项了。唯一能看到和 http 有关系的 timeout 在 https://ffmpeg.org/ffmpeg-all.html#hls-2 。但是看起来是苹果的技术。不确定在 linux 上是否可用。在 rtmp smb 等协议里还是能看到

paomian commented 1 year ago

https://ffmpeg.org/ffmpeg-all.html#Protocols 修复依据在这里