BookTranslator
BookTranslator

چگونه زیرنویس دوزبانه بسازیم: دو زبان در یک فایل SRT یا VTT

یک فایل SRT یا VTT دوزبانه قابل خواندن بسازید: بر اساس زمان ادغام کنید، دو زبان را در یک زیرنویس جای دهید، انتخاب کنید کدام بالا باشد و با یک بررسی‌کننده رایگان آزمایش کنید.

BookTranslator

BookTranslator Team

12 دقیقه مطالعه

برای ساخت زیرنویس دوزبانه، به یک فایل زیرنویس زمان‌بندی‌شده، ترجمه‌ای از آن با همان زمان‌بندی، و یک زیرنویس برای هر لحظه نیاز دارید که هر دو زبان را در خود جای دهد: ابتدا خطوط زبان اصلی، سپس خطوط ترجمه‌شده، زیر یک برچسب زمان. هر مترجمی که فایل دوزبانه می‌نویسد این کار را برای شما انجام می‌دهد، و اگر از قبل دو فایل دارید، یک ابزار ادغام این کار را می‌کند. SRT ساده برای این کار به نحو خاصی نیاز ندارد.

ساختن فایل بخش آسان ماجراست. بخش سخت‌تر این است که زمان‌بندی برای یک زبان نوشته شده بود. زیرنویسی که دو خط انگلیسی را در خود جای می‌داد، حالا باید چهار خط را در همان چند ثانیه و روی همان تصویر نگه دارد. بنابراین این راهنما بیشتر وقت خود را صرف آنچه پس از ادغام باید اصلاح شود می‌کند.

ما یک فایل آزمایشی ۱۲ زیرنویسی نوشتیم، نسخه‌های اسپانیایی، چینی و عربی را تولید کردیم و یک بررسی‌کننده رایگان نوشتیم. فایل‌ها از کد زیرنویس‌نویسی خود BookTranslator گرفته شده‌اند که به‌صورت محلی اجرا شد. ترجمه‌ها را به‌جای فراخوانی یک مدل، دستی نوشتیم، بنابراین این آزمایش‌ها نشان می‌دهند چه اتفاقی برای فایل می‌افتد، نه اینکه ترجمه چقدر خوب است. جزئیات در README آمده است. بررسی‌کننده به Python 3 و هیچ چیز دیگری نیاز ندارد.

پاسخ سریع: یک زیرنویس دوزبانه چه شکلی است

2
00:00:03,400 --> 00:00:06,600
There's another one at six,
but the station closes at midnight.
Hay otro a las seis,
pero la estación cierra a medianoche.

این SRT معتبر است. هر زیرنویس شماره و برچسب زمان خود را حفظ می‌کند و هر خط متن زیر برچسب زمان با هم روی صفحه ظاهر می‌شوند. WebVTT هم به همین شکل کار می‌کند.

ابتدا روش را انتخاب کنید

می‌خواهیداز این استفاده کنیددلیل
در تقریباً هر پخش‌کننده‌ای تماشا کنید، یا یک فایل را برای کسی بفرستیدیک SRT ادغام‌شدهاین یک فایل زیرنویس معمولی است و به قابلیت خاصی در پخش‌کننده نیاز ندارد
روی رایانه خودتان با کنترل هر زبان تماشا کنیددو فایل جداگانه در پخش‌کننده‌ای با پشتیبانی از دو مسیرهر زبان زمان‌بندی خود را حفظ می‌کند و می‌توان آن را جابه‌جا یا خاموش کرد
زبان‌ها را با اندازه‌های مختلف در یک صفحه وب نمایش دهیدیک VTT با یک کلاس برای هر زبانWebVTT استایل‌دهی دارد؛ SRT هیچ روش استانداردی برای این کار ندارد
ویدیویی منتشر کنید که همه‌جا یکسان به نظر برسدزیرنویس سوختهمتن بخشی از تصویر می‌شود و بینندگان نمی‌توانند آن را خاموش کنند

