Category: FFmpeg

  • 한 번에 변환

    yt-dlp로 영상을 받는다. H264 혹은 VP9 코덱을 이용된 영상으로 받아진다. H264는 GPU를 이용할 수 있어 빠른 속도로 할 수 있다. VP9는 CPU를 이용하면 빠른 속도로 변환할 수 있다.

    변환의 목적은 이전에도 말했지만 용량 감소. 화질은 중요한게 아니다.

    -fps_mode cfr -r 24 \
    -filter_complex "[0:v]setpts=PTS/1.2,scale=-2:360[v];[0:a]atempo=1.2[a]" -map "[v]" -map "[a]" \
    -c:v hevc_nvenc -cq 35 -b:v 500k \
    -c:a aac -b:a 96k

  • 1.2배속으로 재생하도록 하기

    -filter_complex "[0:v]setpts=PTS/1.2[v];[0:a]atempo=1.2[a]" -map "[v]" -map "[a]"

    원본 1.2배속으로 영상과 음성을 저장하려면 이렇게 해준다.

    이유는 모르겠는데 이 옵션이 용량을 가장 확실히 줄여주었다.

  • 출력 프레임 줄이기

    ffmpeg에서 안정적으로 frame을 줄이려면 다음과 같이 한다. 초당 30으로 지정했다.

    -vsync cfr -r 30

  • ffmpeg 컴파일 설치

    예전에도 언급한 것이지만 ffmpeg를 컨테이너에서 컴파일해서 사용하고 싶었다. CUDA와 관련되어 어려번 삽질한 경험이 있어서 한 번에 할 수 있는 방법을 찾아 보았다. 예전보다 AI가 응답을 잘 해주기 때문에 개발자용 컨테이너가 있는 것을 알게 되었다. 그래서 다음과 같은 방법을 시도했다.

    호스트에 CUDA 최신 버전을 설치한다.

    CUDA Toolkit 과 Driver를 설치한다. 난 proprietary kernel module 를 이용했다.

    CUDA와 관련된 것들이 있는 컨테이너를 이용한다. 하다보니 ubuntu 22.04 를 선택했는데 24.04를 선택했어도 잘 될 것 같다.

    4번째 줄의 옵션을 저렇게 하지 않으면, 인코딩 할 때에 오류가 생긴다.

    docker run --gpus all \
      -it --name ffmpeg \
      --restart always \
      -e NVIDIA_DRIVER_CAPABILITIES=all \
      nvidia/cuda:12.9.1-devel-ubuntu22.04
    echo 'Acquire::http::Proxy "http://rcc01.work:3142";' > /etc/apt/apt.conf
    rm -rf /etc/localtime
    ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime 
    apt-get -y update && apt-get -y upgrade
    apt-get -y install apt-utils	build-essential	git	nasm	pkg-config	libx264-dev	libx265-dev	libnuma-dev	libpostproc-dev	libass-dev	fontconfig	libavcodec-dev	
    libvpx-dev libvorbis-dev libopus-dev libwebp-dev 
    libmp3lame-dev libavformat-dev	software-properties-common

    다음 방법으로 ffmpeg를 설치한다.

    ffnvcodec 설치한다.

    git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
    
    cd nv-codec-headers
    sudo make install
    cd –    

    ffmpeg를 다운 받는다.

    git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/

    ./configure는 다음을 것으로 한다.

    ./configure --enable-nonfree --enable-cuda --enable-cuvid --enable-nvenc --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --disable-static --enable-shared --enable-gpl --enable-libx264 --enable-libx265 --enable-libass --enable-fontconfig  --enable-libvpx --enable-libvorbis --enable-libopus --enable-libwebp --enable-libmp3lame
    echo '/usr/local/lib' >> /etc/ld.so.conf
    echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64' >> ~/.bashrc
    make -j 6
    make install