Транскодирование ввода в вывод H.264 720p с помощью графического процессора: методы и примеры кода

Чтобы перекодировать ввод в вывод с помощью H264 720p с помощью графического процессора, вы можете использовать различные инструменты и языки программирования. Вот несколько методов с примерами кода:

Метод 1: FFmpeg (командная строка)
FFmpeg — популярный инструмент командной строки для обработки видео и аудио. Для перекодирования с использованием FFmpeg с ускорением графического процессора вам понадобится версия, скомпилированная с поддержкой графического процессора NVIDIA.

ffmpeg -i input.mp4 -c:v h264_nvenc -b:v 5M -vf "scale=1280:720" output.mp4

Объяснение:

  • -i input.mp4: указывает входной файл.
  • -c:v h264_nvenc: устанавливает видеокодек H.264 и включает кодирование графического процессора с использованием NVENC (кодировщик NVIDIA).
  • -b:v 5M: устанавливает целевой битрейт видео на 5 Мбит/с. Отрегулируйте по мере необходимости.
  • -vf "scale=1280:720": масштабирует видео до разрешения 720p (1280×720).
  • output.mp4: указывает выходной файл.

Метод 2: Python + FFmpeg (подпроцесс)
Вы можете выполнять команды FFmpeg из сценария Python с помощью модуля subprocess.

import subprocess
input_file = "input.mp4"
output_file = "output.mp4"
command = f'ffmpeg -i {input_file} -c:v h264_nvenc -b:v 5M -vf "scale=1280:720" {output_file}'
subprocess.call(command, shell=True)

Метод 3: Python + FFmpeg (библиотека ffmpeg-python)
Библиотека ffmpeg-pythonпредоставляет Pythonic-интерфейс для FFmpeg.

import ffmpeg
input_file = "input.mp4"
output_file = "output.mp4"
ffmpeg.input(input_file).output(output_file, vcodec="h264_nvenc", b="5M", vf="scale=1280:720").run()

Метод 4: GStreamer (Python)
GStreamer — это мощная мультимедийная платформа, поддерживающая кодирование и декодирование графического процессора. Вот пример использования команды gst-launch-1.0.

import subprocess
input_file = "input.mp4"
output_file = "output.mp4"
command = f'gst-launch-1.0 -v filesrc location={input_file} ! decodebin ! nvvidconv ! video/x-raw,format=NV12,width=1280,height=720 ! omxh264enc ! video/x-h264,stream-format=byte-stream ! h264parse ! filesink location={output_file}'
subprocess.call(command, shell=True)