برای دو مسیر، mpv گزینه‌ای به نام --secondary-sid دارد. راهنمای آن می‌گوید مسیر دوم به‌طور پیش‌فرض در بالای صفحه رسم می‌شود، که زبان‌ها را از هم جدا نگه می‌دارد. ما خودمان mpv را آزمایش نکردیم.

برای سوزاندن زیرنویس روی تصویر، فیلتر subtitles در FFmpeg به نسخه‌ای نیاز دارد که با libass ساخته شده باشد. نسخهٔ FFmpeg 9.0.1 که برای این آزمایش نصب کردیم، آن را نداشت، پس قبل از برنامه‌ریزی برای این کار، دستور ffmpeg -filters | grep subtitles را اجرا کنید. ما سوزاندن زیرنویس را آزمایش نکردیم.

مرحله ۱: دو زبان را در یک فایل قرار دهید

اگر یک فایل دارید، آن را با ابزاری ترجمه کنید که فایل دوگانه می‌سازد. BookTranslator این کار را برای هر کار SRT و VTT انجام می‌دهد: یک فایل ترجمه‌شده و یک فایل دوزبانه با همان زمان‌بندی دریافت می‌کنید و می‌توانید از مترجم زیرنویس شروع کنید. اگر ابتدا باید ابزاری انتخاب کنید، مقایسهٔ نرم‌افزارهای زیرنویس ما را ببینید.

اگر دو فایل دارید، آن‌ها را بر اساس زمان جفت کنید، نه بر اساس شمارهٔ زیرنویس. اینجاست که ادغام اشتباه می‌شود، چون دو تراک از یک ویدیو به‌ندرت خطوط را یکسان تقسیم می‌کنند. تراک دوم اسپانیایی ما دو زیرنویس بلند را به دو نیم تقسیم می‌کند و جلوهٔ صوتی، سال و موسیقی را حذف می‌کند.

python3 check_bilingual_subs.py merge sample-source.srt sample-es-own-timing.srt -o merged.srt

جفت‌کردن بر اساس شمارهٔ زیرنویس (گزینهٔ --index اسکریپت) ۱۰ زیرنویس از ۱۲ زیرنویس را اشتباه جفت کرد، از زیرنویس ۲ شروع شد، جایی که نیمی از اسپانیایی گم شد. تا زیرنویس ۳، ترجمه به خط دیگری تعلق داشت:

3
00:00:06,800 --> 00:00:08,000
So where do we wait?
pero la estación cierra a medianoche.

جفت‌کردن بر اساس زمان ترجمهٔ درست را زیر ۹ زیرنویس داد، ۳ زیرنویس بدون اسپانیایی را دست‌نخورده گذاشت و آن یک خط اسپانیایی را که با هیچ‌چیز مطابقت نداشت گزارش کرد تا بتوانید دستی آن را قرار دهید. اسکریپت زیرنویس تراک دوم را به زیرنویس تراک اولی که بیشترین همپوشانی را دارد می‌دهد، به شرطی که حداقل نیمی از طول آن را بپوشاند. ابزارهایی مانند submerger هم فایل‌ها را ادغام می‌کنند؛ ما آن‌ها را آزمایش نکردیم. هر چه استفاده می‌کنید، زیرنویس‌های بعد از اولین تقسیم را بررسی کنید.

مرحله ۲: فایل را بررسی کنید

python3 check_bilingual_subs.py check sample-source.srt sample-es-bilingual.srt --max-target-cps 17

فایل دوزبانه را با منبع مقایسه می‌کند و فرض می‌کند خطوط اصلی اول می‌آیند، پس قبل از جابه‌جایی ترتیب آن را اجرا کنید. اگر خطوط بالا با منبع مطابقت نداشته باشند هشدار می‌دهد. این چیزی است که در فایل اسپانیایی پیدا کرد:

زیرنویسثانیهخطوطکاراکتر/ثانیه اصلیکاراکتر/ثانیه اسپانیاییمشکل
23.2419.417.8چهار خط، اسپانیایی خیلی سریع
52.726.77.0' در متن
71.024.04.0متن یکسان دو بار
81.821.71.7متن یکسان دو بار
91.2420.822.5چهار خط، هر دو زبان خیلی سریع
103.6218.319.4هر دو خط بیش از ۴۲ کاراکتر، اسپانیایی خیلی سریع

