כולם טובים ונחמדים אבל לענ"ד עדין הפתרון שלי הכי מהיר
תחשוב על מי שנכנס לחד"מ לשתי דקות ורוצה רק להציץ במייל
במקום לפתוח תוכנות ולהקליד סיסמאות, הוא מקליק על התוכנה שלי וזהו!
לאחר שנחשפתי לפתרון המוצלח של @מדהים - AppCode בניתי סקריפט קטן (כמובן בעזרת AI) שעושה את אותה עבודה אבל בשתי שניות וללא צורך בחיוג לשום מערכת!
הפתרון הוא בעצם קובץ exe שנמצא אצלכם באונקי או בכל מקום אחר ויוצר את קוד האימות בשתי שניות!
כמו אצל @מדהים גם כאן הפתרון מועיל רק למי שכבר יש לו חשבון והוא נמצא בתוכו!!!
אם הקובץ נופל לידים זרות אין להם מה לעשות איתו בלי הסיסמא של החשבון
צרו בפנקס רשימות קובץ בשם mykey.py והדביקו בו את הקוד הבא
import pyotp
import pyperclip
import sys
# הכנס את הסוד שלך כאן בתוך הגרשיים וללא רווחים
my_secret = "JBSWY3DPEHPK3PXP"
try:
# יצירת אובייקט TOTP
totp = pyotp.TOTP(my_secret)
# חישוב הקוד הנוכחי
current_code = totp.now()
# העתקה ללוח
pyperclip.copy(current_code)
except Exception as e:
# במקרה של תקלה (נדיר)
sys.exit(1)
שימו לב להכניס את ה"סוד" של גוגל, במקום המתאים וללא רווחים
שמרו את הקוד
שלב 4:
הריצו ב-cmd את הפקודה הבאה בתוך התיקיה בה שמרתם את קובץ ה-py
pyinstaller --onefile --noconsole mykey.py
בתיקייה בה שמרתם את קובץ ה-py תיווצר תיקיה בשם dist ובתוכה יהיה קובץ exe שבלחיצה כפולה ייצר עבורכם קוד וישמור אותו ב"לוח" המחשב
לכם רק נותר ללחוץ קונטרול+V בחלון של גוגל...
דרך 2 (#C)
צרו קובץ טקסט מהקוד הבא ותנו לו את השם והסיומת myotp.cs
(הכניסו את ה"סוד" שלכם במקום המתאים
using System;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
class Program {
[STAThread]
static void Main() {
string secret = "הכניסו כאן את ה''סוד'' שלכם ללא רווחים";
try {
byte[] key = Base32Decode(secret);
long counter = DateTimeOffset.UtcNow.ToUnixTimeSeconds() / 30;
string code = GenerateTOTP(key, counter);
Clipboard.SetText(code);
} catch {}
}
static string GenerateTOTP(byte[] key, long counter) {
byte[] counterBytes = BitConverter.GetBytes(counter);
if (BitConverter.IsLittleEndian) Array.Reverse(counterBytes);
using (HMACSHA1 hmac = new HMACSHA1(key)) {
byte[] hash = hmac.ComputeHash(counterBytes);
int offset = hash[hash.Length - 1] & 0xf;
int binary = ((hash[offset] & 0x7f) << 24) |
((hash[offset + 1] & 0xff) << 16) |
((hash[offset + 2] & 0xff) << 8) |
(hash[offset + 3] & 0xff);
int otp = binary % 1000000;
return otp.ToString("D6");
}
}
static byte[] Base32Decode(string input) {
input = input.Trim().ToUpper();
var bits = "";
string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
foreach (char c in input) {
int val = alphabet.IndexOf(c);
if (val >= 0) bits += Convert.ToString(val, 2).PadLeft(5, '0');
}
int byteCount = bits.Length / 8;
byte[] bytes = new byte[byteCount];
for (int i = 0; i < byteCount; i++) {
bytes[i] = Convert.ToByte(bits.Substring(i * 8, 8), 2);
}
return bytes;
}
}
מעלים את הקובץ (עדיף להמיר לקובץ אודיו ואותו להעלות) למנוע AI כלשהו (אני משתמש ב-GMINI) ומבקשים ממנו לתמלל את הקובץ המצורף בפורמט srt ושיתרגם את הכתוביות לעברית
מהטקסט שיתקבל יוצרים קובץ srt:
פותחים "פנקס רשימות" ומדביקים את הטקסט שהמודל החזיר
הטקסט חייב להיות מסודר כך:
שורה ראשונה מספר הכתוביות
שורה שניה הזמנים בהם היא תוצג
שורה שלישית תוכן הכתובית
דוגמה למבנה:
1
00:00:02,500 --> 00:00:06,850
שלום לכולם וברוכים הבאים לפודקאסט שלנו.
2
00:00:07,100 --> 00:00:10,300
היום נדבר על נושא מרתק במיוחד.
3
00:00:11,000 --> 00:00:14,500
אבל לפני שנתחיל, בואו נציג את האורח שלנו.
הסבר הדוגמה:
כתובית מספר 1: תופיע על המסך 2.5 שניות מתחילת הסרטון, ותיעלם לאחר 6.850 שניות מתחילת הסרטון.
כתובית מספר 2: תופיע אחרי 7.1 שניות ותיעלם אחרי 10.3 שניות.
כתובית מספר 3: מורכבת משתי שורות טקסט ותוצג בין 11 שניות ל-14.5 שניות.
שומרים את הקובץ עם אותו שם בדיוק כמו הסרטון ובאותה תיקיה אבל כקובץ srt (אפשר לשמור רגיל ואז לשנות את שלוש האותיות האחרונות בשם הקובץ מ-txt ל-srt)
אם תפעילו את הסרטון בתוכנת VLC הכתוביות יוצגו על גבי הוידיאו
כדי להטמיע את הכתוביות בתוך הסרטון כך שיראו אותם בכל תוכנה בה תפעילו את הוידיאו
ניתן להשתמש בקוד BAT הבא (יש צורך בFFMPEG ובקובץ hecho.exe באותה תיקיה ביחד עם הסקריפט)
@echo off
chcp 1255 >nul
echo גרור קובץ וידיאו לכאן ואז הקש Enter: | hecho -b
set /p "videoPath="
REM הסרת מרכאות כפולות מהנתיב
set "videoPath=%videoPath:"=%"
if not exist "%videoPath%" (
echo שגיאה: קובץ הווידאו לא קיים בנתיב שסופק. | hecho -b
pause
exit
)
echo הנתיב של קובץ הווידאו הוא: "%videoPath%" | hecho -b
echo גרור קובץ כתוביות (SRT) לכאן ואז הקש Enter: | hecho -b
set /p "srtPath="
REM הסרת מרכאות כפולות מהנתיב
set "srtPath=%srtPath:"=%"
if not exist "%srtPath%" (
echo שגיאה: קובץ הכתוביות לא קיים בנתיב שסופק. | hecho -b
pause
exit
)
echo הנתיב של קובץ הכתוביות הוא: "%srtPath%" | hecho -b
REM הכנת נתיב הכתוביות עבור FFmpeg (החלפת \ ב-\\)
set "ffmpegSrtPath=%srtPath:\=\\%"
REM פירוק נתיב קובץ הווידאו המקורי כדי ליצור שם לקובץ הפלט
for %%F in ("%videoPath%") do (
set "filePath=%%~dpF"
set "fileName=%%~nF"
set "fileExt=%%~xF"
)
REM הרכבת שם קובץ הפלט החדש
set "outputPath=%filePath%%fileName% (כתוביות)%fileExt%"
echo מתחיל בתהליך הטמעת הכתוביות... | hecho -b
REM הרצת פקודת FFmpeg עם הנתיבים המתוקנים ושם הפלט הדינמי
ffmpeg -i "%videoPath%" -vf "subtitles='%ffmpegSrtPath%':charenc=UTF-8" -c:v libx264 -crf 22 -c:a copy "%outputPath%" >>nul 2>&1
echo התהליך הסתיים! הקובץ החדש נשמר ב: | hecho -b
echo "%outputPath%"
pause