এই প্রশ্নের সম্ভবত ম্যাট্রোস্কা ফর্ম্যাটটির জ্ঞান প্রয়োজন হবে। আমি যখন ভিডিও এবং অডিও একসাথে করি, তখন অডিও প্যাকেটগুলি টাইমকোড 0 দিয়ে শুরু হয় এবং ভিডিওটি টাইমকোড দিয়ে শুরু হয় 7.. একটি 30fps ভিডিওটি কি টাইমকোড 0 দিয়ে শুরু করা উচিত, বা টাইমকোড 33 দিয়ে (টাইমকোড 0.03 মিলিসেকেন্ডে থাকা উচিত)? আমি কি এটি তৈরি করতে পারি যাতে অডিও এবং ভিডিও উভয়ই টাইমকোড 0 দিয়ে শুরু হয়?
আপনাকে নীচে পড়তে হবে না, বাকিটি কেবল অতিরিক্ত তথ্য।
আমি [v]setpts=N/(30*TB)[v];[a]asetpts=N/SR/TB[a]
দুটি শেষ ফিল্টার হিসাবে ফিল্টার যুক্ত করার চেষ্টা করেছি , তবে এটি কোনও পরিবর্তন করেনি।
আমি ব্যবহার করছি সম্পূর্ণ কমান্ড এখানে। এটি ভিডিওর জন্য কেবল দুটি পাস ভিপি 8 এনকোডিং এবং অডিওর জন্য একটি পাস অপাস এনকোডিং। এটি কয়েক 3 সেকেন্ড দীর্ঘ টুকরোয় একটি ভিডিও চপ করে, এবং তাদের সাথে যোগ দেয় ins
ffmpeg -threads 1 -i 480P_600K_71149981.mp4 -force_key_frames 00:00:03.000 -filter_complex [0:v]scale=320x180:force_original_aspect_ratio=decrease,fps=30[vid];[vid]split[vid][vid_copy];[vid_copy]trim=start=0:duration=3,setpts=PTS-STARTPTS[c0v];[0:a]atrim=start=0:duration=3,asetpts=PTS-STARTPTS[c0a];[vid]split[vid][vid_copy];[vid_copy]trim=start=90:duration=3,setpts=PTS-STARTPTS[c1v];[0:a]atrim=start=90:duration=3,asetpts=PTS-STARTPTS[c1a];[vid]split[vid][vid_copy];[vid_copy]trim=start=180:duration=3,setpts=PTS-STARTPTS[c2v];[0:a]atrim=start=180:duration=3,asetpts=PTS-STARTPTS[c2a];[vid]trim=start=270:duration=3,setpts=PTS-STARTPTS[c3v];[0:a]atrim=start=270:duration=3,asetpts=PTS-STARTPTS[c3a];[c0v][c0a][c1v][c1a][c2v][c2a][c3v][c3a]concat=n=4:v=1:a=1[v][a];[v]setpts=N/(30*TB)[v];[a]asetpts=N/SR/TB[a] -map [v] -map [a] -c:v vp8 -b:v 200k -crf 54 -profile:v 1 -an -pass 1 -passlogfile jump_passlogfile -f null NUL
ffmpeg -threads 1 -i 480P_600K_71149981.mp4 -force_key_frames 00:00:03.000 -filter_complex [0:v]scale=320x180:force_original_aspect_ratio=decrease,fps=30[vid];[vid]split[vid][vid_copy];[vid_copy]trim=start=0:duration=3,setpts=PTS-STARTPTS[c0v];[0:a]atrim=start=0:duration=3,asetpts=PTS-STARTPTS[c0a];[vid]split[vid][vid_copy];[vid_copy]trim=start=90:duration=3,setpts=PTS-STARTPTS[c1v];[0:a]atrim=start=90:duration=3,asetpts=PTS-STARTPTS[c1a];[vid]split[vid][vid_copy];[vid_copy]trim=start=180:duration=3,setpts=PTS-STARTPTS[c2v];[0:a]atrim=start=180:duration=3,asetpts=PTS-STARTPTS[c2a];[vid]trim=start=270:duration=3,setpts=PTS-STARTPTS[c3v];[0:a]atrim=start=270:duration=3,asetpts=PTS-STARTPTS[c3a];[c0v][c0a][c1v][c1a][c2v][c2a][c3v][c3a]concat=n=4:v=1:a=1[v][a];[v]setpts=N/(30*TB)[v];[a]asetpts=N/SR/TB[a] -map [v] -map [a] -c:v vp8 -b:v 200k -crf 54 -profile:v 1 -c:a libopus -b:a 32k -vbr on -compression_level 7 -ac 1 -ar 48000 -pass 2 -passlogfile jump_passlogfile -f webm -reserve_index_space 512 480P_600K_71149981_vthumb.webm
এখানে 480P_600K_71149981.mp4 ফাইলটি আমি এটি পরীক্ষা করছি।
এবং এখানে ফলাফলের হয় 480P_600K_71149981_vthumb.webm এবং এটা লেখা ডাম্প সঙ্গে তৈরি করা webm_parser_demo.exe
libwebm থেকে (সামান্য দশমিক পরিবর্তে হেক্স প্রদর্শন করে পরিবর্তিত)। পাঠ্য ডাম্পের আকর্ষণীয় অংশগুলি হ'ল "টাইমকোড:" এবং "ক্লাস্টার" অনুসন্ধান করুন।
Cluster header: [309, 311) body: [311, 3487)
Timecode: 0
SimpleBlock header: [31a, 31c) body: [31c, 323)
track number: 2
frames: 1
timecode: 0
lacing: 0 (none)
flags: visible, key frame
frame byte range: [320, 323)
SimpleBlock header: [323, 325) body: [325, 395)
track number: 1
frames: 1
timecode: 7
lacing: 0 (none)
flags: visible, key frame
frame byte range: [329, 395)
SimpleBlock header: [395, 397) body: [397, 39e)
track number: 2
frames: 1
timecode: 15
lacing: 0 (none)
flags: visible, key frame
frame byte range: [39b, 39e)
SimpleBlock header: [39e, 3a0) body: [3a0, 3bb)
track number: 1
frames: 1
timecode: 28
lacing: 0 (none)
flags: visible
frame byte range: [3a4, 3bb)
SimpleBlock header: [3bb, 3bd) body: [3bd, 3c4)
track number: 2
frames: 1
timecode: 29
lacing: 0 (none)
flags: visible, key frame
frame byte range: [3c1, 3c4)
উত্স এবং গন্তব্য ভিডিওর পৃথক fps রয়েছে, এটি সম্ভবত গুরুত্বপূর্ণ। আছে setpts=PTS-STARTPTS
ফিল্টার, কিন্তু তারা অদ্ভুত শুরু উপস্থাপনা টাইমস্ট্যাম্প প্রভাবিত করে না।
এটি -force_key_frames
সঠিক সময়ে কীফ্রেম তৈরি করে তা নিশ্চিত করা আমার পক্ষে গুরুত্বপূর্ণ এবং পরে আমি টাইমকোডগুলি ফাইলটিতে 1 টি কিউ রেখে ব্যবহার করব। আমি কেবল এটি পোলিশ করার চেষ্টা করছি, ভিডিও ফর্ম্যাটগুলি শেখার চেষ্টা করছি, যখন আমার একটি সুযোগ রয়েছে। আমি পরে তাদের জন্য একটি ভিডিও প্লেয়ার তৈরি করব, নিশ্চিত হওয়া দরকার যে ফাইলগুলি যতটা সম্ভব পড়ার এবং রেন্ডার করার জন্য সহজ।
যদি এখানে কেবলমাত্র ভিডিও বা কেবল অডিও থাকে তবে টাইমকোডগুলি 0 থেকে সঠিকভাবে শুরু হয় I আমি এই আদেশটি দিয়ে এটি পরীক্ষা করেছি:
ffmpeg -i 480P_600K_71149981.mp4 -t 3 -an -reserve_index_space 512 out.webm
এছাড়াও আমি আশ্চর্য হয়েছি যে ভিডিও ফ্রেমগুলি অডিও ফ্রেমের আগে যাওয়া সম্ভব হয়, এগুলি সংরক্ষণের আরও প্রাকৃতিক উপায় বলে মনে হয় যদিও আমি কোনও বিষয়ে নিশ্চিত নই। টাইমস্ট্যাম্পগুলির সমস্যাটি সমাধান হয়ে গেলে এটি সম্ভবত নিজেকে সমাধান করবে।
যদি সমাধানের জন্য ffmpeg এবং পুনরায় সংশ্লেষে কিছু পরিবর্তন করতে হয় তবে আমি এটির সাথে ঠিক আছি। প্রথমে কী পরিবর্তন করতে হবে তা খুঁজে বার করতে হবে।
যদিও, আমি ভাবছি যে আমার আসলে ভিডিওর আগে অডিও রাখা উচিত, এবং ব্যবহার করা উচিত -audio_preload
। ওপাস অডিও সন্ধান করার জন্য, আমাকে যাইহোক যাইহোক সিকপ্রেরল মিলিসেকেন্ডগুলি (আমার ক্ষেত্রে 80 মিমি) রিপ্লে করতে হবে। এই ক্ষেত্রে আমি যে বিষয়টি যত্নশীল তা নয়, আমি কখনও 12 সেকেন্ডের ভিডিওর সন্ধান করার ইচ্ছা করি না, থাম্বনেইলের জন্য আমার কেবলমাত্র দ্রুত ভিডিওর দ্বিতীয় 3 থেকে কীফ্রেমটি ধরতে হবে। হ্যাঁ, -audio_preload
এখানে নেই এছাড়াও, ম্যাট্রোস্কায় অপস মিক্সিং সম্পর্কে আরও কিছু বিভ্রান্তিকর তথ্য রয়েছে, সম্ভবত এই ক্ষেত্রে অকেজো: https://wiki.xiph.org/MatroskaOpus ।
অপেক্ষা করুন, আমি মনে করি কেন ভিডিওটি 7 মিলিসেকেন্ডে দেরী হয় I কারণ ওপাসে, আপনাকে কোডেকড্লে (এখানে 6.5 মিমি) অডিও খেলতে হবে এবং কোনও অডিও শোনার আগে, কেবল ডিকোডার শুরু করার জন্য আপনাকে এটিকে বাতিল করতে হবে। এইচ, এখন আমি ভাবছি যদি আমি এই বাতিল করা অডিওটিকে নেতিবাচক টাইমস্ট্যাম্পে সেট করতে পারি। https://www.matroska.org/technical/specs/index.html#simple block_ কাঠামো এখানে টাইমকোড একটি স্বাক্ষরিত int16, তাই সম্ভবত আমি পারব। তবে কীভাবে এটি ffmpeg বলতে হবে ...
সম্পাদনা 1: এখানে এফএফপ্রোবের ফলাফল:
ffprobe 480P_600K_71149981_vthumb.webm -show_packets -select_streams v -read_intervals %+#5 -v 0
-
[PACKET]
codec_type=video
stream_index=0
pts=7
pts_time=0.007000
dts=7
dts_time=0.007000
duration=33
duration_time=0.033000
convergence_duration=N/A
convergence_duration_time=N/A
size=108
pos=897
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=40
pts_time=0.040000
dts=40
dts_time=0.040000
duration=33
duration_time=0.033000
convergence_duration=N/A
convergence_duration_time=N/A
size=23
pos=1020
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=74
pts_time=0.074000
dts=74
dts_time=0.074000
duration=33
duration_time=0.033000
convergence_duration=N/A
convergence_duration_time=N/A
size=23
pos=1067
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=107
pts_time=0.107000
dts=107
dts_time=0.107000
duration=33
duration_time=0.033000
convergence_duration=N/A
convergence_duration_time=N/A
size=23
pos=1114
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=140
pts_time=0.140000
dts=140
dts_time=0.140000
duration=33
duration_time=0.033000
convergence_duration=N/A
convergence_duration_time=N/A
size=23
pos=1152
flags=__
[/PACKET]
-
ffprobe 480P_600K_71149981_vthumb.webm -show_packets -select_streams a -read_intervals %+#5 -v 0
-
[PACKET]
codec_type=audio
stream_index=1
pts=-7
pts_time=-0.007000
dts=-7
dts_time=-0.007000
duration=20
duration_time=0.020000
convergence_duration=N/A
convergence_duration_time=N/A
size=3
pos=888
flags=K_
[/PACKET]
[PACKET]
codec_type=audio
stream_index=1
pts=14
pts_time=0.014000
dts=14
dts_time=0.014000
duration=20
duration_time=0.020000
convergence_duration=N/A
convergence_duration_time=N/A
size=3
pos=1011
flags=K_
[/PACKET]
[PACKET]
codec_type=audio
stream_index=1
pts=34
pts_time=0.034000
dts=34
dts_time=0.034000
duration=20
duration_time=0.020000
convergence_duration=N/A
convergence_duration_time=N/A
size=3
pos=1049
flags=K_
[/PACKET]
[PACKET]
codec_type=audio
stream_index=1
pts=54
pts_time=0.054000
dts=54
dts_time=0.054000
duration=20
duration_time=0.020000
convergence_duration=N/A
convergence_duration_time=N/A
size=3
pos=1058
flags=K_
[/PACKET]
[PACKET]
codec_type=audio
stream_index=1
pts=74
pts_time=0.074000
dts=74
dts_time=0.074000
duration=20
duration_time=0.020000
convergence_duration=N/A
convergence_duration_time=N/A
size=3
pos=1096
flags=K_
[/PACKET]
সত্যিই আজব কীভাবে ভিডিওতে প্রথম টাইমস্ট্যাম্প 7 রয়েছে এবং অডিওতে প্রথম টাইমস্ট্যাম্প -7 রয়েছে 7
ম্যাট্রোস্কায় (পরীক্ষিত webm_parser_demo.exe
) ভিডিওতে টাইমস্ট্যাম্প 7 রয়েছে এবং অডিওতে টাইমস্ট্যাম্প 0 রয়েছে।
এবং আমার লক্ষ্যটি হ'ল প্রথম ভিডিও টাইমস্ট্যাম্প 0 এবং প্রথম অডিও টাইমস্ট্যাম্প -7 (সমস্ত কোডেকডেলে ডেটা)।
সম্পাদনা 2: vorbis
অডিও সহ কয়েকটি ওয়েবম অধ্যয়ন করা হয়েছে , তারা উভয়ই 0 এ শুরু করে না them তাদের মধ্যে অডিও 0 থেকে শুরু হয় এবং 3 এ ভিডিওটি শুরু হয় না কী তা কি কোডেকডেলেও জানেন না?
ffprobe file.mp4 -show_packets -select_streams v -read_intervals %+#5 -v 0
ভিডিওর জন্য। পরিবর্তন v
করার জন্য a
অডিওর জন্য।