زیرنویس‌های ۶ و ۱۲ هم با چهار خط برگشتند. چهار زیرنویس دیگر خوب بودند.

محدودیت‌های سرعت و طول خط از نتفلیکس می‌آید، چون اعدادش عمومی و مشخص است و بر اساس زبان متفاوت است. راهنمای انگلیسی آن ۴۲ کاراکتر در هر خط، دو خط و حداکثر ۲۰ کاراکتر در ثانیه برای برنامه‌های بزرگسالان را مجاز می‌داند. راهنمای اسپانیایی آمریکای لاتین آن ۱۷ کاراکتر در ثانیه برای زیرنویس‌های ترجمه‌شده مجاز می‌داند و راهنمای چینی ساده‌شده آن ۱۶ کاراکتر در هر خط و ۹ کاراکتر در ثانیه را مجاز می‌داند. پس برای چینی از --max-target-line 16 --max-target-cps 9 استفاده کنید. آن راهنماها هر بار یک زبان را با حداکثر دو خط پوشش می‌دهند. ما استاندارد معادلی برای دو زبان در یک زیرنویس نمی‌شناسیم، بنابراین پیش‌فرض بررسی‌کننده یعنی سه خط روی صفحه و همه‌چیز در بخش بعدی، قضاوت خود ماست.

بررسی‌کننده یک عدد ترکیبی هم چاپ می‌کند که در زیرنویس ۹ به ۴۳٫۳ کاراکتر در ثانیه رسید. سعی نکنید آن عدد را درست کنید. هیچ‌کس همهٔ کاراکترهای هر دو زبان را با توجه کامل نمی‌خواند. آن را نشانگری برای زیرنویس‌هایی بدانید که ارزش بررسی دارند.

مرحله ۳: زیرنویس‌های چهارخطی را اصلاح کنید

این همان هزینهٔ چهار خط است. در نمایشگر زیرنویس داخلی کرومیوم با ابعاد ۱۲۸۰×۷۲۰، زیرنویس انگلیسی دوخطی ۱۰٫۶٪ از ارتفاع کادر را اشغال کرد و همان زیرنویس با افزودن اسپانیایی ۲۱٫۹٪ را گرفت.

زیرنویس انگلیسی دوخطی در پایین یک کادر آزمایشی سادهٔ ۱۲۸۰ در ۷۲۰، با سبک پیش‌فرض زیرنویس کرومیوم.

همان زیرنویس با افزودن دو خط اسپانیایی، که حدود یک‌پنجم ارتفاع کادر را می‌پوشاند.

زیرنویس‌های علامت‌خورده را به این ترتیب بررسی کنید:

  1. زبان صدا را کلمه‌به‌کلمه نگه دارید. اگر مخاطب به صدای اصلی گوش می‌دهد و متن را دنبال می‌کند، نسخهٔ کوتاه‌شدهٔ زبان اصلی دیگر با آنچه می‌شنود همخوانی ندارد.
  2. زبان دیگر را به یک خط کاهش دهید. زیرنویس ۲ ما از ۱۷٫۸ نویسه در ثانیه به ۱۳٫۱ می‌رسد وقتی اسپانیایی به A las seis hay otro; cierran a medianoche. تبدیل شود. این یعنی سه خط روی صفحه به‌جای چهار خط، و هر دو واقعیت حفظ می‌شوند.
  3. فقط در صورت وجود فاصله زمانی اضافه کنید. پیش از جابه‌جایی زمان پایان، زمان شروع زیرنویس بعدی را بررسی کنید. زیرنویس ۲ فقط ۰٫۲ ثانیه جای خالی دارد که ارزش تلاش را ندارد.
  4. بقیه را رها کنید. زیرنویس ۹ شامل You knew? / Since March. در ۱٫۲ ثانیه است. این زیرنویس محدودیت سرعت و تعداد خط را نقض می‌کند، اما آن را رها می‌کنیم: فاصلهٔ ۰٫۲ ثانیه‌ای پس از آن بسیار کوتاه است که کمکی کند، و بیننده احتمالاً می‌تواند دو پاسخ کوتاه را در یک نگاه ببیند. هر علامتی نشانهٔ اشکال نیست.

