CasparCG / server

CasparCG Server is a Windows and Linux software used to play out professional graphics, audio and video to multiple outputs. It has been in 24/7 broadcast production since 2006. Ready-to-use downloads are available under the Releases tab https://casparcg.com.
GNU General Public License v3.0
911 stars 268 forks source link

Rewrite and update ffmpeg producer #636

Closed ronag closed 6 years ago

ronag commented 7 years ago

The current implementation uses a very old API and needs update.

premultiply commented 7 years ago

Please use ffmpeg 3.4 (or higher) as it includes some important quality improvements for broadcast grade applications such as fixed scaling and the updated bwdif deinterlacer as drop-in replacement for yadif.

mauricev78 commented 6 years ago

If this is done please ad support for the HAP / HAP Q codec (currently supported by FFMPEG with libsnappy) using the GPU for decoding

mint-dewit commented 6 years ago

Please consider #266 as well.

dimitry-ishenko commented 6 years ago

@ronag ronag removed their assignment 6 days ago

@ronag does that mean you are not going to work on it? Did something change?

ronag commented 6 years ago

@dimitry-ishenko mistake

5opr4ni commented 6 years ago

Hi! Just so we remember to test for these things.

From the terminal: help producer ffmpeg producer

FFmpeg Producer

Syntax:
  [clip,url:string] {[loop:LOOP]} {IN,SEEK [in:int]} {OUT [out:int] | LENGTH
  [length:int]} {FILTER [filter:string]} {CHANNEL_LAYOUT
  [channel_layout:string]}

The FFmpeg Producer can play all media that FFmpeg can play, which includes many
QuickTime video codec such as Animation, PNG, PhotoJPEG, MotionJPEG, as well as
H.264, FLV, WMV and several audio codecs as well as uncompressed audio.

  clip
    The file without the file extension to play. It should reside under the
    media folder.
  url
    If clip contains :// it is instead treated as the URL parameter. The URL can
    either be any streaming protocol supported by FFmpeg,
    dshow://video={webcam_name} or v4l2://{video device} or iec61883://{auto}.
  loop
    Will cause the media file to loop between in and out.
  in
    Optionally sets the first frame. 0 by default. If loop is specified, this
    will be the frame where it starts over again.
  out
    Optionally sets the last frame. If not specified the clip will be played to
    the end. If loop is specified, the file will jump to start position once it
    reaches the last frame.
  length
    Optionally sets the length of the clip. Equivalent to OUT in + length.
  filter
    If specified, will be used as an FFmpeg video filter.
  channel_layout
    Optionally override the automatically deduced audio channel layout.Either a
    named layout as specified in casparcg.config or in the format
    [type:string]:[channel_order:string] for a custom layout.

Examples:

  >> PLAY 1-10 folder/clip
  ...to play all frames in a clip and stop at the last frame.

  >> PLAY 1-10 folder/clip LOOP
  ...to loop a clip between the first frame and the last frame.

  >> PLAY 1-10 folder/clip LOOP IN 10
  ...to loop a clip between frame 10 and the last frame.

  >> PLAY 1-10 folder/clip LOOP IN 10 LENGTH 50
  ...to loop a clip between frame 10 and frame 60.

  >> PLAY 1-10 folder/clip IN 10 OUT 60
  ...to play frames 10-60 in a clip and stop.

  >> PLAY 1-10 folder/clip FILTER yadif=1,-1
  ...to deinterlace the video.

  >> PLAY 1-10 folder/clip CHANNEL_LAYOUT film
  ...given the defaults in casparcg.config this will specifies that the clip has
  6 audio channels of the type 5.1 and that they are in the order FL FC FR BL BR
  LFE regardless of what ffmpeg says.

  >> PLAY 1-10 folder/clip CHANNEL_LAYOUT "5.1:LFE FL FC FR BL BR"
  ...specifies that the clip has 6 audio channels of the type 5.1 and that they
  are in the specified order regardless of what ffmpeg says.

  >> PLAY 1-10 rtmp://example.com/live/stream
  ...to play an RTMP stream.

  >> PLAY 1-10 "dshow://video=Live! Cam Chat HD VF0790"
  ...to use a web camera as video input on Windows.

  >> PLAY 1-10 v4l2:///dev/video0
  ...to use a web camera as video input on Linux.

  >> PLAY 1-10 iec61883://auto
  ...to use a FireWire (H)DV video device as video input on Linux.

The FFmpeg producer also supports changing some of the settings via CALL:

  >> CALL 1-10 LOOP 1

  >> CALL 1-10 IN 10

  >> CALL 1-10 OUT 60

  >> CALL 1-10 LENGTH 50

  >> CALL 1-10 SEEK 30

Framerate conversion control / Slow motion examples:

  >> CALL 1-10 FRAMERATE INTERPOLATION BLEND2
  ...enables 2 frame blend interpolation.

  >> CALL 1-10 FRAMERATE INTERPOLATION BLEND3
  ...enables 3 frame blend interpolation.

  >> CALL 1-10 FRAMERATE INTERPOLATION DROP_OR_REPEAT
  ...disables frame interpolation.

  >> CALL 1-10 FRAMERATE SPEED 0.25
  ...immediately changes the speed to 25%. Sound will be disabled.

  >> CALL 1-10 FRAMERATE SPEED 0.25 50
  ...changes the speed to 25% linearly over 50 frames. Sound will be disabled.

  >> CALL 1-10 FRAMERATE SPEED 0.25 50 easeinoutsine
  ...changes the speed to 25% over 50 frames using specified easing curve. Sound
  will be disabled.

  >> CALL 1-10 FRAMERATE SPEED 1 50
  ...changes the speed to 100% linearly over 50 frames. Sound will be enabled
  when the destination speed of 100% has been reached.

There is also some undocumented things like: CALL 1-10 SEEK REL -100

BTW! If you haven't tested the slomo, you should! Try like this.

CALL 1-10 FRAMERATE SPEED 0.25
CALL 1-10 FRAMERATE INTERPOLATION BLEND2 

(or BLEND3)

TondaKrist commented 6 years ago

Can you provide a windows build with this fix please? Thanks a lot

ronag commented 6 years ago

Should be buildable runnable in debug windows build:

https://github.com/nxtedition/caspar/pull/3

Still some things missing like seeking and looping.

ronag commented 6 years ago

There are now test binaries and a TODO list available at https://github.com/nxtedition/caspar/pull/3 for anyone that wants to help with testing.