У меня есть (сломанный) ПК, на котором VLC воспроизводит видео только на левой половине экрана, что, похоже, связано с OpenGL/ драйверами (см. Здесь). С другой стороны, ffplay
не имеет проблемы с половиной окна, но может открывать только те видео, которые я хочу воспроизвести.
Итак, похоже на Как я могу передать вывод ffmpeg в ffplay? Я подумал о том, чтобы передать VLC в ffplay
; и я получил это далеко (я использую это видео):
$ cvlc Rent_an_Ambassador.ogv --sout '#transcode{vcodec=IYUV}:std{access=file,mux=raw,dst=-}' | ffplay -f rawvideo -s 398x224 pipe:-
...
Warning: call to srand(1369860697)
Warning: call to rand()
Blocked: call to unsetenv("DBUS_ACTIVATION_ADDRESS")
Blocked: call to unsetenv("DBUS_ACTIVATION_BUS_TYPE")
[0x98f4b64] dummy interface: using the dummy interface module...
[0x9903254] mux_dummy mux: Open
[rawvideo @ 0x98bf890]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, yuv420p, 398x224, 25 tbr, 25 tbn, 25 tbc
Итак, в основном ffplay
, что IYUV
VLC должен быть yuv420p
, как я читал в Libav: вопросы и обсуждения пользователей. Re: Масштаб изображения от 4: 2: 2 до 4: 2: 0
Обратите внимание, что YUV420P это также I420 и IYUV.
... к сожалению, видео выводится неправильно:
Обратите внимание, что если я не укажу размер для ffplay
, он завершится неудачно с:
picture size invalid (0x0)
Last message repeated 1 times
[rawvideo @ 0x9c6f890]Could not find codec parameters (Video: rawvideo, yuv420p)
[rawvideo @ 0x9c6f890]Estimating duration from bitrate, this may be inaccurate
pipe:-: could not find codec parameters
Итак, мой вопрос:
- Кто-нибудь знает правильную командную строку для передачи из
vlc
вffplay
- используя необработанное видео? - Есть ли способ заставить
vlc
воспроизводить аудио в обычном режиме и передавать его видеосигнал в виде необработанного видео вffplay
(чтобы избежать накладных расходов при мультиплексировании видео и аудио в новый формат, который ffplay должен был бы дополнительно демультиплексировать?)
РЕДАКТИРОВАТЬ: Вот одна командная строка, которая обеспечивает надлежащее видео с тестовым файлом, как указано выше (через Форумы VideoLAN • Отправка данных YUV в канал под окнами):
cvlc Rent_an_Ambassador.ogv --vout=yuv --yuv-yuv4mpeg2 --yuv-file=/dev/stdout | ffplay pipe:-
Тем не мение:
ffplay
segfaults, когда я пытаюсь распаковать другие видео с помощьюvlc
- Для еще третьей категории видео
vlc
не будет экспортировать настройку FPS - поэтомуffplay
запустится, покажет кадр, а затем остановит отображение (и вам придется постоянно прокручивать кнопку мыши, чтобы окно видео обновлялось). Обратите внимание, что вы не можете форсировать частоту кадров ffplay для вечных контейнеров - и при выполнении--yuv-file
(вместо--sout
)--sout-transcode-fps
не будет применяться (со стороныvlc
)