برای خطوط بلند تک‌خطی مانند زیرنویس ۱۰، هر زبان را فقط در صورتی به دو خط بشکنید که زیرنویس زمان کافی داشته باشد. در غیر این صورت ترجمه را کوتاه کنید.

اگر کنترل نمایش را در دست دارید، می‌توانید تشخیص یک زبان را آسان‌تر کنید. to-vtt را اجرا کنید تا به هر زبان کلاس جداگانه بدهد. فایل حاصل در کرومیوم با اندازهٔ ۸۰٪ و رنگ خاکستری روشن برای انگلیسی رندر شد. این کار تقریباً هیچ فضایی صرفه‌جویی نمی‌کند (۲۱٫۱٪ از ارتفاع کادر به‌جای ۲۱٫۹٪)، بنابراین جایگزین حذف یک خط نیست. ما آزمایش نکردیم که آیا به خواندن افراد کمک می‌کند یا نه.

زیرنویس چهارخطی با خطوط انگلیسی کوچک‌تر و خاکستری‌تر از خطوط اسپانیایی.

این روش از کلاس‌های زیرنویس WebVTT و انتخابگر ::cue() استفاده می‌کند. برای مرورگرها در نظر گرفته شده است. پخش‌کننده‌های دیگر ممکن است سبک‌ها یا فایل VTT را نادیده بگیرند.

مرحله ۴: تصمیم بگیرید کدام زبان بالا باشد

پژوهش‌هایی در این زمینه وجود دارد. در یک مطالعهٔ ردیابی چشم در سال ۲۰۲۶ روی ۴۲ اسپانیایی‌زبان بومی با انگلیسی به‌عنوان زبان دوم، بینندگان زمان بیشتری را صرف خط بالا کردند، صرف‌نظر از زبان آن، و زمان بیشتری را صرف خطی کردند که با صدا همخوانی داشت. نمرات درک مطلب وقتی اسپانیایی، زبان اول آن‌ها، بالا بود بالاتر بود. یک مطالعهٔ پیشین روی ۱۱۲ زبان‌آموز چینی زبان انگلیسی نشان داد زیرنویس دوزبانه به اندازهٔ زیرنویس به زبان اولشان به درک مطلب کمک می‌کند، و هر دو بهتر از زیرنویس انگلیسی یا بدون زیرنویس بودند.

این‌ها مطالعاتی منفرد روی گروه‌های خاصی از بینندگان هستند، پس آن‌ها را نقطهٔ شروع در نظر بگیرید:

  • دنبال کردن محتوای یک فیلم یا سخنرانی: زبانی را که بهتر می‌خوانید بالا بگذارید.
  • تمرین زبانی که در حال یادگیری آن هستید: آن زبان را بالا بگذارید و بپذیرید که ممکن است کمی کمتر متوجه شوید. مطالعهٔ ۲۰۲۶ درک مطلب را سنجیده، نه یادگیری را، پس این مورد قضاوت خود ماست.
  • بازبینی یک ترجمه: ترتیب اهمیت کمی دارد، پس آن را رها کنید.

فایل دوزبانهٔ BookTranslator همیشه زبان اصلی را بالا می‌گذارد. برای جابه‌جایی:

python3 check_bilingual_subs.py flip sample-source.srt sample-es-bilingual.srt -o translation-on-top.srt

چه چیزهایی اشتباه برمی‌گردند و چگونه رفعشان کنیم

