Imported Upstream version 0.14.2+dfsg1
This commit is contained in:
parent
fb3990e9e5
commit
41a01dbf05
529 changed files with 25112 additions and 2336 deletions
|
|
@ -16,6 +16,7 @@ set(obs-ffmpeg_HEADERS
|
|||
set(obs-ffmpeg_SOURCES
|
||||
obs-ffmpeg.c
|
||||
obs-ffmpeg-aac.c
|
||||
obs-ffmpeg-nvenc.c
|
||||
obs-ffmpeg-output.c
|
||||
obs-ffmpeg-mux.c
|
||||
obs-ffmpeg-source.c)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,27 @@
|
|||
FFmpegOutput="مخرج FFmpeg"
|
||||
FFmpegAAC="ترميز AAC الافتراضي لـFFmpeg"
|
||||
Bitrate="معدل النقل"
|
||||
Preset="الإعداد المسبق"
|
||||
|
||||
NVENC.Preset.default="الإفتراضي"
|
||||
NVENC.Preset.hq="جودة عالية"
|
||||
NVENC.Preset.hp="أداء عالي"
|
||||
NVENC.Preset.bd="بلوراي Bluray"
|
||||
NVENC.Level="المستوى"
|
||||
|
||||
FFmpegSource="مصدر وسائط"
|
||||
LocalFile="ملف محلي"
|
||||
Looping="تكرار حلقي"
|
||||
Advanced="متقدم"
|
||||
DiscardNone="لا شيء"
|
||||
ColorRange="نطاق ألوان YUV"
|
||||
ColorRange.Auto="تلقائي"
|
||||
ColorRange.Partial="جزئي"
|
||||
ColorRange.Full="كامل"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="كافة ملفات الوسائط"
|
||||
MediaFileFilter.VideoFiles="ملفات الفيديو"
|
||||
MediaFileFilter.AudioFiles="ملفات الصوت"
|
||||
MediaFileFilter.AllFiles="كل الملفات"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,3 +3,5 @@ Bitrate="Битрейт"
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,20 @@
|
|||
FFmpegOutput="Sortida FFmpeg"
|
||||
FFmpegAAC="Codificador FFmpeg AAC predeterminat"
|
||||
Bitrate="Taxa de bits"
|
||||
Preset="Valors predefinits"
|
||||
RateControl="Control de freqüència"
|
||||
KeyframeIntervalSec="Interval de fotograma clau (en segons, 0 = automàtic)"
|
||||
Lossless="Sense pèrdues"
|
||||
|
||||
NVENC.Use2Pass="Utilitza codificació en dues passades"
|
||||
NVENC.Preset.default="Per defecte"
|
||||
NVENC.Preset.hq="Alta Qualitat"
|
||||
NVENC.Preset.hp="Alt rendiment"
|
||||
NVENC.Preset.bd="BluRay"
|
||||
NVENC.Preset.ll="Latencia baixa"
|
||||
NVENC.Preset.llhq="Latència baixa Alta Qualitat"
|
||||
NVENC.Preset.llhp="Latència baixa alt rendiment"
|
||||
NVENC.Level="Nivell"
|
||||
|
||||
FFmpegSource="Font multimèdia"
|
||||
LocalFile="Fitxer local"
|
||||
|
|
@ -21,5 +35,15 @@ DiscardBiDir="Quadres bidireccionals"
|
|||
DiscardNonIntra="Quadres no-interiors"
|
||||
DiscardNonKey="Quadres no-clau"
|
||||
DiscardAll="Tots els marcs (aneu amb compte!)"
|
||||
RestartWhenActivated="Reinicia la reproducció quan la font estigui activa"
|
||||
ColorRange="Gamma de color YUV"
|
||||
ColorRange.Auto="Automàtic"
|
||||
ColorRange.Partial="Parcial"
|
||||
ColorRange.Full="Màxim"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Tots els arxius multimèdia"
|
||||
MediaFileFilter.VideoFiles="Arxius de vídeo"
|
||||
MediaFileFilter.AudioFiles="Arxius d'àudio"
|
||||
MediaFileFilter.AllFiles="Tots els fitxers"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,20 @@
|
|||
FFmpegOutput="Výstup FFmpegu"
|
||||
FFmpegAAC="Výchozí FFmpeg AAC enkodér"
|
||||
Bitrate="Bitrate"
|
||||
Preset="Předvolba"
|
||||
RateControl="Řízení toku"
|
||||
KeyframeIntervalSec="Interval klíč. snímků (vteřiny, 0=auto)"
|
||||
Lossless="Lossless"
|
||||
|
||||
NVENC.Use2Pass="Použít dvoustupňové enkódování"
|
||||
NVENC.Preset.default="Výchozí"
|
||||
NVENC.Preset.hq="Vysoká kvalita"
|
||||
NVENC.Preset.hp="Vysoký výkon"
|
||||
NVENC.Preset.bd="Bluray"
|
||||
NVENC.Preset.ll="Nízká odezva"
|
||||
NVENC.Preset.llhq="Nízká odezva, vysoká kvalita"
|
||||
NVENC.Preset.llhp="Nízká odezva, vysoký výkon"
|
||||
NVENC.Level="Úrověň"
|
||||
|
||||
FFmpegSource="Médium"
|
||||
LocalFile="Místní soubor"
|
||||
|
|
@ -22,6 +36,11 @@ DiscardNonIntra="Snímky mimo rámec"
|
|||
DiscardNonKey="Ne-klíčové snímky"
|
||||
DiscardAll="Všechny snímky (Pozor!)"
|
||||
RestartWhenActivated="Restartovat přehrávání poté, co je zdroj aktivován"
|
||||
ColorRange="Rozsah barev YUV"
|
||||
ColorRange.Auto="Automatický"
|
||||
ColorRange.Partial="Částečný"
|
||||
ColorRange.Full="Celkový"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Všechny mediální soubory"
|
||||
MediaFileFilter.VideoFiles="Video soubory"
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ FFmpegOutput="FFmpeg Output"
|
|||
FFmpegAAC="FFmpeg Standard AAC Encoder"
|
||||
Bitrate="Bitrate"
|
||||
|
||||
|
||||
FFmpegSource="Mediekilde"
|
||||
LocalFile="Lokal fil"
|
||||
Looping="Gentagelse"
|
||||
|
|
@ -19,3 +20,4 @@ DiscardNonKey="Non-Key Frames"
|
|||
DiscardAll="Alle frames (pas på!)"
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,20 @@
|
|||
FFmpegOutput="FFmpeg Ausgabe"
|
||||
FFmpegAAC="FFmpeg Standard AAC Encoder"
|
||||
Bitrate="Bitrate"
|
||||
Preset="Voreinstellung"
|
||||
RateControl="Qualitäts Regulierungsmethode"
|
||||
KeyframeIntervalSec="Keyframeintervall (Sekunden, 0=auto)"
|
||||
Lossless="Verlustfrei"
|
||||
|
||||
NVENC.Use2Pass="Benutze Two-Pass Encoding"
|
||||
NVENC.Preset.default="Standard"
|
||||
NVENC.Preset.hq="Hohe Qualität"
|
||||
NVENC.Preset.hp="Hohe Leistung"
|
||||
NVENC.Preset.bd="Bluray"
|
||||
NVENC.Preset.ll="Niedrige Latenz"
|
||||
NVENC.Preset.llhq="Niedrige Latenz, Hohe Qualität"
|
||||
NVENC.Preset.llhp="Niedrige Latenz, Hohe Leistung"
|
||||
NVENC.Level="Level"
|
||||
|
||||
FFmpegSource="Medienquelle"
|
||||
LocalFile="Lokale Datei"
|
||||
|
|
@ -22,6 +36,11 @@ DiscardNonIntra="Non-Intra Frames"
|
|||
DiscardNonKey="Non-Key Frames"
|
||||
DiscardAll="Alle Frames (Vorsicht!)"
|
||||
RestartWhenActivated="Wiedergabe erneut starten, wenn Quelle aktiviert wird"
|
||||
ColorRange="YUV-Farbmatrix"
|
||||
ColorRange.Auto="Automatisch"
|
||||
ColorRange.Partial="Teilweise"
|
||||
ColorRange.Full="Voll"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Alle Mediendateien"
|
||||
MediaFileFilter.VideoFiles="Video-Dateien"
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ FFmpegOutput="Έξοδος FFmpeg"
|
|||
FFmpegAAC="FFmpeg προεπιλεγμένος κωδικοποιητής AAC"
|
||||
Bitrate="Ρυθμός μετάδοσης bit"
|
||||
|
||||
|
||||
LocalFile="Τοπικό αρχείο"
|
||||
Looping="Επανάληψη"
|
||||
Input="Είσοδος"
|
||||
|
|
@ -16,3 +17,4 @@ DiscardDefault="Προεπιλογή (άκυρα πακέτα)"
|
|||
DiscardAll="Όλα τα καρέ (Προσοχή!)"
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,20 @@
|
|||
FFmpegOutput="FFmpeg Output"
|
||||
FFmpegAAC="FFmpeg Default AAC Encoder"
|
||||
Bitrate="Bitrate"
|
||||
Preset="Preset"
|
||||
RateControl="Rate Control"
|
||||
KeyframeIntervalSec="Keyframe Interval (seconds, 0=auto)"
|
||||
Lossless="Lossless"
|
||||
|
||||
NVENC.Use2Pass="Use Two-Pass Encoding"
|
||||
NVENC.Preset.default="Default"
|
||||
NVENC.Preset.hq="High Quality"
|
||||
NVENC.Preset.hp="High Performance"
|
||||
NVENC.Preset.bd="Bluray"
|
||||
NVENC.Preset.ll="Low-Latency"
|
||||
NVENC.Preset.llhq="Low-Latency High Quality"
|
||||
NVENC.Preset.llhp="Low-Latency High Performance"
|
||||
NVENC.Level="Level"
|
||||
|
||||
FFmpegSource="Media Source"
|
||||
LocalFile="Local File"
|
||||
|
|
@ -22,6 +36,11 @@ DiscardNonIntra="Non-Intra Frames"
|
|||
DiscardNonKey="Non-Key Frames"
|
||||
DiscardAll="All Frames (Careful!)"
|
||||
RestartWhenActivated="Restart playback when source becomes active"
|
||||
ColorRange="YUV Color Range"
|
||||
ColorRange.Auto="Auto"
|
||||
ColorRange.Partial="Partial"
|
||||
ColorRange.Full="Full"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="All Media Files"
|
||||
MediaFileFilter.VideoFiles="Video Files"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,20 @@
|
|||
FFmpegOutput="Salida de FFmpeg"
|
||||
FFmpegAAC="Codificador AAC FFmpeg predeterminado"
|
||||
Bitrate="Tasa de bits"
|
||||
Preset="Preajuste"
|
||||
RateControl="Control de la frecuencia"
|
||||
KeyframeIntervalSec="Intervalo de keyframes (segundos, 0=auto)"
|
||||
Lossless="Sin pérdidas"
|
||||
|
||||
NVENC.Use2Pass="Usar codificación en dos pasadas"
|
||||
NVENC.Preset.default="Por defecto"
|
||||
NVENC.Preset.hq="Alta Calidad"
|
||||
NVENC.Preset.hp="Alto rendimiento"
|
||||
NVENC.Preset.bd="BluRay"
|
||||
NVENC.Preset.ll="Baja latencia"
|
||||
NVENC.Preset.llhq="Baja latencia alta calidad"
|
||||
NVENC.Preset.llhp="Baja latencia alto rendimiento"
|
||||
NVENC.Level="Nivel"
|
||||
|
||||
FFmpegSource="Fuente multimedia"
|
||||
LocalFile="Archivo local"
|
||||
|
|
@ -22,6 +36,11 @@ DiscardNonIntra="Fotogramas no intra-frame"
|
|||
DiscardNonKey="Fotogramas no claves"
|
||||
DiscardAll="Todos los fotogramas (¡Cuidado!)"
|
||||
RestartWhenActivated="Reiniciar la reproducción cuando la fuente esté activa"
|
||||
ColorRange="Gama de Color YUV"
|
||||
ColorRange.Auto="Automatico"
|
||||
ColorRange.Partial="Parcial"
|
||||
ColorRange.Full="Completo"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Todos los archivos multimedia"
|
||||
MediaFileFilter.VideoFiles="Archivos de vídeo"
|
||||
|
|
|
|||
|
|
@ -1,30 +1,49 @@
|
|||
FFmpegOutput="FFmpeg Irteera"
|
||||
FFmpegAAC="FFmpeg Berezko AAC Kodeatzailea"
|
||||
Bitrate="Bitneurria"
|
||||
FFmpegOutput="FFmpeg irteera"
|
||||
FFmpegAAC="FFmpeg lehenetsitako AAC Kodetzailea"
|
||||
Bitrate="Bit-tasa"
|
||||
Preset="Aurrezarpena"
|
||||
RateControl="Tasaren kontrola"
|
||||
KeyframeIntervalSec="Gako-fotogramen tartea (segundoak, 0=auto)"
|
||||
Lossless="Galerarik gabe"
|
||||
|
||||
FFmpegSource="Multimedia Iturburua"
|
||||
LocalFile="Tokiko Agiria"
|
||||
Looping="Onartu begizta"
|
||||
NVENC.Use2Pass="Erabili bi urratseko kodeketa"
|
||||
NVENC.Preset.default="Lehenetsia"
|
||||
NVENC.Preset.hq="Kalitate handia"
|
||||
NVENC.Preset.hp="Eraginkortasun handia"
|
||||
NVENC.Preset.bd="Bluray"
|
||||
NVENC.Preset.ll="Latentzia txikia"
|
||||
NVENC.Preset.llhq="Latentzia txikia kalitate handia"
|
||||
NVENC.Preset.llhp="Latentzia txikia eraginkortasun handia"
|
||||
NVENC.Level="Maila"
|
||||
|
||||
FFmpegSource="Multimedia iturburua"
|
||||
LocalFile="Tokiko fitxategia"
|
||||
Looping="Begizta"
|
||||
Input="Sarrera"
|
||||
InputFormat="Sarrera Heuskarria"
|
||||
ForceFormat="Behartu heuskarri bihurketa"
|
||||
HardwareDecode="Erabili hardware dekodeaketa eskuragarri dagoenean"
|
||||
ClearOnMediaEnd="Ezkutatu iturburua irakurketa amaitutakoan"
|
||||
InputFormat="Sarrera formatua"
|
||||
ForceFormat="Behartu formatu-bihurketa"
|
||||
HardwareDecode="Erabili hardware deskodeketa eskuragarri dagoenean"
|
||||
ClearOnMediaEnd="Ezkutatu iturburua erreprodukzioa amaitzean"
|
||||
Advanced="Aurreratua"
|
||||
AudioBufferSize="Audio Buffer Neurria (frameak)"
|
||||
VideoBufferSize="Bideo Buffer Neurria (frameak)"
|
||||
FrameDropping="Frame Erortze Maila"
|
||||
AudioBufferSize="Audio-bufferraren tamaina (fotogramak)"
|
||||
VideoBufferSize="Bideo-bufferraren tamaina (fotogramak)"
|
||||
FrameDropping="Fotogramen erorketa maila"
|
||||
DiscardNone="Ezer ez"
|
||||
DiscardDefault="Berezkoa (Pakete Baliogabeak)"
|
||||
DiscardNonRef="Ez-Xehetasun Frameak"
|
||||
DiscardBiDir="Bi-Norabideko Frameak"
|
||||
DiscardNonIntra="Ez-Intra Frameak"
|
||||
DiscardNonKey="Ez-Giltza Frameak"
|
||||
DiscardAll="Frame Guztiak (Kontuz!)"
|
||||
RestartWhenActivated="Berrabiarazi irakurketa iturburua gaitua bihurtzerakoan"
|
||||
DiscardDefault="Lehenetsia (pakete baliogabeak)"
|
||||
DiscardNonRef="Erreferentziarik gabeko fotogramak"
|
||||
DiscardBiDir="Norabide biko fotogramak"
|
||||
DiscardNonIntra="Non-Intra fotogramak"
|
||||
DiscardNonKey="Gakoa ez diren fotogramak"
|
||||
DiscardAll="Fotograma guztiak (kontuz!)"
|
||||
RestartWhenActivated="Berrabiarazi erreprodukzioa iturburua aktiboa dagoenean"
|
||||
ColorRange="YUV kolore-barrutia"
|
||||
ColorRange.Auto="Auto"
|
||||
ColorRange.Partial="Partziala"
|
||||
ColorRange.Full="Osoa"
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Multimedia Agiri Guztiak"
|
||||
MediaFileFilter.VideoFiles="Bideo Agiriak"
|
||||
MediaFileFilter.AudioFiles="Audio Agiriak"
|
||||
MediaFileFilter.AllFiles="Agiri Guztiak"
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Multimedia-fitxategi guztiak"
|
||||
MediaFileFilter.VideoFiles="Bideo-fitxategiak"
|
||||
MediaFileFilter.AudioFiles="Audio-fitxategiak"
|
||||
MediaFileFilter.AllFiles="Fitxategi guztiak"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,20 @@
|
|||
FFmpegOutput="FFmpeg ulostulo"
|
||||
FFmpegAAC="FFmpeg oletus AAC-enkooderi"
|
||||
Bitrate="Bitrate"
|
||||
Preset="Esiasetus"
|
||||
RateControl="Nopeudensäädin"
|
||||
KeyframeIntervalSec="Keyframe-väli (sec, 0=auto)"
|
||||
Lossless="Häviötön"
|
||||
|
||||
NVENC.Use2Pass="Käytä kaksivaiheista enkoodausta"
|
||||
NVENC.Preset.default="Oletusarvo"
|
||||
NVENC.Preset.hq="Korkea laatu"
|
||||
NVENC.Preset.hp="Korkea suorituskyky"
|
||||
NVENC.Preset.bd="Bluray"
|
||||
NVENC.Preset.ll="Alhainen latenssi"
|
||||
NVENC.Preset.llhq="Alhainen latenssi, korkea laatu"
|
||||
NVENC.Preset.llhp="Alhainen latenssi, korkea suorituskyky"
|
||||
NVENC.Level="Taso"
|
||||
|
||||
FFmpegSource="Lisää media"
|
||||
LocalFile="Paikallinen tiedosto"
|
||||
|
|
@ -22,6 +36,11 @@ DiscardNonIntra="Non-Intra Frames"
|
|||
DiscardNonKey="Non-Key Frames"
|
||||
DiscardAll="All Frames (Varoitus!)"
|
||||
RestartWhenActivated="Aloita toisto uudelleen kun lähde aktivoituu"
|
||||
ColorRange="YUV värialue"
|
||||
ColorRange.Auto="Automaattinen"
|
||||
ColorRange.Partial="Osittainen"
|
||||
ColorRange.Full="Täysi"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Kaikki mediatiedostot"
|
||||
MediaFileFilter.VideoFiles="Videotiedostot"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,20 @@
|
|||
FFmpegOutput="Sortie FFmpeg"
|
||||
FFmpegAAC="Encodeur AAC FFmpeg par défaut"
|
||||
Bitrate="Débit"
|
||||
Preset="Préréglage"
|
||||
RateControl="Contrôle du débit"
|
||||
KeyframeIntervalSec="Intervalle d'image-clé (en secondes, 0 = auto)"
|
||||
Lossless="Sans perte"
|
||||
|
||||
NVENC.Use2Pass="Utiliser l'encodage double passe"
|
||||
NVENC.Preset.default="Défaut"
|
||||
NVENC.Preset.hq="Haute qualité"
|
||||
NVENC.Preset.hp="Haute performance"
|
||||
NVENC.Preset.bd="Blu-ray"
|
||||
NVENC.Preset.ll="Faible latence"
|
||||
NVENC.Preset.llhq="Faible latence haute qualité"
|
||||
NVENC.Preset.llhp="Faible latence haute performance"
|
||||
NVENC.Level="Niveau"
|
||||
|
||||
FFmpegSource="Source média"
|
||||
LocalFile="Fichier local"
|
||||
|
|
@ -22,6 +36,11 @@ DiscardNonIntra="Images non-intra"
|
|||
DiscardNonKey="Images non-clés"
|
||||
DiscardAll="Toutes les images (Attention !)"
|
||||
RestartWhenActivated="Reprendre la lecture quand la source est active"
|
||||
ColorRange="Gamme de couleurs YUV"
|
||||
ColorRange.Auto="Auto"
|
||||
ColorRange.Partial="Partielle"
|
||||
ColorRange.Full="Complète"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Tous les fichiers multimédias"
|
||||
MediaFileFilter.VideoFiles="Fichiers vidéo"
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ FFmpegOutput="Saída de FFmpeg"
|
|||
FFmpegAAC="Codificador AAC FFmpeg predefinido"
|
||||
Bitrate="Velocidade de bits"
|
||||
|
||||
NVENC.Level="Nivel"
|
||||
|
||||
FFmpegSource="Fonte multimedia"
|
||||
LocalFile="Ficheiro local"
|
||||
Looping="Bucle"
|
||||
|
|
@ -21,3 +23,4 @@ DiscardBiDir="Marcos bidireccionais"
|
|||
DiscardAll="Todos os marcos (con tino!)"
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
32
plugins/obs-ffmpeg/data/locale/he-IL.ini
Normal file
32
plugins/obs-ffmpeg/data/locale/he-IL.ini
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
FFmpegOutput="פלט FFmpeg"
|
||||
FFmpegAAC="FFmpeg מקודד AAC ברירת מחדל"
|
||||
Bitrate="קצב ביטים"
|
||||
|
||||
|
||||
FFmpegSource="מקור מדיה"
|
||||
LocalFile="קובץ מקומי"
|
||||
Looping="לולאה"
|
||||
Input="קלט"
|
||||
InputFormat="תבנית קלט"
|
||||
ForceFormat="כפה המרת תבנית"
|
||||
HardwareDecode="השתמש בפענוח חומרה כאשר היא זמין"
|
||||
ClearOnMediaEnd="הסתר את מקור כאשר ההשמעה מסתיימת"
|
||||
Advanced="מתקדם"
|
||||
AudioBufferSize="גודל מאגר שמע (פריימים)"
|
||||
VideoBufferSize="גודל מאגר הווידאו (פריימים)"
|
||||
FrameDropping="רמת נשירת פריימים"
|
||||
DiscardNone="ללא"
|
||||
DiscardDefault="ברירת מחדל (מנות לא חוקיות)"
|
||||
DiscardNonRef="פריימים לא יחס"
|
||||
DiscardBiDir="פריימים דו-כיוונים"
|
||||
DiscardNonIntra="פריימים לא ביינים"
|
||||
DiscardNonKey="מסגרות שאינן מפתח"
|
||||
DiscardAll="כל הפריימים (זהירות!)"
|
||||
RestartWhenActivated="הפעל מחדש השמעה כאשר מקור הופך לפעיל"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="כל קבצי המדיה"
|
||||
MediaFileFilter.VideoFiles="קבצי וידאו"
|
||||
MediaFileFilter.AudioFiles="קבצי אודיו"
|
||||
MediaFileFilter.AllFiles="כל הקבצים"
|
||||
|
||||
|
|
@ -1,6 +1,18 @@
|
|||
FFmpegOutput="FFmpeg izlaz"
|
||||
FFmpegAAC="FFmpeg podrazumevani AAC enkoder"
|
||||
Bitrate="Protok"
|
||||
Preset="Šablon"
|
||||
KeyframeIntervalSec="Interval ključnih frejmova (sekunde, 0=automatski)"
|
||||
|
||||
NVENC.Use2Pass="Koristi enkoding duplog prolaza"
|
||||
NVENC.Preset.default="Podrazumevani"
|
||||
NVENC.Preset.hq="Visoki kvalitet"
|
||||
NVENC.Preset.hp="Visoke performanse"
|
||||
NVENC.Preset.bd="Bluray"
|
||||
NVENC.Preset.ll="Nisko kašnjenje"
|
||||
NVENC.Preset.llhq="Visoki kvalitet niskog kašnjenja"
|
||||
NVENC.Preset.llhp="Visoke performanse niskog kašnjenja"
|
||||
NVENC.Level="Nivo"
|
||||
|
||||
FFmpegSource="Medija izvor"
|
||||
LocalFile="Lokalna datoteka"
|
||||
|
|
@ -22,6 +34,11 @@ DiscardNonIntra="Ne-intra frejmovi"
|
|||
DiscardNonKey="Frejmovi koji nisu ključni"
|
||||
DiscardAll="Svi frejmovi (oprezno!)"
|
||||
RestartWhenActivated="Ponovi reprodukciju kada izvor postane aktivan"
|
||||
ColorRange="YUV opseg boja"
|
||||
ColorRange.Auto="Automatski"
|
||||
ColorRange.Partial="Delimični"
|
||||
ColorRange.Full="Potpuni"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Sve medija datoteke"
|
||||
MediaFileFilter.VideoFiles="Video datoteke"
|
||||
|
|
|
|||
|
|
@ -1,30 +1,49 @@
|
|||
FFmpegOutput="FFmpeg Kimenet"
|
||||
FFmpegOutput="FFmpeg kimenet"
|
||||
FFmpegAAC="FFmpeg alapértelmezett AAC kódoló"
|
||||
Bitrate="Bitráta"
|
||||
Preset="Készlet"
|
||||
RateControl="Sebesség Vezérlés"
|
||||
KeyframeIntervalSec="Kulcsképkocka időköze (másodperc, 0=auto)"
|
||||
Lossless="Veszteségmentes"
|
||||
|
||||
FFmpegSource="Média Forrás"
|
||||
LocalFile="Helyi Fájl"
|
||||
NVENC.Use2Pass="Kétmenetes kódolás"
|
||||
NVENC.Preset.default="Alapértelmezett"
|
||||
NVENC.Preset.hq="Kiváló minőség"
|
||||
NVENC.Preset.hp="Nagy teljesítmény"
|
||||
NVENC.Preset.bd="BluRay"
|
||||
NVENC.Preset.ll="Alacsony-késleltetés"
|
||||
NVENC.Preset.llhq="Alacsony-késleltetés kiváló minőséggel"
|
||||
NVENC.Preset.llhp="Alacsony-késleltetés nagy teljesítménnyel"
|
||||
NVENC.Level="Szint"
|
||||
|
||||
FFmpegSource="Médiaforrás"
|
||||
LocalFile="Helyi fájl"
|
||||
Looping="Ismétlés"
|
||||
Input="Bemenet"
|
||||
InputFormat="Bemeneti Formátum"
|
||||
InputFormat="Bemeneti formátum"
|
||||
ForceFormat="Formátum átváltás kényszerítése"
|
||||
HardwareDecode="Hardveres dekódolás használata, ha rendelkezésre áll"
|
||||
ClearOnMediaEnd="Forrás elrejtése a lejátszás végeztével"
|
||||
Advanced="Haladó"
|
||||
AudioBufferSize="Audio Puffer Méret (képkockák)"
|
||||
VideoBufferSize="Video Puffer Méret (képkockák)"
|
||||
FrameDropping="Képkocka Ejtésszint"
|
||||
AudioBufferSize="Audio pufferméret (képkockák)"
|
||||
VideoBufferSize="Video pufferméret (képkockák)"
|
||||
FrameDropping="Képkocka ejtésszint"
|
||||
DiscardNone="Semmi"
|
||||
DiscardDefault="Alapértelmezett (Érvénytelen Csomagok)"
|
||||
DiscardNonRef="Nem Referencia Kockák"
|
||||
DiscardBiDir="Kétirányú Kockák"
|
||||
DiscardNonIntra="Nem Belső Kockák"
|
||||
DiscardNonKey="Nem Kulcskockák"
|
||||
DiscardAll="Összes Kocka (Óvatosan!)"
|
||||
DiscardDefault="Alapértelmezett (érvénytelen csomagok)"
|
||||
DiscardNonRef="Nem referencia kockák"
|
||||
DiscardBiDir="Kétirányú kockák"
|
||||
DiscardNonIntra="Nem belső kockák"
|
||||
DiscardNonKey="Nem kulcskockák"
|
||||
DiscardAll="Összes kocka (óvatosan!)"
|
||||
RestartWhenActivated="Lejátszás újraindítása, ha a forrás aktivizálódik"
|
||||
ColorRange="YUV színtartomány"
|
||||
ColorRange.Auto="Auto"
|
||||
ColorRange.Partial="Részleges"
|
||||
ColorRange.Full="Teljes"
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Minden Média Fájl"
|
||||
MediaFileFilter.VideoFiles="Video Fájlok"
|
||||
MediaFileFilter.AudioFiles="Hang Fájlok"
|
||||
MediaFileFilter.AllFiles="Minden Fájl"
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Minden médiafájl"
|
||||
MediaFileFilter.VideoFiles="Videofájlok"
|
||||
MediaFileFilter.AudioFiles="Hangfájlok"
|
||||
MediaFileFilter.AllFiles="Minden fájl"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ FFmpegOutput="Uscita FFmpeg"
|
|||
FFmpegAAC="Codificatore FFmpeg predefinito AAC"
|
||||
Bitrate="Bitrate"
|
||||
|
||||
|
||||
FFmpegSource="Origine multimediale"
|
||||
LocalFile="File locale"
|
||||
Looping="Ripeti"
|
||||
|
|
@ -21,5 +22,7 @@ DiscardBiDir="Frame bi-direzionali"
|
|||
DiscardNonIntra="Frame non interposti"
|
||||
DiscardNonKey="Frame non di chiave"
|
||||
DiscardAll="Tutti i Frame (opzione per utenti più esperti)"
|
||||
RestartWhenActivated="Riattiva playback quando la fonte torna attiva"
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,20 @@
|
|||
FFmpegOutput="FFmpeg の出力"
|
||||
FFmpegAAC="FFmpeg 既定のAAC エンコーダー"
|
||||
FFmpegAAC="FFmpeg 既定のAAC エンコーダ"
|
||||
Bitrate="ビットレート"
|
||||
Preset="プリセット"
|
||||
RateControl="レート制御"
|
||||
KeyframeIntervalSec="キーフレーム間隔 (秒, 0=自動)"
|
||||
Lossless="無損失"
|
||||
|
||||
NVENC.Use2Pass="2パスエンコードを使用"
|
||||
NVENC.Preset.default="既定"
|
||||
NVENC.Preset.hq="高品質"
|
||||
NVENC.Preset.hp="高性能"
|
||||
NVENC.Preset.bd="ブルーレイ"
|
||||
NVENC.Preset.ll="低遅延"
|
||||
NVENC.Preset.llhq="低遅延高品質"
|
||||
NVENC.Preset.llhp="低遅延高性能"
|
||||
NVENC.Level="レベル"
|
||||
|
||||
FFmpegSource="メディアソース"
|
||||
LocalFile="ローカルファイル"
|
||||
|
|
@ -11,17 +25,22 @@ ForceFormat="強制的にフォーマットを変換"
|
|||
HardwareDecode="可能な場合ハードウェアデコードを使用"
|
||||
ClearOnMediaEnd="再生終了時にソースを非表示にする"
|
||||
Advanced="高度な設定"
|
||||
AudioBufferSize="音声バッファーサイズ(フレーム)"
|
||||
VideoBufferSize="映像バッファーサイズ(フレーム)"
|
||||
AudioBufferSize="音声バッファーサイズ (フレーム)"
|
||||
VideoBufferSize="映像バッファーサイズ (フレーム)"
|
||||
FrameDropping="フレームドロップレベル"
|
||||
DiscardNone="なし"
|
||||
DiscardDefault="既定(無効なパケット)"
|
||||
DiscardDefault="既定 (無効なパケット)"
|
||||
DiscardNonRef="非参照フレーム"
|
||||
DiscardBiDir="双方向フレーム"
|
||||
DiscardNonIntra="非イントラフレーム"
|
||||
DiscardNonKey="非キーフレーム"
|
||||
DiscardAll="すべてのフレーム(注意!)"
|
||||
DiscardAll="すべてのフレーム (注意!)"
|
||||
RestartWhenActivated="ソースがアクティブになったときに再生を再開する"
|
||||
ColorRange="YUV 色範囲"
|
||||
ColorRange.Auto="自動"
|
||||
ColorRange.Partial="一部"
|
||||
ColorRange.Full="全部"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="すべてのメディアファイル"
|
||||
MediaFileFilter.VideoFiles="ビデオファイル"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,20 @@
|
|||
FFmpegOutput="FFmpeg 출력"
|
||||
FFmpegAAC="FFmpeg 기본 AAC 인코더"
|
||||
Bitrate="비트레이트"
|
||||
Preset="사전 설정"
|
||||
RateControl="데이터율 제어"
|
||||
KeyframeIntervalSec="키프레임 간격 (초 단위, 0=자동)"
|
||||
Lossless="무손실"
|
||||
|
||||
NVENC.Use2Pass="2 패스 인코딩 사용"
|
||||
NVENC.Preset.default="기본"
|
||||
NVENC.Preset.hq="우수한 품질"
|
||||
NVENC.Preset.hp="우수한 성능"
|
||||
NVENC.Preset.bd="블루레이"
|
||||
NVENC.Preset.ll="낮은 지연 시간"
|
||||
NVENC.Preset.llhq="낮은 지연 시간 우수한 품질"
|
||||
NVENC.Preset.llhp="낮은 지연 시간 우수한 성능"
|
||||
NVENC.Level="수준"
|
||||
|
||||
FFmpegSource="미디어 소스"
|
||||
LocalFile="로컬 파일"
|
||||
|
|
@ -22,6 +36,11 @@ DiscardNonIntra="비 내부 프레임"
|
|||
DiscardNonKey="비 키 프레임"
|
||||
DiscardAll="모든 프레임 (주의!)"
|
||||
RestartWhenActivated="소스가 활성화될 때 재생을 다시 시작"
|
||||
ColorRange="YUV 색상 범위"
|
||||
ColorRange.Auto="자동"
|
||||
ColorRange.Partial="부분"
|
||||
ColorRange.Full="전체"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="모든 미디어 파일"
|
||||
MediaFileFilter.VideoFiles="비디오 파일"
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ FFmpegOutput="FFmpeg utdata"
|
|||
FFmpegAAC="Standard FFmpeg AAC-koder"
|
||||
Bitrate="Bitrate"
|
||||
|
||||
|
||||
FFmpegSource="Mediekilde"
|
||||
LocalFile="Lokal fil"
|
||||
Looping="Repeter"
|
||||
|
|
@ -23,3 +24,4 @@ DiscardNonKey="Ikkenøkkelbilder"
|
|||
DiscardAll="Alle bilder (forsiktig!)"
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,20 @@
|
|||
FFmpegOutput="FFmpeg-uitvoer"
|
||||
FFmpegAAC="FFmpeg Standaard AAC Encoder"
|
||||
Bitrate="Bitrate"
|
||||
Preset="Preset"
|
||||
RateControl="Rate Control"
|
||||
KeyframeIntervalSec="Tijd tussen keyframes (seconden, 0=auto)"
|
||||
Lossless="Lossless"
|
||||
|
||||
NVENC.Use2Pass="Gebruik two-pass encoding"
|
||||
NVENC.Preset.default="Standaard"
|
||||
NVENC.Preset.hq="Hoge kwaliteit"
|
||||
NVENC.Preset.hp="Hoge prestaties"
|
||||
NVENC.Preset.bd="Blu-ray"
|
||||
NVENC.Preset.ll="Lage Latency"
|
||||
NVENC.Preset.llhq="Lage latency, hoge kwaliteit"
|
||||
NVENC.Preset.llhp="Lage latency, hoge prestaties"
|
||||
NVENC.Level="Niveau"
|
||||
|
||||
FFmpegSource="Mediabron"
|
||||
LocalFile="Lokaal bestand"
|
||||
|
|
@ -22,6 +36,11 @@ DiscardNonIntra="Niet-Intra Frames"
|
|||
DiscardNonKey="Niet-Key Frames"
|
||||
DiscardAll="Alle Frames (Voorzichtig!)"
|
||||
RestartWhenActivated="Opnieuw starten met afspelen zodra de bron actief wordt"
|
||||
ColorRange="YUV Kleurbereik"
|
||||
ColorRange.Auto="Automatisch"
|
||||
ColorRange.Partial="Gedeeltelijk"
|
||||
ColorRange.Full="Volledig"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Alle mediabestanden"
|
||||
MediaFileFilter.VideoFiles="Videobestanden"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,18 @@
|
|||
FFmpegOutput="Wyjście FFmpeg"
|
||||
FFmpegAAC="Domyślny enkoder AAC w FFmpeg"
|
||||
Bitrate="Przepływność bitowa"
|
||||
Preset="Profil ustawień"
|
||||
KeyframeIntervalSec="Odstęp między klatkami kluczowymi (sekundy, 0=automatyczny)"
|
||||
|
||||
NVENC.Use2Pass="Użyj enkodowania dwuprzebiegowego"
|
||||
NVENC.Preset.default="Domyślny"
|
||||
NVENC.Preset.hq="Wysoka jakość"
|
||||
NVENC.Preset.hp="Wysoka wydajność"
|
||||
NVENC.Preset.bd="Blu-ray"
|
||||
NVENC.Preset.ll="Niskie opóźnienie"
|
||||
NVENC.Preset.llhq="Niskie opóźnienie - wysoka jakość"
|
||||
NVENC.Preset.llhp="Niskie opóźnienie - wysoka wydajność"
|
||||
NVENC.Level="Poziom"
|
||||
|
||||
FFmpegSource="Źródło danych"
|
||||
LocalFile="Plik lokalny"
|
||||
|
|
@ -22,6 +34,11 @@ DiscardNonIntra="Klatki niewewnętrzne (non-intra)"
|
|||
DiscardNonKey="Klatki niekluczowe (non-key)"
|
||||
DiscardAll="Wszystkie klatki (Ostrożnie!)"
|
||||
RestartWhenActivated="Zrestartuj odtwarzanie, gdy źródła będą aktywne"
|
||||
ColorRange="Zakres kolorów YUV"
|
||||
ColorRange.Auto="Automatycznie"
|
||||
ColorRange.Partial="Częściowy"
|
||||
ColorRange.Full="Pełny"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Wszystkie pliki multimedialne"
|
||||
MediaFileFilter.VideoFiles="Pliki video"
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ FFmpegOutput="Saída do FFmpeg"
|
|||
FFmpegAAC="Codificador AAC Padrão do FFmpeg"
|
||||
Bitrate="Taxa de Bits"
|
||||
|
||||
|
||||
FFmpegSource="Fonte de mídia"
|
||||
LocalFile="Arquivo Local"
|
||||
Looping="Loop"
|
||||
|
|
@ -21,5 +22,15 @@ DiscardBiDir="Frames Bi-direcionais"
|
|||
DiscardNonIntra="Sem intra-frames"
|
||||
DiscardNonKey="Sem keyframes"
|
||||
DiscardAll="Todos os frames(cuidado!)"
|
||||
RestartWhenActivated="Reiniciar reprodução quando a fonte se tornar ativa"
|
||||
ColorRange="Intervalo de Cores YUV"
|
||||
ColorRange.Auto="Auto"
|
||||
ColorRange.Partial="Parcial"
|
||||
ColorRange.Full="Completo"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Todos Arquivos de Mídia"
|
||||
MediaFileFilter.VideoFiles="Arquivos de Vídeo"
|
||||
MediaFileFilter.AudioFiles="Arquivos de Áudio"
|
||||
MediaFileFilter.AllFiles="Todos os Arquivos"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
FFmpegOutput="Saída de FFmpeg"
|
||||
FFmpegAAC="FFmpeg Codificador AAC padrão"
|
||||
Bitrate="Taxa de Bits (Bitrate)"
|
||||
FFmpegAAC="Codificador AAC padrão do FFmpeg"
|
||||
Bitrate="Bitrate"
|
||||
|
||||
|
||||
FFmpegSource="Fonte de multimédia"
|
||||
LocalFile="Ficheiro local"
|
||||
|
|
@ -23,3 +24,4 @@ DiscardNonKey="Fotogramas não registados"
|
|||
DiscardAll="Todos os fotogramas (cuidado!)"
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,30 +1,40 @@
|
|||
FFmpegOutput="Ieşire FFmpeg"
|
||||
FFmpegAAC="Codare AAC implicită pentru FFmpeg"
|
||||
Bitrate="Bitrate"
|
||||
FFmpegOutput="Ieșire FFmpeg"
|
||||
FFmpegAAC="Codificator AAC implicit FFmpeg"
|
||||
Bitrate="Rată de biți"
|
||||
Preset="Presetare"
|
||||
|
||||
FFmpegSource="Sursa Media"
|
||||
LocalFile="Fişier Local"
|
||||
Looping="Loop/Buclă"
|
||||
NVENC.Preset.default="Implicită"
|
||||
NVENC.Preset.bd="Bluray"
|
||||
NVENC.Level="Nivel"
|
||||
|
||||
FFmpegSource="Sursă media"
|
||||
LocalFile="Fișier local"
|
||||
Looping="Buclă"
|
||||
Input="Intrare"
|
||||
InputFormat="Format de intrare"
|
||||
ForceFormat="Obliga conversia formatului"
|
||||
HardwareDecode="Foloseste decodarea hardware cand e disponibila"
|
||||
ClearOnMediaEnd="Ascunde sursă atunci când se termină redarea"
|
||||
ForceFormat="Forțează conversia formatului"
|
||||
HardwareDecode="Folosește decodarea hardware când este disponibilă"
|
||||
ClearOnMediaEnd="Ascunde sursa atunci când se termină redarea"
|
||||
Advanced="Avansat"
|
||||
AudioBufferSize="Dimensiune tampon/buffer audio (cadre)"
|
||||
VideoBufferSize="Dimensiune tampon/buffer video (cadre)"
|
||||
FrameDropping="Nivelul de pierdere a frame-urilor"
|
||||
DiscardNone="Nici unul"
|
||||
DiscardDefault="Implicit (pachetele invalide)"
|
||||
DiscardNonRef="Frame-urile fara referinte"
|
||||
DiscardBiDir="Frame-urile Bi-directionale"
|
||||
DiscardNonIntra="Frame-urile Non-Intra"
|
||||
DiscardNonKey="Frame-urile Non-Key"
|
||||
DiscardAll="Toate frame-urile (Atentie!)"
|
||||
RestartWhenActivated="Reporniţi redarea când sursa devine activă"
|
||||
AudioBufferSize="Dimensiune pentru bufferul audio (cadre)"
|
||||
VideoBufferSize="Dimensiune pentru bufferul video (cadre)"
|
||||
FrameDropping="Nivel de pierdere al cadrelor"
|
||||
DiscardNone="Niciunul"
|
||||
DiscardDefault="Implicit (Pachete invalide)"
|
||||
DiscardNonRef="Cadre fără referință"
|
||||
DiscardBiDir="Cadre bidirecționale"
|
||||
DiscardNonIntra="Cadre non-intra"
|
||||
DiscardNonKey="Cadre non-cheie"
|
||||
DiscardAll="Toate cadrele (Atenție!)"
|
||||
RestartWhenActivated="Repornește redarea când sursa devine activă"
|
||||
ColorRange="Gamă de culori YUV"
|
||||
ColorRange.Auto="Auto"
|
||||
ColorRange.Partial="Parțială"
|
||||
ColorRange.Full="Completă"
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Toate fişierele Media"
|
||||
MediaFileFilter.VideoFiles="Fişiere video"
|
||||
MediaFileFilter.AudioFiles="Fişiere audio"
|
||||
MediaFileFilter.AllFiles="Toate fişierele"
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Toate fișierele media"
|
||||
MediaFileFilter.VideoFiles="Fișiere video"
|
||||
MediaFileFilter.AudioFiles="Fișiere audio"
|
||||
MediaFileFilter.AllFiles="Toate fișierele"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,18 @@
|
|||
FFmpegOutput="Вывод FFmpeg"
|
||||
FFmpegAAC="Стандартный AAC-кодер FFmpeg"
|
||||
Bitrate="Битрейт"
|
||||
Preset="Пресет"
|
||||
KeyframeIntervalSec="Интервал ключевых кадров (сек, 0=авто)"
|
||||
|
||||
NVENC.Use2Pass="Использовать двухпроходное кодирование"
|
||||
NVENC.Preset.default="По умолчанию"
|
||||
NVENC.Preset.hq="Высокое качество"
|
||||
NVENC.Preset.hp="Высокая производительность"
|
||||
NVENC.Preset.bd="Blu-ray"
|
||||
NVENC.Preset.ll="Малая задержка"
|
||||
NVENC.Preset.llhq="Малая задержка, высокое качество"
|
||||
NVENC.Preset.llhp="Малая задержка, высокая производительность"
|
||||
NVENC.Level="Уровень"
|
||||
|
||||
FFmpegSource="Источник медиа"
|
||||
LocalFile="Локальный файл"
|
||||
|
|
@ -21,6 +33,12 @@ DiscardBiDir="Двунаправленные кадры"
|
|||
DiscardNonIntra="Невнутренние кадры"
|
||||
DiscardNonKey="Неключевые кадры"
|
||||
DiscardAll="Все кадры (осторожно!)"
|
||||
RestartWhenActivated="Перезапустить воспроизведение, когда источник становится активным"
|
||||
ColorRange="Цветовой диапазон YUV"
|
||||
ColorRange.Auto="Автоматически"
|
||||
ColorRange.Partial="Частичный"
|
||||
ColorRange.Full="Полный"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Все медиа-файлы"
|
||||
MediaFileFilter.VideoFiles="Видеофайлы"
|
||||
|
|
|
|||
|
|
@ -2,8 +2,10 @@ FFmpegOutput="Výstup FFmpeg"
|
|||
FFmpegAAC="Predvolený FFmpeg AAC enkodér"
|
||||
Bitrate="Bitrate"
|
||||
|
||||
|
||||
Looping="Slučka"
|
||||
Advanced="Rozšírené"
|
||||
DiscardNone="Žiadny"
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ FFmpegOutput="FFmpeg izhod"
|
|||
FFmpegAAC="FFmpeg Prevzeti AAC Encoder"
|
||||
Bitrate="Bitrate"
|
||||
|
||||
|
||||
FFmpegSource="Medijski Vir"
|
||||
LocalFile="Lokalna Datoteka"
|
||||
Looping="Ponavljaj"
|
||||
|
|
@ -23,3 +24,4 @@ DiscardNonKey="Non-Key Frames"
|
|||
DiscardAll="Vse Frame (Pazite!)"
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,18 @@
|
|||
FFmpegOutput="FFmpeg izlaz"
|
||||
FFmpegAAC="FFmpeg podrazumevani AAC enkoder"
|
||||
Bitrate="Protok"
|
||||
Preset="Šablon"
|
||||
KeyframeIntervalSec="Interval ključnih frejmova (sekunde, 0=automatski)"
|
||||
|
||||
NVENC.Use2Pass="Koristi enkoding duplog prolaza"
|
||||
NVENC.Preset.default="Podrazumevani"
|
||||
NVENC.Preset.hq="Visoki kvalitet"
|
||||
NVENC.Preset.hp="Visoke performanse"
|
||||
NVENC.Preset.bd="Bluray"
|
||||
NVENC.Preset.ll="Nisko kašnjenje"
|
||||
NVENC.Preset.llhq="Visoki kvalitet niskog kašnjenja"
|
||||
NVENC.Preset.llhp="Visoke performanse niskog kašnjenja"
|
||||
NVENC.Level="Nivo"
|
||||
|
||||
FFmpegSource="Medija izvor"
|
||||
LocalFile="Lokalna datoteka"
|
||||
|
|
@ -22,6 +34,11 @@ DiscardNonIntra="Ne-intra frejmovi"
|
|||
DiscardNonKey="Frejmovi koji nisu ključni"
|
||||
DiscardAll="Svi frejmovi (oprezno!)"
|
||||
RestartWhenActivated="Ponovi reprodukciju kada izvor postane aktivan"
|
||||
ColorRange="YUV opseg boja"
|
||||
ColorRange.Auto="Automatski"
|
||||
ColorRange.Partial="Delimični"
|
||||
ColorRange.Full="Potpuni"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Sve medija datoteke"
|
||||
MediaFileFilter.VideoFiles="Video datoteke"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,18 @@
|
|||
FFmpegOutput="FFmpeg излаз"
|
||||
FFmpegAAC="FFmpeg подразумевани AAC енкодер"
|
||||
Bitrate="Проток"
|
||||
Preset="Шаблон"
|
||||
KeyframeIntervalSec="Интервал кључних фрејмова (секунде, 0=аутоматски)"
|
||||
|
||||
NVENC.Use2Pass="Користи енкодинг дуплог пролаза"
|
||||
NVENC.Preset.default="Подразумевани"
|
||||
NVENC.Preset.hq="Високи квалитет"
|
||||
NVENC.Preset.hp="Високе перформансе"
|
||||
NVENC.Preset.bd="Bluray"
|
||||
NVENC.Preset.ll="Ниско кашњење"
|
||||
NVENC.Preset.llhq="Високи квалитет ниског кашњења"
|
||||
NVENC.Preset.llhp="Високе перформансе ниског кашњења"
|
||||
NVENC.Level="Ниво"
|
||||
|
||||
FFmpegSource="Медија извор"
|
||||
LocalFile="Локална датотека"
|
||||
|
|
@ -22,6 +34,11 @@ DiscardNonIntra="Не-интра фрејмови"
|
|||
DiscardNonKey="Фрејмови који нису кључни"
|
||||
DiscardAll="Сви фрејмови (опрезно!)"
|
||||
RestartWhenActivated="Понови репродукцију када извор постане активан"
|
||||
ColorRange="YUV опсег боја"
|
||||
ColorRange.Auto="Аутоматски"
|
||||
ColorRange.Partial="Делимични"
|
||||
ColorRange.Full="Потпуни"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Све медија датотеке"
|
||||
MediaFileFilter.VideoFiles="Видео датотеке"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,17 @@
|
|||
FFmpegOutput="FFmpeg-utmatning"
|
||||
FFmpegAAC="AAC-kodare (FFmpeg standard)"
|
||||
Bitrate="Bithastighet"
|
||||
Preset="Förinställning"
|
||||
|
||||
NVENC.Use2Pass="Använd tvåpassavkodning"
|
||||
NVENC.Preset.default="Standard"
|
||||
NVENC.Preset.hq="Hög kvalitet"
|
||||
NVENC.Preset.hp="Hög prestanda"
|
||||
NVENC.Preset.bd="Bluray"
|
||||
NVENC.Preset.ll="Låg latens"
|
||||
NVENC.Preset.llhq="Låg latens, hög kvalitet"
|
||||
NVENC.Preset.llhp="Låg latens, hög prestanda"
|
||||
NVENC.Level="Nivå"
|
||||
|
||||
FFmpegSource="Mediakälla"
|
||||
LocalFile="Lokal fil"
|
||||
|
|
@ -21,5 +32,15 @@ DiscardBiDir="Dubbelriktade bilder"
|
|||
DiscardNonIntra="Icke-Intra bilder"
|
||||
DiscardNonKey="Icke-nyckel bild"
|
||||
DiscardAll="Alla bilder (Varsam!)"
|
||||
RestartWhenActivated="Starta om uppspelning när källa blir aktiv"
|
||||
ColorRange="YUV-färgområde"
|
||||
ColorRange.Auto="Automatisk"
|
||||
ColorRange.Partial="Delvis"
|
||||
ColorRange.Full="Full"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Alla mediafiler"
|
||||
MediaFileFilter.VideoFiles="Videofiler"
|
||||
MediaFileFilter.AudioFiles="Ljudfiler"
|
||||
MediaFileFilter.AllFiles="Alla filer"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,3 +2,5 @@ Bitrate="บิตเรท"
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,12 @@
|
|||
FFmpegOutput="FFmpeg Çıkışı"
|
||||
FFmpegAAC="FFmpeg Varsayılan AAC Kodlayıcı"
|
||||
Bitrate="Bit hızı"
|
||||
Preset="Ön Tanımlı"
|
||||
KeyframeIntervalSec="Anahtarkare Aralığı (saniye, 0=otomatik)"
|
||||
|
||||
NVENC.Preset.default="Varsayılan"
|
||||
NVENC.Preset.hq="Yüksek Kalite"
|
||||
NVENC.Preset.hp="Yüksek Performans"
|
||||
|
||||
FFmpegSource="Ortam Kaynağı"
|
||||
LocalFile="Yerel Dosya"
|
||||
|
|
@ -23,3 +29,8 @@ DiscardNonKey="Anahtar Olmayan Kareler"
|
|||
DiscardAll="Tüm Kareler (Dikkatli Olun!)"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="Tüm Medya Dosyaları"
|
||||
MediaFileFilter.VideoFiles="Video Dosyaları"
|
||||
MediaFileFilter.AudioFiles="Ses Dosyaları"
|
||||
MediaFileFilter.AllFiles="Tüm Dosyalar"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,20 @@
|
|||
FFmpegOutput="FFmpeg 输出"
|
||||
FFmpegAAC="FFmpeg 默认 AAC 编码器"
|
||||
Bitrate="比特率"
|
||||
Preset="预设"
|
||||
RateControl="速率控制"
|
||||
KeyframeIntervalSec="关键帧间隔(秒, 0=自动)"
|
||||
Lossless="无损"
|
||||
|
||||
NVENC.Use2Pass="使用 Two-Pass 编码"
|
||||
NVENC.Preset.default="默认"
|
||||
NVENC.Preset.hq="高质量"
|
||||
NVENC.Preset.hp="高性能"
|
||||
NVENC.Preset.bd="蓝光"
|
||||
NVENC.Preset.ll="低延迟"
|
||||
NVENC.Preset.llhq="低延迟高质量"
|
||||
NVENC.Preset.llhp="低延迟高性能"
|
||||
NVENC.Level="等级"
|
||||
|
||||
FFmpegSource="媒体源"
|
||||
LocalFile="本地文件"
|
||||
|
|
@ -22,6 +36,11 @@ DiscardNonIntra="非intra帧"
|
|||
DiscardNonKey="非关键帧"
|
||||
DiscardAll="所有的帧(小心!)"
|
||||
RestartWhenActivated="当源变为活动状态时重新启动播放"
|
||||
ColorRange="YUV 颜色范围"
|
||||
ColorRange.Auto="自动"
|
||||
ColorRange.Partial="局部"
|
||||
ColorRange.Full="全部"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="所有媒体文件"
|
||||
MediaFileFilter.VideoFiles="视频文件"
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
FFmpegOutput="FFmpeg 輸出"
|
||||
FFmpegAAC="FFmpeg 預設 AAC 編碼器"
|
||||
Bitrate="位元率"
|
||||
Bitrate="流量"
|
||||
|
||||
|
||||
FFmpegSource="媒體來源"
|
||||
LocalFile="本機檔案"
|
||||
Looping="循環"
|
||||
Input="輸入"
|
||||
InputFormat="輸入格式"
|
||||
ForceFormat="強制格式轉換"
|
||||
|
|
@ -15,5 +17,14 @@ VideoBufferSize="影像緩衝區大小 (幀)"
|
|||
FrameDropping="掉幀程度"
|
||||
DiscardNone="無"
|
||||
DiscardDefault="預設 (無效封包)"
|
||||
DiscardNonRef="非參考幀"
|
||||
DiscardNonIntra="非內部框架"
|
||||
DiscardNonKey="非關鍵幀"
|
||||
DiscardAll="所有幀(小心!)"
|
||||
|
||||
|
||||
MediaFileFilter.AllMediaFiles="所有媒體檔案"
|
||||
MediaFileFilter.VideoFiles="影像檔"
|
||||
MediaFileFilter.AudioFiles="音效檔"
|
||||
MediaFileFilter.AllFiles="所有檔案"
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
#ifdef _WIN32
|
||||
#include <io.h>
|
||||
#include <fcntl.h>
|
||||
#include <windows.h>
|
||||
#define inline __inline
|
||||
|
||||
#endif
|
||||
|
|
@ -629,7 +630,11 @@ static inline bool ffmpeg_mux_packet(struct ffmpeg_mux *ffm, uint8_t *buf,
|
|||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
#ifdef _WIN32
|
||||
int wmain(int argc, wchar_t *argv_w[])
|
||||
#else
|
||||
int main(int argc, char *argv[])
|
||||
#endif
|
||||
{
|
||||
struct ffm_packet_info info = {0};
|
||||
struct ffmpeg_mux ffm = {0};
|
||||
|
|
@ -638,6 +643,21 @@ int main(int argc, char *argv[])
|
|||
int ret;
|
||||
|
||||
#ifdef _WIN32
|
||||
char **argv;
|
||||
|
||||
argv = malloc(argc * sizeof(char*));
|
||||
for (int i = 0; i < argc; i++) {
|
||||
size_t len = wcslen(argv_w[i]);
|
||||
int size;
|
||||
|
||||
size = WideCharToMultiByte(CP_UTF8, 0, argv_w[i], (int)len,
|
||||
NULL, 0, NULL, NULL);
|
||||
argv[i] = malloc(size + 1);
|
||||
WideCharToMultiByte(CP_UTF8, 0, argv_w[i], (int)len, argv[i],
|
||||
size + 1, NULL, NULL);
|
||||
argv[i][size] = 0;
|
||||
}
|
||||
|
||||
_setmode(_fileno(stdin), O_BINARY);
|
||||
#endif
|
||||
setvbuf(stderr, NULL, _IONBF, 0);
|
||||
|
|
@ -660,5 +680,11 @@ int main(int argc, char *argv[])
|
|||
|
||||
ffmpeg_mux_free(&ffm);
|
||||
resize_buf_free(&rb);
|
||||
|
||||
#ifdef _WIN32
|
||||
for (int i = 0; i < argc; i++)
|
||||
free(argv[i]);
|
||||
free(argv);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,3 +20,6 @@
|
|||
# define av_frame_free avcodec_free_frame
|
||||
#endif
|
||||
|
||||
#if LIBAVCODEC_VERSION_MAJOR >= 57
|
||||
#define av_free_packet av_packet_unref
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ static inline enum AVPixelFormat obs_to_ffmpeg_video_format(
|
|||
case VIDEO_FORMAT_RGBA: return AV_PIX_FMT_RGBA;
|
||||
case VIDEO_FORMAT_BGRA: return AV_PIX_FMT_BGRA;
|
||||
case VIDEO_FORMAT_BGRX: return AV_PIX_FMT_BGRA;
|
||||
case VIDEO_FORMAT_Y800: return AV_PIX_FMT_GRAY8;
|
||||
}
|
||||
|
||||
return AV_PIX_FMT_NONE;
|
||||
|
|
@ -37,6 +38,7 @@ static inline enum video_format ffmpeg_to_obs_video_format(
|
|||
case AV_PIX_FMT_UYVY422: return VIDEO_FORMAT_UYVY;
|
||||
case AV_PIX_FMT_RGBA: return VIDEO_FORMAT_RGBA;
|
||||
case AV_PIX_FMT_BGRA: return VIDEO_FORMAT_BGRA;
|
||||
case AV_PIX_FMT_GRAY8: return VIDEO_FORMAT_Y800;
|
||||
case AV_PIX_FMT_NONE:
|
||||
default: return VIDEO_FORMAT_NONE;
|
||||
}
|
||||
|
|
|
|||
508
plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c
Normal file
508
plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c
Normal file
|
|
@ -0,0 +1,508 @@
|
|||
/******************************************************************************
|
||||
Copyright (C) 2016 by Hugh Bailey <obs.jim@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
******************************************************************************/
|
||||
|
||||
#include <util/darray.h>
|
||||
#include <util/dstr.h>
|
||||
#include <util/base.h>
|
||||
#include <media-io/video-io.h>
|
||||
#include <obs-module.h>
|
||||
#include <obs-avc.h>
|
||||
|
||||
#include <libavutil/opt.h>
|
||||
#include <libavformat/avformat.h>
|
||||
|
||||
#include "obs-ffmpeg-formats.h"
|
||||
|
||||
#define do_log(level, format, ...) \
|
||||
blog(level, "[NVENC encoder: '%s'] " format, \
|
||||
obs_encoder_get_name(enc->encoder), ##__VA_ARGS__)
|
||||
|
||||
#define warn(format, ...) do_log(LOG_WARNING, format, ##__VA_ARGS__)
|
||||
#define info(format, ...) do_log(LOG_INFO, format, ##__VA_ARGS__)
|
||||
#define debug(format, ...) do_log(LOG_DEBUG, format, ##__VA_ARGS__)
|
||||
|
||||
struct nvenc_encoder {
|
||||
obs_encoder_t *encoder;
|
||||
|
||||
AVCodec *nvenc;
|
||||
AVCodecContext *context;
|
||||
|
||||
AVPicture dst_picture;
|
||||
AVFrame *vframe;
|
||||
|
||||
DARRAY(uint8_t) buffer;
|
||||
|
||||
uint8_t *header;
|
||||
size_t header_size;
|
||||
|
||||
uint8_t *sei;
|
||||
size_t sei_size;
|
||||
|
||||
int height;
|
||||
bool first_packet;
|
||||
};
|
||||
|
||||
static const char *nvenc_getname(void *unused)
|
||||
{
|
||||
UNUSED_PARAMETER(unused);
|
||||
return "NVENC H.264";
|
||||
}
|
||||
|
||||
static inline bool valid_format(enum video_format format)
|
||||
{
|
||||
return format == VIDEO_FORMAT_I420 ||
|
||||
format == VIDEO_FORMAT_NV12 ||
|
||||
format == VIDEO_FORMAT_I444;
|
||||
}
|
||||
|
||||
static void nvenc_video_info(void *data, struct video_scale_info *info)
|
||||
{
|
||||
struct nvenc_encoder *enc = data;
|
||||
enum video_format pref_format;
|
||||
|
||||
pref_format = obs_encoder_get_preferred_video_format(enc->encoder);
|
||||
|
||||
if (!valid_format(pref_format)) {
|
||||
pref_format = valid_format(info->format) ?
|
||||
info->format : VIDEO_FORMAT_NV12;
|
||||
}
|
||||
|
||||
info->format = pref_format;
|
||||
}
|
||||
|
||||
static bool nvenc_init_codec(struct nvenc_encoder *enc)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = avcodec_open2(enc->context, enc->nvenc, NULL);
|
||||
if (ret < 0) {
|
||||
warn("Failed to open NVENC codec: %s", av_err2str(ret));
|
||||
return false;
|
||||
}
|
||||
|
||||
enc->vframe = av_frame_alloc();
|
||||
if (!enc->vframe) {
|
||||
warn("Failed to allocate video frame");
|
||||
return false;
|
||||
}
|
||||
|
||||
enc->vframe->format = enc->context->pix_fmt;
|
||||
enc->vframe->width = enc->context->width;
|
||||
enc->vframe->height = enc->context->height;
|
||||
enc->vframe->colorspace = enc->context->colorspace;
|
||||
enc->vframe->color_range = enc->context->color_range;
|
||||
|
||||
ret = avpicture_alloc(&enc->dst_picture, enc->context->pix_fmt,
|
||||
enc->context->width, enc->context->height);
|
||||
if (ret < 0) {
|
||||
warn("Failed to allocate dst_picture: %s", av_err2str(ret));
|
||||
return false;
|
||||
}
|
||||
|
||||
*((AVPicture*)enc->vframe) = enc->dst_picture;
|
||||
return true;
|
||||
}
|
||||
|
||||
enum RC_MODE {
|
||||
RC_MODE_CBR,
|
||||
RC_MODE_VBR,
|
||||
RC_MODE_CQP,
|
||||
RC_MODE_LOSSLESS
|
||||
};
|
||||
|
||||
static bool nvenc_update(void *data, obs_data_t *settings)
|
||||
{
|
||||
struct nvenc_encoder *enc = data;
|
||||
|
||||
const char *rc = obs_data_get_string(settings, "rate_control");
|
||||
int bitrate = (int)obs_data_get_int(settings, "bitrate");
|
||||
int cqp = (int)obs_data_get_int(settings, "cqp");
|
||||
int keyint_sec = (int)obs_data_get_int(settings, "keyint_sec");
|
||||
const char *preset = obs_data_get_string(settings, "preset");
|
||||
const char *profile = obs_data_get_string(settings, "profile");
|
||||
const char *level = obs_data_get_string(settings, "level");
|
||||
bool twopass = obs_data_get_bool(settings, "2pass");
|
||||
int gpu = (int)obs_data_get_int(settings, "gpu");
|
||||
bool cbr_override = obs_data_get_bool(settings, "cbr");
|
||||
|
||||
video_t *video = obs_encoder_video(enc->encoder);
|
||||
const struct video_output_info *voi = video_output_get_info(video);
|
||||
struct video_scale_info info;
|
||||
|
||||
/* XXX: "cbr" setting has been deprecated */
|
||||
if (cbr_override) {
|
||||
warn("\"cbr\" setting has been deprecated for all encoders! "
|
||||
"Please set \"rate_control\" to \"CBR\" instead. "
|
||||
"Forcing CBR mode. "
|
||||
"(Note to all: this is why you shouldn't use strings for "
|
||||
"common settings)");
|
||||
rc = "CBR";
|
||||
}
|
||||
|
||||
info.format = voi->format;
|
||||
info.colorspace = voi->colorspace;
|
||||
info.range = voi->range;
|
||||
|
||||
nvenc_video_info(enc, &info);
|
||||
av_opt_set_int(enc->context->priv_data, "cbr", false, 0);
|
||||
|
||||
if (astrcmpi(rc, "cqp") == 0) {
|
||||
bitrate = 0;
|
||||
enc->context->global_quality = cqp;
|
||||
|
||||
} else if (astrcmpi(rc, "lossless") == 0) {
|
||||
bitrate = 0;
|
||||
cqp = 0;
|
||||
|
||||
bool hp = (astrcmpi(preset, "hp") == 0 ||
|
||||
astrcmpi(preset, "llhp") == 0);
|
||||
|
||||
av_opt_set(enc->context->priv_data, "profile",
|
||||
hp ? "losslesshp" : "lossless", 0);
|
||||
|
||||
} else if (astrcmpi(rc, "vbr") != 0) { /* CBR by default */
|
||||
av_opt_set_int(enc->context->priv_data, "cbr", true, 0);
|
||||
enc->context->rc_max_rate = bitrate * 1000;
|
||||
enc->context->rc_min_rate = bitrate * 1000;
|
||||
cqp = 0;
|
||||
}
|
||||
|
||||
|
||||
av_opt_set(enc->context->priv_data, "preset", preset, 0);
|
||||
av_opt_set(enc->context->priv_data, "level", level, 0);
|
||||
av_opt_set_int(enc->context->priv_data, "2pass", twopass, 0);
|
||||
av_opt_set_int(enc->context->priv_data, "gpu", gpu, 0);
|
||||
|
||||
enc->context->bit_rate = bitrate * 1000;
|
||||
enc->context->rc_buffer_size = bitrate * 1000;
|
||||
enc->context->width = obs_encoder_get_width(enc->encoder);
|
||||
enc->context->height = obs_encoder_get_height(enc->encoder);
|
||||
enc->context->time_base = (AVRational){voi->fps_den, voi->fps_num};
|
||||
enc->context->pix_fmt = obs_to_ffmpeg_video_format(info.format);
|
||||
enc->context->colorspace = info.colorspace == VIDEO_CS_709 ?
|
||||
AVCOL_SPC_BT709 : AVCOL_SPC_BT470BG;
|
||||
enc->context->color_range = info.range == VIDEO_RANGE_FULL ?
|
||||
AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG;
|
||||
|
||||
if (keyint_sec)
|
||||
enc->context->gop_size = keyint_sec * voi->fps_num /
|
||||
voi->fps_den;
|
||||
else
|
||||
enc->context->gop_size = 250;
|
||||
|
||||
enc->height = enc->context->height;
|
||||
|
||||
info("settings:\n"
|
||||
"\trate_control: %s\n"
|
||||
"\tbitrate: %d\n"
|
||||
"\tcqp: %d\n"
|
||||
"\tkeyint: %d\n"
|
||||
"\tpreset: %s\n"
|
||||
"\tprofile: %s\n"
|
||||
"\tlevel: %s\n"
|
||||
"\twidth: %d\n"
|
||||
"\theight: %d\n"
|
||||
"\t2-pass: %s\n"
|
||||
"\tGPU: %d\n",
|
||||
rc, bitrate, cqp, enc->context->gop_size,
|
||||
preset, profile, level,
|
||||
enc->context->width, enc->context->height,
|
||||
twopass ? "true" : "false",
|
||||
gpu);
|
||||
|
||||
return nvenc_init_codec(enc);
|
||||
}
|
||||
|
||||
static void nvenc_destroy(void *data)
|
||||
{
|
||||
struct nvenc_encoder *enc = data;
|
||||
|
||||
avcodec_close(enc->context);
|
||||
av_frame_free(&enc->vframe);
|
||||
avpicture_free(&enc->dst_picture);
|
||||
da_free(enc->buffer);
|
||||
bfree(enc->header);
|
||||
bfree(enc->sei);
|
||||
|
||||
bfree(enc);
|
||||
}
|
||||
|
||||
static void *nvenc_create(obs_data_t *settings, obs_encoder_t *encoder)
|
||||
{
|
||||
struct nvenc_encoder *enc;
|
||||
|
||||
avcodec_register_all();
|
||||
|
||||
enc = bzalloc(sizeof(*enc));
|
||||
enc->encoder = encoder;
|
||||
enc->nvenc = avcodec_find_encoder_by_name("nvenc_h264");
|
||||
enc->first_packet = true;
|
||||
|
||||
blog(LOG_INFO, "---------------------------------");
|
||||
|
||||
if (!enc->nvenc) {
|
||||
warn("Couldn't find encoder");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
enc->context = avcodec_alloc_context3(enc->nvenc);
|
||||
if (!enc->context) {
|
||||
warn("Failed to create codec context");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!nvenc_update(enc, settings))
|
||||
goto fail;
|
||||
|
||||
return enc;
|
||||
|
||||
fail:
|
||||
nvenc_destroy(enc);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void copy_data(AVPicture *pic, const struct encoder_frame *frame,
|
||||
int height)
|
||||
{
|
||||
for (int plane = 0; plane < MAX_AV_PLANES; plane++) {
|
||||
if (!frame->data[plane])
|
||||
continue;
|
||||
|
||||
int frame_rowsize = (int)frame->linesize[plane];
|
||||
int pic_rowsize = pic->linesize[plane];
|
||||
int bytes = frame_rowsize < pic_rowsize ?
|
||||
frame_rowsize : pic_rowsize;
|
||||
int plane_height = plane == 0 ? height : height/2;
|
||||
|
||||
for (int y = 0; y < plane_height; y++) {
|
||||
int pos_frame = y * frame_rowsize;
|
||||
int pos_pic = y * pic_rowsize;
|
||||
|
||||
memcpy(pic->data[plane] + pos_pic,
|
||||
frame->data[plane] + pos_frame,
|
||||
bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool nvenc_encode(void *data, struct encoder_frame *frame,
|
||||
struct encoder_packet *packet, bool *received_packet)
|
||||
{
|
||||
struct nvenc_encoder *enc = data;
|
||||
AVPacket av_pkt = {0};
|
||||
int got_packet;
|
||||
int ret;
|
||||
|
||||
av_init_packet(&av_pkt);
|
||||
|
||||
copy_data(&enc->dst_picture, frame, enc->height);
|
||||
|
||||
enc->vframe->pts = frame->pts;
|
||||
ret = avcodec_encode_video2(enc->context, &av_pkt, enc->vframe,
|
||||
&got_packet);
|
||||
if (ret < 0) {
|
||||
warn("nvenc_encode: Error encoding: %s", av_err2str(ret));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (got_packet && av_pkt.size) {
|
||||
if (enc->first_packet) {
|
||||
uint8_t *new_packet;
|
||||
size_t size;
|
||||
|
||||
enc->first_packet = false;
|
||||
obs_extract_avc_headers(av_pkt.data, av_pkt.size,
|
||||
&new_packet, &size,
|
||||
&enc->header, &enc->header_size,
|
||||
&enc->sei, &enc->sei_size);
|
||||
|
||||
da_copy_array(enc->buffer, new_packet, size);
|
||||
bfree(new_packet);
|
||||
} else {
|
||||
da_copy_array(enc->buffer, av_pkt.data, av_pkt.size);
|
||||
}
|
||||
|
||||
packet->pts = av_pkt.pts;
|
||||
packet->dts = av_pkt.dts;
|
||||
packet->data = enc->buffer.array;
|
||||
packet->size = enc->buffer.num;
|
||||
packet->type = OBS_ENCODER_VIDEO;
|
||||
packet->keyframe = obs_avc_keyframe(packet->data, packet->size);
|
||||
*received_packet = true;
|
||||
} else {
|
||||
*received_packet = false;
|
||||
}
|
||||
|
||||
av_free_packet(&av_pkt);
|
||||
return true;
|
||||
}
|
||||
|
||||
static void nvenc_defaults(obs_data_t *settings)
|
||||
{
|
||||
obs_data_set_default_int(settings, "bitrate", 2500);
|
||||
obs_data_set_default_int(settings, "keyint_sec", 0);
|
||||
obs_data_set_default_int(settings, "cqp", 23);
|
||||
obs_data_set_default_string(settings, "rate_control", "CBR");
|
||||
obs_data_set_default_string(settings, "preset", "default");
|
||||
obs_data_set_default_string(settings, "profile", "main");
|
||||
obs_data_set_default_string(settings, "level", "auto");
|
||||
obs_data_set_default_bool(settings, "2pass", true);
|
||||
obs_data_set_default_int(settings, "gpu", 0);
|
||||
}
|
||||
|
||||
static bool rate_control_modified(obs_properties_t *ppts, obs_property_t *p,
|
||||
obs_data_t *settings)
|
||||
{
|
||||
const char *rc = obs_data_get_string(settings, "rate_control");
|
||||
bool cqp = astrcmpi(rc, "CQP") == 0;
|
||||
bool lossless = astrcmpi(rc, "lossless") == 0;
|
||||
size_t count;
|
||||
|
||||
p = obs_properties_get(ppts, "bitrate");
|
||||
obs_property_set_visible(p, !cqp && !lossless);
|
||||
p = obs_properties_get(ppts, "cqp");
|
||||
obs_property_set_visible(p, cqp);
|
||||
|
||||
p = obs_properties_get(ppts, "preset");
|
||||
count = obs_property_list_item_count(p);
|
||||
|
||||
for (size_t i = 0; i < count; i++) {
|
||||
bool compatible = (i == 0 || i == 2);
|
||||
obs_property_list_item_disable(p, i, lossless && !compatible);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static obs_properties_t *nvenc_properties(void *unused)
|
||||
{
|
||||
UNUSED_PARAMETER(unused);
|
||||
|
||||
obs_properties_t *props = obs_properties_create();
|
||||
obs_property_t *p;
|
||||
|
||||
p = obs_properties_add_list(props, "rate_control",
|
||||
obs_module_text("RateControl"),
|
||||
OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
|
||||
obs_property_list_add_string(p, "CBR", "CBR");
|
||||
obs_property_list_add_string(p, "VBR", "VBR");
|
||||
obs_property_list_add_string(p, "CQP", "CQP");
|
||||
obs_property_list_add_string(p, obs_module_text("Lossless"),
|
||||
"lossless");
|
||||
|
||||
obs_property_set_modified_callback(p, rate_control_modified);
|
||||
|
||||
obs_properties_add_int(props, "bitrate",
|
||||
obs_module_text("Bitrate"), 50, 300000, 50);
|
||||
|
||||
obs_properties_add_int(props, "cqp", "CQP", 0, 50, 1);
|
||||
|
||||
obs_properties_add_int(props, "keyint_sec",
|
||||
obs_module_text("KeyframeIntervalSec"), 0, 10, 1);
|
||||
|
||||
p = obs_properties_add_list(props, "preset", obs_module_text("Preset"),
|
||||
OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
|
||||
|
||||
#define add_preset(val) \
|
||||
obs_property_list_add_string(p, obs_module_text("NVENC.Preset." val), \
|
||||
val)
|
||||
add_preset("default");
|
||||
add_preset("hq");
|
||||
add_preset("hp");
|
||||
add_preset("bd");
|
||||
add_preset("ll");
|
||||
add_preset("llhq");
|
||||
add_preset("llhp");
|
||||
#undef add_preset
|
||||
|
||||
p = obs_properties_add_list(props, "profile", obs_module_text("Profile"),
|
||||
OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
|
||||
|
||||
#define add_profile(val) \
|
||||
obs_property_list_add_string(p, val, val)
|
||||
add_profile("high");
|
||||
add_profile("main");
|
||||
add_profile("baseline");
|
||||
add_profile("high444p");
|
||||
|
||||
p = obs_properties_add_list(props, "level",
|
||||
obs_module_text("NVENC.Level"), OBS_COMBO_TYPE_LIST,
|
||||
OBS_COMBO_FORMAT_STRING);
|
||||
add_profile("auto");
|
||||
add_profile("1" );
|
||||
add_profile("1.0" );
|
||||
add_profile("1b" );
|
||||
add_profile("1.0b");
|
||||
add_profile("1.1" );
|
||||
add_profile("1.2" );
|
||||
add_profile("1.3" );
|
||||
add_profile("2" );
|
||||
add_profile("2.0" );
|
||||
add_profile("2.1" );
|
||||
add_profile("2.2" );
|
||||
add_profile("3" );
|
||||
add_profile("3.0" );
|
||||
add_profile("3.1" );
|
||||
add_profile("3.2" );
|
||||
add_profile("4" );
|
||||
add_profile("4.0" );
|
||||
add_profile("4.1" );
|
||||
add_profile("4.2" );
|
||||
add_profile("5" );
|
||||
add_profile("5.0" );
|
||||
add_profile("5.1" );
|
||||
#undef add_profile
|
||||
|
||||
obs_properties_add_bool(props, "2pass",
|
||||
obs_module_text("NVENC.Use2Pass"));
|
||||
obs_properties_add_int(props, "gpu", obs_module_text("GPU"), 0, 8, 1);
|
||||
|
||||
return props;
|
||||
}
|
||||
|
||||
static bool nvenc_extra_data(void *data, uint8_t **extra_data, size_t *size)
|
||||
{
|
||||
struct nvenc_encoder *enc = data;
|
||||
|
||||
*extra_data = enc->header;
|
||||
*size = enc->header_size;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool nvenc_sei_data(void *data, uint8_t **extra_data, size_t *size)
|
||||
{
|
||||
struct nvenc_encoder *enc = data;
|
||||
|
||||
*extra_data = enc->sei;
|
||||
*size = enc->sei_size;
|
||||
return true;
|
||||
}
|
||||
|
||||
struct obs_encoder_info nvenc_encoder_info = {
|
||||
.id = "ffmpeg_nvenc",
|
||||
.type = OBS_ENCODER_VIDEO,
|
||||
.codec = "h264",
|
||||
.get_name = nvenc_getname,
|
||||
.create = nvenc_create,
|
||||
.destroy = nvenc_destroy,
|
||||
.encode = nvenc_encode,
|
||||
.get_defaults = nvenc_defaults,
|
||||
.get_properties = nvenc_properties,
|
||||
.get_extra_data = nvenc_extra_data,
|
||||
.get_sei_data = nvenc_sei_data,
|
||||
.get_video_info = nvenc_video_info
|
||||
};
|
||||
|
|
@ -49,6 +49,7 @@ struct ffmpeg_source {
|
|||
char *input;
|
||||
char *input_format;
|
||||
enum AVDiscard frame_drop;
|
||||
enum video_range_type range;
|
||||
int audio_buffer_size;
|
||||
int video_buffer_size;
|
||||
bool is_advanced;
|
||||
|
|
@ -81,6 +82,9 @@ static bool set_obs_frame_colorprops(struct ff_frame *frame,
|
|||
obs_frame->full_range =
|
||||
frame->frame->color_range == AVCOL_RANGE_JPEG;
|
||||
|
||||
if (s->range != VIDEO_RANGE_DEFAULT)
|
||||
obs_frame->full_range = s->range == VIDEO_RANGE_FULL;
|
||||
|
||||
range = obs_frame->full_range ? VIDEO_RANGE_FULL : VIDEO_RANGE_PARTIAL;
|
||||
|
||||
if (!video_format_get_parameters(obs_cs,
|
||||
|
|
@ -265,7 +269,7 @@ static bool audio_frame(struct ff_frame *frame, void *opaque)
|
|||
uint64_t pts;
|
||||
|
||||
// Media ended
|
||||
if (frame == NULL)
|
||||
if (frame == NULL || frame->frame == NULL)
|
||||
return true;
|
||||
|
||||
pts = (uint64_t)(frame->pts * 1000000000.0L);
|
||||
|
|
@ -316,10 +320,12 @@ static bool is_advanced_modified(obs_properties_t *props,
|
|||
obs_property_t *abuf = obs_properties_get(props, "audio_buffer_size");
|
||||
obs_property_t *vbuf = obs_properties_get(props, "video_buffer_size");
|
||||
obs_property_t *frame_drop = obs_properties_get(props, "frame_drop");
|
||||
obs_property_t *color_range = obs_properties_get(props, "color_range");
|
||||
obs_property_set_visible(fscale, enabled);
|
||||
obs_property_set_visible(abuf, enabled);
|
||||
obs_property_set_visible(vbuf, enabled);
|
||||
obs_property_set_visible(frame_drop, enabled);
|
||||
obs_property_set_visible(color_range, enabled);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -345,7 +351,9 @@ static const char *audio_filter =
|
|||
|
||||
static obs_properties_t *ffmpeg_source_getproperties(void *data)
|
||||
{
|
||||
struct ffmpeg_source *s = data;
|
||||
struct dstr filter = {0};
|
||||
struct dstr path = {0};
|
||||
UNUSED_PARAMETER(data);
|
||||
|
||||
obs_properties_t *props = obs_properties_create();
|
||||
|
|
@ -368,10 +376,21 @@ static obs_properties_t *ffmpeg_source_getproperties(void *data)
|
|||
dstr_cat(&filter, obs_module_text("MediaFileFilter.AllFiles"));
|
||||
dstr_cat(&filter, " (*.*)");
|
||||
|
||||
if (s && s->input && *s->input) {
|
||||
const char *slash;
|
||||
|
||||
dstr_copy(&path, s->input);
|
||||
dstr_replace(&path, "\\", "/");
|
||||
slash = strrchr(path.array, '/');
|
||||
if (slash)
|
||||
dstr_resize(&path, slash - path.array + 1);
|
||||
}
|
||||
|
||||
obs_properties_add_path(props, "local_file",
|
||||
obs_module_text("LocalFile"), OBS_PATH_FILE,
|
||||
filter.array, NULL);
|
||||
filter.array, path.array);
|
||||
dstr_free(&filter);
|
||||
dstr_free(&path);
|
||||
|
||||
obs_properties_add_bool(props, "looping", obs_module_text("Looping"));
|
||||
|
||||
|
|
@ -431,6 +450,18 @@ static obs_properties_t *ffmpeg_source_getproperties(void *data)
|
|||
|
||||
obs_property_set_visible(prop, false);
|
||||
|
||||
prop = obs_properties_add_list(props, "color_range",
|
||||
obs_module_text("ColorRange"), OBS_COMBO_TYPE_LIST,
|
||||
OBS_COMBO_FORMAT_INT);
|
||||
obs_property_list_add_int(prop, obs_module_text("ColorRange.Auto"),
|
||||
VIDEO_RANGE_DEFAULT);
|
||||
obs_property_list_add_int(prop, obs_module_text("ColorRange.Partial"),
|
||||
VIDEO_RANGE_PARTIAL);
|
||||
obs_property_list_add_int(prop, obs_module_text("ColorRange.Full"),
|
||||
VIDEO_RANGE_FULL);
|
||||
|
||||
obs_property_set_visible(prop, false);
|
||||
|
||||
return props;
|
||||
}
|
||||
|
||||
|
|
@ -547,6 +578,7 @@ static void ffmpeg_source_update(void *data, obs_data_t *settings)
|
|||
s->restart_on_activate = obs_data_get_bool(settings,
|
||||
"restart_on_activate");
|
||||
s->is_forcing_scale = true;
|
||||
s->range = VIDEO_RANGE_DEFAULT;
|
||||
|
||||
if (is_advanced) {
|
||||
s->audio_buffer_size = (int)obs_data_get_int(settings,
|
||||
|
|
@ -557,6 +589,8 @@ static void ffmpeg_source_update(void *data, obs_data_t *settings)
|
|||
"frame_drop");
|
||||
s->is_forcing_scale = obs_data_get_bool(settings,
|
||||
"force_scale");
|
||||
s->range = (enum video_range_type)obs_data_get_int(settings,
|
||||
"color_range");
|
||||
|
||||
if (s->audio_buffer_size < 1) {
|
||||
s->audio_buffer_size = 1;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#include <obs-module.h>
|
||||
#include <util/darray.h>
|
||||
#include <util/platform.h>
|
||||
#include <libavutil/log.h>
|
||||
#include <libavcodec/avcodec.h>
|
||||
#include <pthread.h>
|
||||
|
||||
OBS_DECLARE_MODULE()
|
||||
|
|
@ -10,6 +12,7 @@ extern struct obs_source_info ffmpeg_source;
|
|||
extern struct obs_output_info ffmpeg_output;
|
||||
extern struct obs_output_info ffmpeg_muxer;
|
||||
extern struct obs_encoder_info aac_encoder_info;
|
||||
extern struct obs_encoder_info nvenc_encoder_info;
|
||||
|
||||
static DARRAY(struct log_context {
|
||||
void *context;
|
||||
|
|
@ -111,6 +114,27 @@ cleanup:
|
|||
destroy_log_context(log_context);
|
||||
}
|
||||
|
||||
static bool nvenc_supported(void)
|
||||
{
|
||||
AVCodec *nvenc = avcodec_find_encoder_by_name("nvenc_h264");
|
||||
void *lib = NULL;
|
||||
|
||||
if (!nvenc)
|
||||
return false;
|
||||
|
||||
#if defined(_WIN32)
|
||||
if (sizeof(void*) == 8) {
|
||||
lib = os_dlopen("nvEncodeAPI64.dll");
|
||||
} else {
|
||||
lib = os_dlopen("nvEncodeAPI.dll");
|
||||
}
|
||||
#else
|
||||
lib = os_dlopen("libnvidia-encode.so.1");
|
||||
#endif
|
||||
os_dlclose(lib);
|
||||
return !!lib;
|
||||
}
|
||||
|
||||
bool obs_module_load(void)
|
||||
{
|
||||
da_init(active_log_contexts);
|
||||
|
|
@ -122,6 +146,10 @@ bool obs_module_load(void)
|
|||
obs_register_output(&ffmpeg_output);
|
||||
obs_register_output(&ffmpeg_muxer);
|
||||
obs_register_encoder(&aac_encoder_info);
|
||||
if (nvenc_supported()) {
|
||||
blog(LOG_INFO, "NVENC supported");
|
||||
obs_register_encoder(&nvenc_encoder_info);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue