ডিফল্টরূপে দেখানো উচিত এমন একটি উপশিরোনাম ট্র্যাক নির্দিষ্ট করার জন্য ffmpeg এ কী বিকল্প আছে?


3

আমার কাছে এমপি 4 ফর্ম্যাটে একটি ভিডিও রয়েছে যা মূলত ইংরেজি ভাষা, তবে একটি দৃশ্যে একটি চরিত্র অন্য ভাষায় কথা বলে। এই চরিত্রটির কথোপকথনের জন্য আমার কাছে এসআরটি ফর্ম্যাটে একটি ইংলিশ সাবটাইটেল ট্র্যাক রয়েছে। এমপি 4-এ নিজেই সাবটাইটেল ট্র্যাক এম্বেড করা এবং ম্যানুয়ালি এটি চালু না করে এটি ডিফল্টরূপে চালু করা কি সম্ভব? কমান্ডটি দিয়ে আমি বর্তমানে (নীচে) ব্যবহার করছি, সাবটাইটেল ট্র্যাকটি ফাইলটিতে যুক্ত করা হয়েছে, তবে ভিডিওটি প্লে করার সময় আমাকে নিজেই এটি নির্বাচন করতে হবে।

ffmpeg -i movie.mp4 -i movie.srt -c:v copy -c:a copy -c:s mov_text \
  -metadata:s:s:0 language=eng movie-sub.mp4

ডিফল্টরূপে সাবগুলি দেখানোর জন্য আমাকে আরও কিছু মেটাটাটা যুক্ত করতে হবে? আমি যদি সম্ভব হয় তবে কঠোর পরিহার করতে চাই। এটি যদি এমপি 4 ধারকটির সীমাবদ্ধতা হয় তবে আমি এমকেভি-র মতো অন্য ফর্ম্যাটে স্যুইচিংয়ের সাথে ভাল থাকব।

Ffmpeg থেকে আউটপুট:

ffmpeg version 2.1.1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Dec 31 2013 15:44:02 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
  configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-avresample --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-libtheora --enable-libschroedinger --enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libspeex --enable-libass --enable-libbluray --enable-gnutls --enable-libfreetype --disable-indev=jack --disable-outdev=xv --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/clang --arch=x86_64 --enable-yasm --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-nonfree --enable-libfaac
  libavutil      52. 48.101 / 52. 48.101
  libavcodec     55. 39.101 / 55. 39.101
  libavformat    55. 19.104 / 55. 19.104
  libavdevice    55.  5.100 / 55.  5.100
  libavfilter     3. 90.100 /  3. 90.100
  libavresample   1.  1.  0 /  1.  1.  0
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'movie.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2013-03-18 08:10:43
  Duration: 01:37:23.05, start: 0.000000, bitrate: 1877 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1683 kb/s, 23.98 fps, 23.98 tbr, 48k tbn, 47.95 tbc (default)
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 191 kb/s (default)
Input #1, srt, from 'movie.srt':
  Duration: N/A, bitrate: N/A
    Stream #1:0: Subtitle: subrip
Output #0, mp4, to 'movie-sub.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    encoder         : Lavf55.19.104
    Stream #0:0(und): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720, q=2-31, 1683 kb/s, 23.98 fps, 48k tbn, 48k tbc (default)
    Stream #0:1(und): Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, 191 kb/s (default)
    Stream #0:2(eng): Subtitle: mov_text ([8][0][0][0] / 0x0008)
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
  Stream #1:0 -> #0:2 (subrip -> mov_text)
Press [q] to stop, [?] for help
frame=140093 fps=9457 q=-1.0 Lsize= 1340911kB time=01:37:23.04 bitrate=1880.0kbits/s    
video:1200658kB audio:136946kB subtitle:0 global headers:0kB muxing overhead 0.247196%

আপনি কোন খেলোয়াড় (গুলি) পরীক্ষা করেছেন?
লোগান

আমি কুইকটাইম এবং ভিএলসি চেষ্টা করেছি। উভয়ই আমাকে নিজেই সাবটাইটেল ট্র্যাকটি নির্বাচন করতে চেয়েছিলেন।
শান

আমি মনে করি এটি খেলোয়াড়ের উপর নির্ভর করে। আমার ভিএলসি আসলে ডিফল্টরূপে সমস্ত সাবটাইটেল প্রদর্শন করবে। আমার মনে আছে আমাকে সর্বদা সেগুলি বন্ধ করে দিতে হয়েছিল। আপনি কি ফাইলটির একটি সংক্ষিপ্ত অনুলিপি তৈরি করতে ffmpeg -i movie-sub.mp4 -c copy -map 0 -t 1 out.mp4এবং এটি কোথাও আপলোড করতে পারেন?