این موارد از اجرای کد زیرنویس BookTranslator روی فایل‌های آزمایشی ما به دست آمده‌اند، و بررسی‌کننده دو مورد اول را علامت می‌زند.

  • متنی که نیازی به ترجمه ندارد دو بار ظاهر می‌شود. 1984 و ♪ ♪ به‌عنوان بدون کلمهٔ قابل ترجمه رد می‌شوند، بنابراین فایل دوزبانه هر یک را دو بار چاپ می‌کند. یک خط را دستی حذف کنید.
  • &apos; ممکن است در متن ظاهر شود. تا نوامبر ۲۰۲۶، زیرنویسی با تگ‌های قالب‌بندی و یک آپاستروف ممکن است با آپاستروف فرار داده‌شده برگردد. خط اصلی ما در فایل دوزبانه به <i>Don&apos;t answer that.</i> تبدیل شد، و در یک آزمایش جداگانهٔ VTT یک ترجمهٔ فرانسوی نیز در فایل ترجمه‌شده به <i>Je n&apos;attendrai pas.</i> تبدیل شد. کرومیوم آن را در VTT رمزگشایی کرد و آپاستروف عادی نشان داد. اما وقتی SRT را با FFmpeg تبدیل کردیم، &apos; در متن خروجی باقی ماند، پس فرض کنید برخی پخش‌کننده‌ها آن را عیناً نشان می‌دهند. پیش از استفاده از فایل، &apos; را با ' جایگزین کنید. این مورد را به مهندسان خود گزارش داده‌ایم.
  • تنظیمات زیرنویس VTT حذف می‌شوند. تنظیمات موقعیت مانند line:0 align:start position:10% و بلوک‌های NOTE از خروجی آزمایشی VTT ما ناپدید شده بودند، و برچسب‌های گوینده روی هر دو خط ظاهر شدند. اگر VTT شما به موقعیت‌دهی وابسته است، پس از ترجمه آن را دوباره اضافه کنید.
  • متن راست‌به‌چپ خط به خط علامت‌گذاری می‌شود. خطوط عربی با نشانه‌های جهت یونیکد برگشتند. ما فقط یک زیرنویس را در یک نسخه VTT از فایل در Chromium بررسی کردیم و راست‌به‌چپ نمایش داده شد. خطوطی که عربی را با اعداد ترکیب می‌کنند، مانند زیرنویس ۱۰ ما، حالت سخت‌تر هستند و ما آن‌ها را ندیدیم، پس در پخش‌کننده واقعی خودتان آزمایش کنید. SRT راه دیگری برای تعیین جهت ندارد. راهنمای راست‌به‌چپ ما مسائل گسترده‌تر برای کتاب‌ها را پوشش می‌دهد.

اگر منبع شما ASS یا SSA است، خروجی دوزبانه BookTranslator خط ترجمه‌شده را به عنوان رویداد دوم با همان سبک و زمان‌بندی اضافه می‌کند، که ساختار متفاوتی است. راهنمای زیرنویس ASS ما توضیح می‌دهد که این فایل‌ها چگونه ساخته می‌شوند. اگر حروف دارای اعراب در هر یک از دو زبان خراب به نظر می‌رسند، مشکل معمولاً کدگذاری فایل است که راهنمای کدگذاری زیرنویس ما آن را پوشش می‌دهد.

پیش از اشتراک‌گذاری فایل

  1. بررسی‌کننده را اجرا کنید و هر زیرنویس علامت‌گذاری‌شده را مرور کنید.
  2. &apos;، &amp; و &quot; را پیدا کنید و جایگزین کنید.
  3. خطوط تکراری مربوط به جلوه‌های صوتی، اعداد و موسیقی را حذف کنید.
  4. پرترافیک‌ترین چند دقیقه را در پخش‌کننده‌ای که بینندگان شما استفاده می‌کنند و در اندازه صفحه‌ای که آن‌ها استفاده می‌کنند تماشا کنید.
  5. بررسی کنید که خطوط پایین متن روی صفحه ویدیو را نپوشانند.
  6. ترجمه را در بافت بخوانید. گردش کار زیرنویس هوش مصنوعی ما نحوه بازبینی آن را پوشش می‌دهد.

SRT یا VTT آماده دارید؟ آن را در مترجم زیرنویس بارگذاری کنید و قیمت را قبل از پرداخت ببینید. وقتی تمام شد، فایل دوزبانه را همراه با فایل ترجمه‌شده دانلود کنید. سپس بررسی‌کننده را روی آن اجرا کنید، چون تعداد خطوط در یک کار واقعی به نحوه شکستن هر زیرنویس ترجمه‌شده توسط مدل بستگی دارد.

مطالب مرتبط