Updated README.md with working ffmpeg instructions.
Signed-off-by: James P. Ketrenos <james.p.ketrenos@intel.com>
This commit is contained in:
parent
3caec6a48e
commit
6b667a3db0
161
README.md
161
README.md
@ -23,103 +23,120 @@ docker run \
|
|||||||
|
|
||||||
# Usage examples
|
# Usage examples
|
||||||
|
|
||||||
Download stream:
|
## Download test content
|
||||||
|
|
||||||
|
You will need some test content to run the following tests. You can download a
|
||||||
|
test stream here:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdir media
|
[ ! -e media ] && mkdir media
|
||||||
cd media
|
wget -q -O media/AUD_MW_E.264 https://fate-suite.libav.org/h264-conformance/AUD_MW_E.264
|
||||||
wget https://fate-suite.libav.org/h264-conformance/AUD_MW_E.264
|
|
||||||
cd ..
|
|
||||||
```
|
|
||||||
|
|
||||||
**NOTE:** In each of the following, if you have a multi-card host system
|
|
||||||
you may need to change the qsv_device used by changing QSV_DEVICE
|
|
||||||
to whichever node is connected to your hardware.
|
|
||||||
|
|
||||||
You can find out the paths via:
|
|
||||||
```
|
|
||||||
ls -l /dev/dri/by-path/pci-*$(lspci | grep Intel.*Graphics | cut -d " " -f1)*
|
|
||||||
```
|
|
||||||
|
|
||||||
On my system, my Intel graphics adapter is /dev/dri/renderD129, so I use:
|
|
||||||
|
|
||||||
```
|
|
||||||
export QSV_DEVICE=/dev/dri/renderD129
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Decode
|
## Decode
|
||||||
|
|
||||||
H264 video decode and save as raw file:
|
H264 video decode and save as raw file:
|
||||||
|
|
||||||
### Connect to container
|
|
||||||
```bash
|
```bash
|
||||||
QSV_DEVICE=${QSV_DEVICE:-/dev/dri/renderD128}
|
IN_FILE=AUD_WM_E.264
|
||||||
|
OUT_FILE=AUD_MW.yuv
|
||||||
|
HOST_MEDIA=$(pwd)/media
|
||||||
docker run \
|
docker run \
|
||||||
--rm \
|
--rm \
|
||||||
--device=/dev/dri \
|
--device /dev/dri \
|
||||||
--volume $(pwd)/media:/media \
|
--volume ${HOST_MEDIA}:/media \
|
||||||
-it \
|
-it \
|
||||||
intel-media-ffmpeg \
|
intel-media-ffmpeg \
|
||||||
ffmpeg -hwaccel qsv -qsv_device ${QSV_DEVICE} \
|
ffmpeg \
|
||||||
-c:v h264_qsv -i /media/AUD_MW_E.264 \
|
-hwaccel qsv \
|
||||||
|
-qsv_device ${QSV_DEVICE:-/dev/dri/renderD128} \
|
||||||
|
-c:v h264_qsv \
|
||||||
|
-i /media/${IN_FILE} \
|
||||||
-vf hwdownload,format=nv12 -pix_fmt yuv420p \
|
-vf hwdownload,format=nv12 -pix_fmt yuv420p \
|
||||||
/media/AUD_MW.yuv
|
-y \
|
||||||
|
/media/${OUT_FILE}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Encode
|
## Encode
|
||||||
|
|
||||||
Encode a 10 frames of 720p raw input as H264 with 5Mbps using VBR mode:
|
Encode a 10 frames of 720p raw input as H264 with 5Mbps using VBR mode:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
QSV_DEVICE=${QSV_DEVICE:-/dev/dri/renderD128}
|
IN_FILE=AUD_MW.yuv
|
||||||
|
OUT_FILE=AUD_MW_E.h264
|
||||||
|
HOST_MEDIA=$(pwd)/media
|
||||||
|
docker run \
|
||||||
|
--rm \
|
||||||
|
--device /dev/dri \
|
||||||
|
--volume ${HOST_MEDIA}:/media \
|
||||||
|
-it \
|
||||||
|
intel-media-ffmpeg \
|
||||||
|
ffmpeg \
|
||||||
|
-loglevel debug \
|
||||||
|
-init_hw_device vaapi=va:${QSV_DEVICE:-/dev/dri/renderD128} \
|
||||||
|
-init_hw_device qsv=hw@va \
|
||||||
|
-filter_hw_device hw \
|
||||||
|
-f rawvideo \
|
||||||
|
-pix_fmt yuv420p \
|
||||||
|
-s:v 176x144 \
|
||||||
|
-i /media/${IN_FILE} \
|
||||||
|
-vf hwupload=extra_hw_frames=64,format=qsv \
|
||||||
|
-c:v h264_qsv \
|
||||||
|
-b:v 5M \
|
||||||
|
-frames:v 10 \
|
||||||
|
-y \
|
||||||
|
/media/${OUT_FILE}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Transcode
|
||||||
|
|
||||||
|
### AVC (H.264) => HEVC (H.265) with 5Mbps using VBR
|
||||||
|
|
||||||
|
```bash
|
||||||
|
IN_FILE=AUD_MW_E.264
|
||||||
|
OUT_FILE=AUD_MW_E.hevc
|
||||||
|
HOST_MEDIA=$(pwd)/media
|
||||||
docker run \
|
docker run \
|
||||||
--rm \
|
--rm \
|
||||||
--device=/dev/dri \
|
--device=/dev/dri \
|
||||||
--volume $(pwd)/media:/media \
|
--volume ${HOST_MEDIA}:/media \
|
||||||
-it \
|
-it \
|
||||||
intel-media-ffmpeg \
|
intel-media-ffmpeg \
|
||||||
ffmpeg -loglevel debug -init_hw_device qsv=hw \
|
ffmpeg \
|
||||||
-filter_hw_device hw -f rawvideo -pix_fmt \
|
-loglevel debug \
|
||||||
yuv420p -s:v 176x144 -i /media/AUD_MW.yuv -vf \
|
-hwaccel qsv \
|
||||||
hwupload=extra_hw_frames=64,format=qsv \
|
-qsv_device ${QSV_DEVICE:-/dev/dri/renderD128} \
|
||||||
-c:v h264_qsv -b:v 5M -frames:v 10 \
|
-c:v h264_qsv \
|
||||||
-y /media/AUD_MW_E.h264
|
-i /media/"${IN_FILE}" \
|
||||||
|
-c:v hevc_qsv \
|
||||||
|
-b:v 5M \
|
||||||
|
-y \
|
||||||
|
/media/${OUT_FILE}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Transcode
|
### 1:N transcoding
|
||||||
|
|
||||||
H264 decode && H265 encode with 5Mbps using VBR
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
QSV_DEVICE=${QSV_DEVICE:-/dev/dri/renderD128}
|
QSV_DEVICE=${QSV_DEVICE:-/dev/dri/renderD128}
|
||||||
|
IN_FILE=AUD_MW_E.264
|
||||||
|
OUT_FILE_BASE=AUD_1N_
|
||||||
|
HOST_MEDIA=$(pwd)/media
|
||||||
docker run \
|
docker run \
|
||||||
--rm \
|
--rm \
|
||||||
--device=/dev/dri \
|
--device=/dev/dri \
|
||||||
--volume $(pwd)/media:/media \
|
--volume ${HOST_MEDIA}:/media \
|
||||||
-it \
|
-it \
|
||||||
intel-media-ffmpeg \
|
intel-media-ffmpeg \
|
||||||
ffmpeg -hwaccel qsv -qsv_device ${QSV_DEVICE} \
|
ffmpeg \
|
||||||
-c:v h264_qsv -i /media/AUD_MW_E.264 \
|
-hwaccel qsv \
|
||||||
-c:v hevc_qsv -b:v 5M AUD_MW_E.hevc
|
-qsv_device ${QSV_DEVICE} \
|
||||||
```
|
-c:v h264_qsv \
|
||||||
|
-i /media/${IN_FILE} \
|
||||||
1:N transcoding
|
|
||||||
|
|
||||||
```bash
|
|
||||||
QSV_DEVICE=${QSV_DEVICE:-/dev/dri/renderD128}
|
|
||||||
docker run \
|
|
||||||
--rm \
|
|
||||||
--device=/dev/dri \
|
|
||||||
--volume $(pwd)/media:/media \
|
|
||||||
-it \
|
|
||||||
intel-media-ffmpeg \
|
|
||||||
ffmpeg -hwaccel qsv -qsv_device ${QSV_DEVICE} \
|
|
||||||
-c:v h264_qsv -i /media/AUD_MW_E.264 \
|
|
||||||
-filter_complex "split=2[s1][s2]; \
|
-filter_complex "split=2[s1][s2]; \
|
||||||
[s1]scale_qsv=1280:720[o1]; \
|
[s1]scale_qsv=1280:720[o1]; \
|
||||||
[s2]vpp_qsv=framerate=60[o2]" \
|
[s2]vpp_qsv=framerate=60[o2]" \
|
||||||
-map [o1] -c:v h264_qsv -b:v 5M /media/5M.mp4 \
|
-map [o1] -c:v h264_qsv -b:v 5M /media/"${OUT_FILE_BASE}5M.mp4" \
|
||||||
-map [o2] -c:v h264_qsv -b:v 4M /media/4M60FPS.h264
|
-map [o2] -c:v h264_qsv -b:v 4M /media/"${OUT_FILE_BASE}4M60FPS.h264"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Developing
|
## Developing
|
||||||
@ -201,3 +218,29 @@ tag:
|
|||||||
```bash
|
```bash
|
||||||
. MANIFEST ; git tag -f agama-${AGAMA_VERSION}
|
. MANIFEST ; git tag -f agama-${AGAMA_VERSION}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
# Appendix A: Multicard
|
||||||
|
|
||||||
|
Most of the filters and drivers for ffmpeg will default to connecting to
|
||||||
|
/dev/dri/renderD128.
|
||||||
|
|
||||||
|
If you have multiple cards, the card you want to connect to might be exposed
|
||||||
|
on a different render interface.
|
||||||
|
|
||||||
|
You can configure which interface is used by setting the QSV_DEVICE environment
|
||||||
|
variable prior to running intel-docker (or by passing -e QSV_DEVICE to docker
|
||||||
|
if you run it manually.)
|
||||||
|
|
||||||
|
You can find out the correct path for your Intel Graphics card by running:
|
||||||
|
|
||||||
|
```
|
||||||
|
ls -l /dev/dri/by-path/pci-*$(lspci | grep Intel.*Graphics | cut -d " " -f1)*
|
||||||
|
```
|
||||||
|
|
||||||
|
If the interface is on /dev/dri/renderD129, set QSV_DEVICE as follows:
|
||||||
|
|
||||||
|
```
|
||||||
|
export QSV_DEVICE=/dev/dri/renderD129
|
||||||
|
```
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user