উত্তর:


1

না, একটি সাবটাইটেল ট্র্যাক নির্দিষ্ট করার জন্য ffmpeg এ কোনও বিকল্প নেই যা ডিফল্টরূপে দেখানো উচিত।

(ffmpeg সংস্করণ 2.6.1 gcc 4.9.2 দিয়ে নির্মিত (জিসিসি) 20150304 (প্রিরিলিজ) আর্কে ডিফল্ট হিসাবে, ফ্ল্যাগগুলির সংকলনের উত্তরটির শেষ দেখুন)

Ffmpeg এ ডিফল্ট / জোরপূর্বক সাবটাইটেল স্ট্রিম সেট করার জন্য কমান্ড লাইন বিকল্পের অভাব হাইলাইট করার সংস্থানগুলিতে নিম্নলিখিতগুলি অন্তর্ভুক্ত করা হয়েছে:

অবশেষে, স্ট্যাকওভারফ্লোতে এই প্রশ্নটি আপনার মতোই এমকেভির জন্য জিজ্ঞাসা করে, এবং এফফেম্পেগ অপরাধী হওয়ায় এমকিভিপ্রোপাইডিট ( এমকেভ্টোলনিক্সের অংশ ) এটি করতে পারে বলে হাইলাইট করে।

যাইহোক, একটি সম্ভাব্য workaround আছে

এই মার্চ 2013 ffmpeg বাগ রিপোর্ট (এখনও খোলা) সাবটাইটেলগুলির জন্য এমকেভি এবং ডিফল্ট পতাকা ব্যবহার করে এবং এমন কিছু ব্যাখ্যা করে যা আমরা কিছু পরিস্থিতিতে এই সীমাবদ্ধতাটি ছিন্ন করতে ব্যবহার করতে পারি:

ম্যাট্রোস্কা স্পেসিফিকেশন - â € ros http://matroska.org/technical/specs/index.html (ফ্ল্যাগডিফল্টের জন্য অনুসন্ধান) - নির্দিষ্ট করে যে ডিফল্ট পতাকার মান "ডিফল্ট" যদি নির্দিষ্ট না হয় তবে ডেমোক্সার সমস্ত চিহ্নিত করে "ডিফল্ট" হিসাবে সাবটাইটেল ট্র্যাকগুলি।

সুতরাং ffmpeg আমাদের সাবটাইটেল প্রবাহে কিছু ক্ষেত্রে ডিফল্ট পতাকা লিখতে পারে ; আমি এটি বিভিন্ন ইনপুট ভিডিও ফাইল দিয়ে চেষ্টা করেছি এবং মিশ্র ফলাফল পেয়েছি:

  • সঙ্গে বিগ বাক খরগোশের হলো AVI MPEG4 এবং একটি র্যান্ডম .srt ফাইল, remuxed MKV সাবটাইটেল প্রবাহ করেনি ডিফল্ট পতাকা আছে:

    $ ffmpeg -i big_buck_bunny_480p_surround-fix.avi -i subtitle.srt -c copy test.mkv
    $ ffmpeg -i test.mkv
    Input #0, matroska,webm, from 'test.mkv':
      Metadata:
        ENCODER         : Lavf56.25.101
      Duration: 00:28:31.40, start: 0.000000, bitrate: 1028 kb/s
        Stream #0:0: Video: mpeg4 (Simple Profile), yuv420p, 854x480 [SAR 1:1 DAR 427:240], 24 fps, 24 tbr, 1k tbn, 24 tbc (default)
        Stream #0:1: Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s (default)
        Stream #0:2: Subtitle: subrip (default)
    
  • তবে আমি এটি কোনও এমপি 4-সহ একটি H264 নমুনা কোনও ব্যক্তিগত এমপি 4 সহ পুনরুত্পাদন করতে পারিনি , সুতরাং আমার ধারণা mp4 --> mkvকাজ করে না। তবে কী যদি ...?

    $ ffmpeg -i sample.mp4 -c copy sample.avi
    $ ffmpeg -i sample.avi -i subtitle.srt -c copy sample.mkv
    $ ffmpeg -i sample.mkv
    ...
    Input #0, matroska,webm, from 'sample.mkv':
      Metadata:
        ENCODER         : Lavf56.25.101
      Duration: 00:28:31.40, start: 0.000000, bitrate: 2 kb/s
        Stream #0:0: Video: h264 (Constrained Baseline), yuv420p(tv, bt709), 560x320, SAR 1:1 DAR 7:4, 60 fps, 60 tbr, 1k tbn, 60 tbc (default)
        Stream #0:1: Audio: aac (LC), 48000 Hz, mono, fltp (default)
        Stream #0:2: Subtitle: subrip (default)
    

