На Ubuntu 14.04, существует avconv
/avplay
вместо ffmpeg
/ffplay
; версия:
$ avconv -version
avconv version 11.3-6:11.3-1~trusty, Copyright (c) 2000-2014 the Libav developers
built on Apr 13 2015 22:25:59 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
avconv 11.3-6:11.3-1~trusty
libavutil 54. 3. 0 / 54. 3. 0
libavcodec 56. 1. 0 / 56. 1. 0
libavformat 56. 1. 0 / 56. 1. 0
libavdevice 55. 0. 0 / 55. 0. 0
libavfilter 5. 0. 0 / 5. 0. 0
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 0. 0 / 3. 0. 0
Я хотел бы настроить канал, где я передаю вывод по каналу avconv
играться avplay
, таким образом, я могу проверить если мой avconv
настройки корректны; к сожалению, я не могу заставить канал этого вида вообще работать.
Я работаю с маленьким mp4 Демонстрационным Видеофайлом MP4 от Образца WebM, Ogg и Видеофайлы MP4 для HTML5 | TechSlides; я также видел удар - Как я могу передать вывод по каналу ffmpeg к ffplay? - Суперпользователь.
Вот мои попытки:
$ avconv -i small.mp4 - | avplay -
avconv version 11.3-6:11.3-1~trusty, Copyright (c) 2000-2014 the Libav developers
built on Apr 13 2015 22:25:59 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
avplay version 11.3-6:11.3-1~trusty, Copyright (c) 2003-2014 the Libav developers
built on Apr 13 2015 22:25:59 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'small.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2010-03-20 21:29:11
encoder : HandBrake 0.9.4 2009112300
Duration: 00:00:05.56, start: 0.000000, bitrate: 551 kb/s
Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 560x320, 465 kb/s, 30 fps, 90k tbn, 60 tbc (default)
Metadata:
creation_time : 2010-03-20 21:29:11
encoder : JVT/AVC Coding
Stream #0.1(eng): Audio: aac, 48000 Hz, mono, fltp, 83 kb/s (default)
Metadata:
creation_time : 2010-03-20 21:29:11
Unable to find a suitable output format for 'pipe:'
pipe:: Invalid data found when processing input
Так, я должен указать выходной формат для avconv
, мы видим способных и к кодированию и к декодированию как это:
$ avplay -formats | grep ' DE'
avplay version 11.3-6:11.3-1~trusty, Copyright (c) 2003-2014 the Libav developers
built on Apr 13 2015 22:25:59 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
DE ac3 raw AC-3
DE adx CRI ADX
DE aiff Audio IFF
DE alaw PCM A-law
DE alsa ALSA audio output
DE amr 3GPP AMR
DE asf ASF (Advanced / Active Streaming Format)
DE ass SSA (SubStation Alpha) subtitle
DE au Sun AU
DE avi AVI (Audio Video Interleaved)
DE cavsvideo raw Chinese AVS (Audio Video Standard) video
DE daud D-Cinema audio
DE dirac raw Dirac
DE dnxhd raw DNxHD (SMPTE VC-3)
DE dts raw DTS
DE dv DV (Digital Video)
DE eac3 raw E-AC-3
DE f32be PCM 32-bit floating-point big-endian
DE f32le PCM 32-bit floating-point little-endian
DE f64be PCM 64-bit floating-point big-endian
DE f64le PCM 64-bit floating-point little-endian
DE ffmetadata FFmpeg metadata in text
DE filmstrip Adobe Filmstrip
DE flac raw FLAC
DE flv FLV (Flash Video)
DE g722 raw G.722
DE gxf GXF (General eXchange Format)
DE h261 raw H.261
DE h263 raw H.263
DE h264 raw H.264 video
DE hevc raw HEVC video
DE ilbc iLBC storage
DE image2 image2 sequence
DE image2pipe piped image2 sequence
DE ivf On2 IVF
DE latm LOAS/LATM
DE m4v raw MPEG-4 video
DE mjpeg raw MJPEG video
DE mlp raw MLP
DE mmf Yamaha SMAF
DE mp3 MP3 (MPEG audio layer 3)
DE mpeg MPEG-1 Systems / MPEG program stream
DE mpegts MPEG-TS (MPEG-2 Transport Stream)
DE mulaw PCM mu-law
DE mxf MXF (Material eXchange Format)
DE nut NUT
DE ogg Ogg
DE oma Sony OpenMG audio
DE oss OSS (Open Sound System) playback
DE rawvideo raw video
DE rm RealMedia
DE roq raw id RoQ
DE rso Lego Mindstorms RSO
DE rtp RTP output
DE rtsp RTSP output
DE s16be PCM signed 16-bit big-endian
DE s16le PCM signed 16-bit little-endian
DE s24be PCM signed 24-bit big-endian
DE s24le PCM signed 24-bit little-endian
DE s32be PCM signed 32-bit big-endian
DE s32le PCM signed 32-bit little-endian
DE s8 PCM signed 8-bit
DE sap SAP output
DE smjpeg Loki SDL MJPEG
DE sox SoX native
DE spdif IEC 61937 (used on S/PDIF - IEC958)
DE srt SubRip subtitle
DE swf SWF (ShockWave Flash)
DE truehd raw TrueHD
DE u16be PCM unsigned 16-bit big-endian
DE u16le PCM unsigned 16-bit little-endian
DE u24be PCM unsigned 24-bit big-endian
DE u24le PCM unsigned 24-bit little-endian
DE u32be PCM unsigned 32-bit big-endian
DE u32le PCM unsigned 32-bit little-endian
DE u8 PCM unsigned 8-bit
DE voc Creative Voice
DE wav WAV / WAVE (Waveform Audio)
DE wv raw WavPack
DE yuv4mpegpipe YUV4MPEG pipe
Давайте попробуем flv формат - если я добавляю просто -f flv
, затем я добираюсь "flv, не поддерживает ту частоту дискретизации, выбирает из (44100, 22050, 11025)".; таким образом, я также добавляю -ar 44100
:
$ avconv -i small.mp4 -f flv -ar 44100 - | avplay -
avconv version 11.3-6:11.3-1~trusty, Copyright (c) 2000-2014 the Libav developers
built on Apr 13 2015 22:25:59 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
avplay version 11.3-6:11.3-1~trusty, Copyright (c) 2003-2014 the Libav developers
built on Apr 13 2015 22:25:59 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'small.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2010-03-20 21:29:11
encoder : HandBrake 0.9.4 2009112300
Duration: 00:00:05.56, start: 0.000000, bitrate: 551 kb/s
Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 560x320, 465 kb/s, 30 fps, 90k tbn, 60 tbc (default)
Metadata:
creation_time : 2010-03-20 21:29:11
encoder : JVT/AVC Coding
Stream #0.1(eng): Audio: aac, 48000 Hz, mono, fltp, 83 kb/s (default)
Metadata:
creation_time : 2010-03-20 21:29:11
Output #0, flv, to 'pipe:':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2010-03-20 21:29:11
encoder : Lavf56.1.0
Stream #0.0(und): Video: flv, yuv420p, 560x320, q=2-31, 200 kb/s, 1k tbn, 90k tbc (default)
Metadata:
creation_time : 2010-03-20 21:29:11
encoder : JVT/AVC Coding
Stream #0.1(eng): Audio: libmp3lame, 44100 Hz, mono, fltp (default)
Metadata:
creation_time : 2010-03-20 21:29:11
encoder : Lavc56.1.0 libmp3lame
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> flv1 (flv))
Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
Press ctrl-c to stop encoding
[flv @ 0xaed026a0] max_analyze_duration 5000000 reached
Input #0, flv, from 'pipe:':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2010-03-20 21:29:11
encoder : Lavf56.1.0
Duration: 00:00:00.00, start: 0.000000, bitrate: N/A
Stream #0.0: Video: flv, yuv420p, 560x320, 200 kb/s, 30 fps, 1k tbn
Stream #0.1: Audio: mp3, 44100 Hz, mono, s16p, 64 kb/s
[flv @ 0x80c7d80] Failed to update header with correct duration.B f=0/0
[flv @ 0x80c7d80] Failed to update header with correct filesize.
frame= 166 fps= 0 q=31.0 Lsize= 192kB time=5.50 bitrate= 285.5kbits/s
video:141kB audio:44kB other streams:0kB global headers:0kB muxing overhead: 3.426657%
Segmentation fault (core dumped)
Так, катастрофический отказ segfault - даже если avplay
предположительно, правильно считайте свойства входного потока...
Тот же segfault происходит для avi
формат (и также если я указываю формат для avplay -f avi -
):
$ avconv -i small.mp4 -f avi - | avplay -
avconv version 11.3-6:11.3-1~trusty, Copyright (c) 2000-2014 the Libav developers
built on Apr 13 2015 22:25:59 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
avplay version 11.3-6:11.3-1~trusty, Copyright (c) 2003-2014 the Libav developers
built on Apr 13 2015 22:25:59 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'small.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2010-03-20 21:29:11
encoder : HandBrake 0.9.4 2009112300
Duration: 00:00:05.56, start: 0.000000, bitrate: 551 kb/s
Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 560x320, 465 kb/s, 30 fps, 90k tbn, 60 tbc (default)
Metadata:
creation_time : 2010-03-20 21:29:11
encoder : JVT/AVC Coding
Stream #0.1(eng): Audio: aac, 48000 Hz, mono, fltp, 83 kb/s (default)
Metadata:
creation_time : 2010-03-20 21:29:11
Output #0, avi, to 'pipe:':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2010-03-20 21:29:11
ISFT : Lavf56.1.0
Stream #0.0(und): Video: mpeg4, yuv420p, 560x320, q=2-31, 200 kb/s, 30 fps, 30 tbn, 30 tbc (default)
Metadata:
creation_time : 2010-03-20 21:29:11
encoder : JVT/AVC Coding
Stream #0.1(eng): Audio: libmp3lame, 48000 Hz, mono, fltp (default)
Metadata:
creation_time : 2010-03-20 21:29:11
encoder : Lavc56.1.0 libmp3lame
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> mpeg4 (native))
Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
Press ctrl-c to stop encoding
Input #0, avi, from 'pipe:':
Metadata:
encoder : Lavf56.1.0
Duration: 9942:03:14.13, start: 0.000000, bitrate: N/A
Stream #0.0: Video: mpeg4 (Simple Profile), yuv420p, 560x320 [PAR 1:1 DAR 7:4], 30 fps, 30 tbn, 30 tbc
Stream #0.1: Audio: mp3, 48000 Hz, 1 channels, s16p, 64 kb/s
Segmentation fault (core dumped)0 aq= 17KB vq= 142KB sq= 0B f=0/0
То же для формата mpegts
...
Самый близкий я добрался до передачи по каналу, была эта команда от [FFmpeg-пользователя] Канал к ffplay при записи: синтаксис:
ffmpeg -f x11grab -r 10 -s 128x128 -i :0.0 -f rawvideo - | ffplay -f rawvideo -s 128x128 -pix_fmt bgr0 -
... который однако, не может быть действительно "просто преобразован" в av* команды, потому что в этой версии, в частности, потому что:
Option 'pix_fmt' has been removed, use private format options instead
[rawvideo @ 0xaed026a0] No such pixel format: bgr0.
Option 's' has been removed, use private format options instead
... таким образом, команда в этой версии Ubuntu была бы:
$ avconv -f x11grab -r 10 -s 128x128 -i :0.0 -f rawvideo - | avplay -f rawvideo -pixel_format bgra -video_size 128x128 -
avconv version 11.3-6:11.3-1~trusty, Copyright (c) 2000-2014 the Libav developers
built on Apr 13 2015 22:25:59 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
[x11grab @ 0x8270b80] device: :0.0 -> display: :0.0 x: 0 y: 0 width: 128 height: 128
[x11grab @ 0x8270b80] shared memory extension found
avplay version 11.3-6:11.3-1~trusty, Copyright (c) 2003-2014 the Libav developers
built on Apr 13 2015 22:25:59 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
[x11grab @ 0x8270b80] Estimating duration from bitrate, this may be inaccurate
Input #0, x11grab, from ':0.0':
Duration: N/A, start: 1516909239.674510, bitrate: 5242 kb/s
Stream #0.0: Video: rawvideo, bgra, 128x128, 5242 kb/s, 10 fps, 1000k tbn, 10 tbc
Output #0, rawvideo, to 'pipe:':
Metadata:
encoder : Lavf56.1.0
Stream #0.0: Video: rawvideo, bgra, 128x128, q=2-31, 200 kb/s, 10 tbn, 10 tbc
Metadata:
encoder : Lavc56.1.0 rawvideo
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> rawvideo (native))
Press ctrl-c to stop encoding
[rawvideo @ 0xaed026a0] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from 'pipe:':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0.0: Video: rawvideo, bgra, 128x128, 25 fps, 25 tbn
^Cframe= 119 fps= 11 q=0.0 Lsize= 7616kB time=11.80 bitrate=5287.3kbits/s
... и это - единственное, которое я нашел до сих пор, что это не делает segfault и на самом деле показывает окно видео - но видео экран похож на это:
... то есть, все окно видео / экран является черным - кроме некоторых зеленых пикселей, которые дрожат в левом верхнем углу...
Также отметьте в этой версии, иногда я добираюсь"pipe:1: Not yet implemented in Libav, patches welcome
", если я пытаюсь использовать pipe:1
вместо просто подчеркивают штриховой линией -
представить stdout/stdin...
Так, это возможный настроить канал от avconv
кому: avplay
, так avplay
игры, по крайней мере, видео (или лучше всего, игры и аудио и видео) отправленный avconv
, в этой версии Ubuntu - и если так, как?
Хорошо, полученный где-нибудь с этим - не со встроенным avconv
/avplay
, хотя:
Я нашел ffmpeg устройство вывода xv полным экраном?: ffmpeg, с этой командой:
ffmpeg -re -i "${infile}" -filter_complex "[0:v] scale=w=480:h=-1 [out0]" -map [out0] -f xv mywindowname
Так, существует некоторое устройство вывода xv
это может подыграть окну; avconv -devices
говорит"Unrecognized option 'devices'
" (man
говорит: "Опция "-форматы" av* инструменты отобразит список включенных устройств вывода (среди muxers)".). Примечание там является Статическими Сборками FFmpeg, но они по-видимому не включают xv
устройство.
Так, я закончил тем, что использовал его от PPA - это - то, как сделать это так, это работает от местоположения экстерна:
sudo apt-get install ppa-purge
sudo add-apt-repository ppa:mc3man/trusty-media
sudo apt-get update
apt-get install --simulate ffmpeg
apt-get download ffmpeg libass5 libfdk-aac1 libsdl2-2.0-0 libsoxr0 libva-drm1 libvidstab1.0 libx264-148 libx265-130 libzimg2
# libsoxr0 and libsdl2-2.0-0 are from trusty/universe; so:
rm libsoxr0_0.1.1-1_i386.deb libsdl2-2.0-0_2.0.2+dfsg1-3ubuntu1.2_i386.deb
sudo apt-get install libsoxr0 libsdl2-2.0-0
# unpack debs:
for ix in *.deb; do echo $ix; dpkg -x $ix .; done
sudo ppa-purge ppa:mc3man/trusty-media
sudo apt-get update
Затем у Вас может быть сценарий как это, run-ffmpeg.sh
(и сделайте то же один для ffplat
-> run-ffplay.sh
; не забудьте chmod +x *.sh
их обоих):
#!/usr/bin/env bash
export LD_LIBRARY_PATH=$PWD/usr/lib/i386-linux-gnu
export PATH="$PATH":$PWD/opt/ffmpeg/bin
ffmpeg "$@"
#reset # deletes all output
stty echo # resets echo, OK
(Обратите внимание, что использование этого сценария так или иначе завинчивает терминальное эхо, которое является причиной последнего stty echo
)
Затем наконец, трубопроводы X11:
./run_ffmpeg.sh -f x11grab -r 10 -s 128x128 -i :0.0 -f rawvideo - | ./run_ffplay.sh -f rawvideo -s 128x128 -pix_fmt bgr0 -
# Option -s is deprecated, use -video_size.
# Option -pix_fmt is deprecated, use -pixel_format.
./run_ffmpeg.sh -f x11grab -r 10 -s 128x128 -i :0.0 -f rawvideo - | ./run_ffplay.sh -f rawvideo -video_size 128x128 -pixel_format bgr0 -
... и также может играть видео с фильтрами непосредственно в окне от ffmpeg:
$ ./run_ffmpeg.sh -re -i small.mp4 -filter_complex "[0:v] scale=w=640:h=-1 [out0]" -map [out0] -pix_fmt yuyv422 -f xv "ffmpeg xv Window"
ffmpeg version 3.3.3 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --mandir=/usr/share/man --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libfreetype --enable-gnutls --disable-ffserver --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libtheora --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvidstab --enable-libwavpack --enable-nvenc --enable-libzimg
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'small.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2010-03-20T21:29:11.000000Z
encoder : HandBrake 0.9.4 2009112300
Duration: 00:00:05.57, start: 0.000000, bitrate: 551 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709), 560x320, 465 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc (default)
Metadata:
creation_time : 2010-03-20T21:29:11.000000Z
encoder : JVT/AVC Coding
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 83 kb/s (default)
Metadata:
creation_time : 2010-03-20T21:29:11.000000Z
Stream mapping:
Stream #0:0 (h264) -> scale
scale -> Stream #0:0 (rawvideo)
Press [q] to stop, [?] for help
Output #0, xv, to 'ffmpeg xv Window':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
encoder : Lavf57.71.100
Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 640x366, q=2-31, 112435 kb/s, 30 fps, 30 tbn, 30 tbc (default)
Metadata:
encoder : Lavc57.89.100 rawvideo
Я отправил бы снимок экрана, но по-видимому при наличии xv
видео окна, его содержание не становится полученным с gnome-screenshot
. Однако может также использовать sdl
:
./run_ffmpeg.sh -re -i small.mp4 -filter_complex "[0:v] scale=w=640:h=-1 [out0]" -map [out0] -f sdl "ffmpeg SDL Window"
... и это, кажется, получено с gnome-screenshot
: