Opened 8 years ago

Closed 8 years ago

#5229 closed defect (worksforme)

movie filter does not accept pipe protocol as input

Reported by: dave rice Owned by:
Priority: normal Component: avdevice
Version: git-master Keywords: movie
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:

The movie filter defines the 'filename' argument with: "The name of the resource to read (not necessarily a file; it can also be a device or a stream accessed through some protocol)."

I would like to have the movie filter access the input from a pipe, but the pipe protocol doesn't appear to work in the movie filter.

How to reproduce:

The ffmpeg is simply used here to produce an output to pipe. ffplay should access the pipe in the movie filter but it provides an error.

ffmpeg -f lavfi -i mandelbrot -c copy -f nut - | ffplay -f lavfi "movie=pipe:0"
ffmpeg version N-43483-gac5a4de Copyright (c) 2000-2016 the FFmpeg developers
  built with Apple LLVM version 7.0.2 (clang-700.1.81)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --enable-libfontconfig --enable-libfreetype --enable-libfaac --enable-libass --enable-ffplay --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/1.5.2_1/include/openjpeg-1.5 --enable-nonfree --enable-vda
  libavutil      55. 17.100 / 55. 17.100
  libavcodec     57. 24.102 / 57. 24.102
  libavformat    57. 25.100 / 57. 25.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 31.100 /  6. 31.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
ffplay version N-43483-gac5a4de Copyright (c) 2003-2016 the FFmpeg developers
  built with Apple LLVM version 7.0.2 (clang-700.1.81)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --enable-libfontconfig --enable-libfreetype --enable-libfaac --enable-libass --enable-ffplay --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/1.5.2_1/include/openjpeg-1.5 --enable-nonfree --enable-vda
  libavutil      55. 17.100 / 55. 17.100
  libavcodec     57. 24.102 / 57. 24.102
  libavformat    57. 25.100 / 57. 25.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 31.100 /  6. 31.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
[Parsed_movie_0 @ 0x7febf2c44e20] Failed to avformat_open_input 'pipe'
[lavfi @ 0x7febf3081a00] Error initializing filter 'movie' with args 'pipe:0'
movie=pipe:0: No such file or directory

Input #0, lavfi, from 'mandelbrot':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: rawvideo (RGB[0] / 0x424752), rgb0, 640x480 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
Output #0, nut, to 'pipe:':
  Metadata:
    encoder         : Lavf57.25.100
    Stream #0:0: Video: rawvideo (RGB[0] / 0x424752), rgb0, 640x480 [SAR 1:1 DAR 4:3], q=2-31, 25 tbr, 51200 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help

This example is the same except that the sdterr output of ffmpeg is redirected to distinguish the two processes:

ffmpeg -f lavfi -i mandelbrot -c copy -f nut - 2>/dev/null | ffplay -f lavfi "movie=pipe:0"
ffplay version N-43483-gac5a4de Copyright (c) 2003-2016 the FFmpeg developers
  built with Apple LLVM version 7.0.2 (clang-700.1.81)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --enable-libfontconfig --enable-libfreetype --enable-libfaac --enable-libass --enable-ffplay --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/1.5.2_1/include/openjpeg-1.5 --enable-nonfree --enable-vda
  libavutil      55. 17.100 / 55. 17.100
  libavcodec     57. 24.102 / 57. 24.102
  libavformat    57. 25.100 / 57. 25.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 31.100 /  6. 31.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
[Parsed_movie_0 @ 0x7fc319458f20] Failed to avformat_open_input 'pipe'
[lavfi @ 0x7fc31a82a600] Error initializing filter 'movie' with args 'pipe:0'
movie=pipe:0: No such file or directory

The pipe protocol does work as a direct input:

ffmpeg -f lavfi -i mandelbrot -c copy -f nut - 2>/dev/null | ffplay -i "pipe:0"
ffplay version N-43483-gac5a4de Copyright (c) 2003-2016 the FFmpeg developers
  built with Apple LLVM version 7.0.2 (clang-700.1.81)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --enable-libfontconfig --enable-libfreetype --enable-libfaac --enable-libass --enable-ffplay --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/1.5.2_1/include/openjpeg-1.5 --enable-nonfree --enable-vda
  libavutil      55. 17.100 / 55. 17.100
  libavcodec     57. 24.102 / 57. 24.102
  libavformat    57. 25.100 / 57. 25.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 31.100 /  6. 31.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
Input #0, nut, from 'pipe:0':q=    0KB vq=    0KB sq=    0B f=0/0   
  Metadata:
    encoder         : Lavf57.25.100
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: rawvideo (RGB[0] / 0x424752), rgb0, 640x480, SAR 1:1 DAR 4:3, 25 fps, 25 tbr, 51200 tbn, 51200 tbc
   1.10 M-V: -0.039 fd=   3 aq=    0KB vq=15601KB sq=    0B f=0/0 

Patches should be submitted to the ffmpeg-devel mailing list and not this bug tracker.

Change History (2)

comment:1 by Elon Musk, 8 years ago

It does work here:

ffmpeg -f lavfi -i mandelbrot -c copy -f nut - | ffmpeg -f lavfi -i "movie=pipe
\:0" -f nut -c:v rawvideo - | mpv -

You need to escape ':'.

comment:2 by Carl Eugen Hoyos, 8 years ago

Component: undeterminedavdevice
Keywords: pipe removed
Resolution: worksforme
Status: newclosed

It is difficult to escape the colon (needs four backslashes here) but it's possible.

Note: See TracTickets for help on using tickets.