বিজয়! করছেন mp4 --> aviএবং তারপরে avi + srt --> mkvডিফল্টরূপে সাবটাইটেলগুলি স্ট্রিমটি পান এবং ভিএলসি এগুলি সঠিকভাবে প্রদর্শন করে।

নিশ্চিত যে এটি খুব চতুর্দিকে এবং আমি প্রক্রিয়াটিতে থাকা তথ্য ক্ষতির কথা ভাবব না, তবে কমপক্ষে এটি কার্যকর হয়।

সারাংশ

  • ffmpeg অবশ্যই স্ট্রিমগুলি ডিফল্ট বা জোর করে সেট করার জন্য এখনই যথাযথভাবে গ্রহণ করা হয়নি,
  • এমকিভি সম্ভবত একটি মূল পাত্রে এমপিথের চেয়ে ভাল, যেহেতু এটির কাজটি ভাল করার জন্য একটি পরিচিত সরঞ্জাম রয়েছে ( এমকেভিটোলনিক্স থেকে এমকেভিপ্রপাদিত )।
ffmpeg সংস্করণ বিবরণ:

ffmpeg সংস্করণ 2.6.1 gcc 4.9.2 (জিসিসি) 20150304 (প্রিরিলেস) কনফিগারেশন দিয়ে নির্মিত: - ਪ੍ਰੀফিক্স = / ইউএসআর - ডিসাইবল-ডিবাগ - ডিসাইবল-স্ট্যাটিক - ডিসাইবল-স্ট্রিপিং - এনেবল-অ্যাভিসেন্ট - সক্ষম - avresample --enable-fontconfig --able-gnutls --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-libgsm --able-libmodplug --enable- libmp3lame - সক্ষম-libopencore_amrnb - সক্ষম-libopencore_amrwb - সক্ষম-libopenjpeg - সক্ষম-libopus - সক্ষম-libpulse - সক্ষম-libschroedinger - সক্ষম-libspeex - সক্ষম-libssh - সক্ষম-libheheora libv4l2 - সক্ষম-libvourbis - সক্ষম-libvpx - সক্ষম-libx264 - সক্ষম-libx265 - সক্ষম-libxvid - সক্ষম-রানটাইম-সিপুডেটেকট - সক্ষম-ভাগ করা - সক্ষম-সুইসাম্পল - সক্ষম-vdpau - সক্ষম-সংস্করণ 3 - সক্ষম-x11grab` `


4
আমি মনে করি এই প্যাচ অনুযায়ী এটি এখন সম্ভব is কমপক্ষে আমার জন্য এটি ব্যবহার করেffmpeg -i in.mp4 -i in.srt -c copy -disposition:s:0 default out.mkv

1

আপনি MP4Box 0.6.2-DEV-rev453 (মে 2016) বা এর চেয়ে বেশি ব্যবহার করতে পারেন:

mp4box -add alfa.mp4 -add bravo.srt:txtflags=0xC0000000 -new charlie.mp4

উদাহরণ

এটি বাধ্য হয়ে আউটপুট ফাইলের সাবটাইটেল স্ট্রিমটিকে চিহ্নিত করবে।

যাইহোক , এই চিহ্নটি প্রোগ্রামগুলির এই সংস্করণগুলি দিয়ে শুরু করেই স্বীকৃত হবে:


আমি এই পোস্টে এফএফপিপেইগ মেলিং তালিকায় একটি প্যাচ সম্পর্কে উল্লেখ করেছি যা এফএফপিপিগের জন্য স্বভাবের প্রয়োগ করে:

ffmpeg -i alfa.mp4 -i bravo.srt -c copy -c:s mov_text -disposition:s forced charlie.mp4

তবে "জোরপূর্বক" এবং "ডিফল্ট" উভয়ই দিয়ে চেষ্টা করার পরে, এফএফম্পেগ দ্বারা চিহ্নিত সাবটাইটেলগুলি এমপিসি-এইচসি বা ভিএলসি দ্বারা জোর করে হিসাবে স্বীকৃত নয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.