ffmprovisr: FFmpeg कमांड आसानी से बनाने के लिए रेसिपी संग्रह
(amiaopensource.github.io)- ffmprovisr एक command generation सहायता साइट है, जहाँ FFmpeg कमांड लिखना कठिन लगने वाले उपयोगकर्ता कोई काम चुनकर उदाहरण कमांड और हर flag की व्याख्या देख सकते हैं
- रेसिपी
ffmpeg,ffplay,ffprobeके केंद्र में input file, codec, filter, stream mapping, output container जैसे घटकों को अलग-अलग करके दिखाती हैं - इसका दायरा rewrap/transcoding से लेकर trim/join, subtitle/watermark, thumbnail/GIF, test files, metadata/checksum/QCTools report तक काफ़ी व्यापक है
- इसमें अपना search नहीं है, लेकिन सभी recipes खोलने के बाद browser search से ज़रूरी keyword ढूँढने का तरीका बताया गया है
- FFmpeg के अलावा CDDA ripping, ImageMagick,
flacजैसे tools भी शामिल हैं, इसलिए इसे digital preservation workflow के लिए व्यावहारिक command collection की तरह इस्तेमाल किया जा सकता है
ffmprovisr क्या देता है
- ffmprovisr काम-आधारित example commands और options की व्याख्या देता है, जिससे FFmpeg कमांड खुद जोड़कर बनाने का बोझ कम हो जाता है
- उपयोगकर्ता task button दबाकर किसी एक command या संबंधित commands की सूची पर जा सकते हैं, फिर sample command और हर flag का व्यवहार देख सकते हैं
- पेज में search feature नहीं है; इसकी जगह सभी recipes खोलकर
ctrl+fयाcmd+fसे browser search करने का तरीका बताया गया है - बुनियादी reference के रूप में FFmpeg official website, Reto Kromer की installation instructions, Command Line Crash Course, और explainshell.com के लिंक दिए गए हैं
- इसका लाइसेंस Creative Commons Attribution 4.0 International License है
FFmpeg कमांड पढ़ने का बुनियादी तरीका
- FFmpeg install करने के बाद command prompt में
ffmpegटाइप करके चलाया जाता है - कमांड आमतौर पर flag और value की जोड़ी से बनी होती है
-i input_file.extमें-iinput file बताने वाला flag है, औरinput_file.extलक्ष्य फ़ाइल है-c:v proresमें-c:vvideo stream encoding बताता है, औरproresइस्तेमाल होने वाला codec है
- output filename कमांड के अंत में आता है और अलग output flag के बिना filename से ही तय होता है
ffmpegवीडियो को save करता है, जबकिffplayबनाई गई वीडियो को save किए बिना चला सकता है- SMPTE bars save करने का उदाहरण:
ffmpeg -f lavfi -i smptebars=size=640x480 -t 5 output_file - SMPTE bars चलाने का उदाहरण:
ffplay -f lavfi smptebars=size=640x480 - FFmpeg उदाहरण में
-i, recording duration-t 5, और output file चाहिए, लेकिन FFplay उदाहरण में-iकी ज़रूरत नहीं होती
- SMPTE bars save करने का उदाहरण:
errors कम करने के लिए checkpoints
- यह ज़रूर जाँचना चाहिए कि output file खुल रही है, चल रही है, और जैसा चाहा था वैसी दिख और सुनाई दे रही है
- output extension इच्छित codec से मेल खाना चाहिए, और कुछ extensions FFmpeg में खास codec defaults लागू कर देते हैं
- उदाहरण के लिए
.mp4डिफ़ॉल्ट रूप से H.264 encoding चुन सकता है
- उदाहरण के लिए
"Error: No such file or directory"गलत directory, typo, छूटी हुई space, या गलत जुड़ा हुआ flag होने पर आ सकता है- macOS में Downloads folder में जाने के लिए
cd $HOME/Downloadsइस्तेमाल किया जाता है - अगर copy-paste किया गया command ठीक दिखे फिर भी error आए, तो command line में उसे दोबारा हाथ से लिखने की सलाह दी जाती है
- macOS में Downloads folder में जाने के लिए
"Could not find tag for codec"तब आता है जब output extension के साथ compatible न होने वाले audio/video codec वाले file को rewrap करने की कोशिश की जाए- पहले उचित codec में transcode किया जा सकता है, या अगर यक़ीन हो कि extension सही codec के साथ auto-encode करेगा तो
-c copyहटाया जा सकता है
- पहले उचित codec में transcode किया जा सकता है, या अगर यक़ीन हो कि extension सही codec के साथ auto-encode करेगा तो
"Killed"तब दिख सकता है जब file server memory capacity से बड़ा हो- remote server पर memory capacity बढ़ाकर इसे सुलझाया जा सकता है
- local server पर FFmpeg version को up to date रखना और अधिक memory लेने वाले दूसरे programs के साथ इसे एक साथ न चलाना बेहतर है
- filter इस्तेमाल करते समय
"Error splitting argument list: option not found"दिखे तो quotes के उपयोग और filtergraph format की जाँच करनी चाहिए - filters के लिए stream re-encoding चाहिए, इसलिए file stream को सीधे copy करने वाले
-c copyके साथ इन्हें इस्तेमाल करने पर समस्या हो सकती है
filtergraph, stream mapping, और default codecs
- loop के अंदर FFmpeg batch job चलाते समय input से पहले
-nostdinजोड़कर standard input interaction के default behavior को override किया जा सकता है- उदाहरण:
ffmpeg -nostdin -i input_file ...
- उदाहरण:
- FFmpeg output file format के आधार पर codec और codec parameters के default values अपने-आप सेट करता है
.avi: audiomp3, videompeg4.mkv: audioac3, video H.264.mov: audio AAC, video H.264.mp4: audio AAC, video H.264.mpg: audiomp2, videompeg1video.mxf: audiopcm_s16le, videompeg2video.wav: audiopcm_s16le
- filtergraph
-vfया-afके बाद आने वाले filter name और options का संयोजन होता है-vf,-filter:vका alias है- video filter का उदाहरण
hflipहै, audio filter का उदाहरणamergeहै - कई filters को comma से जोड़ा जाता है, और कई filter chains को semicolon से अलग किया जाता है
-vf "fieldmatch,yadif,decimate"inverse telecine processing के लिए इस्तेमाल होने वाली एक filter chain है- अगर input या output एक से ज़्यादा हों, तो
-vfकी जगह-filter_complexइस्तेमाल करना चाहिए - straight quotes इस्तेमाल करनी चाहिए; curly quotes से बचना चाहिए
- stream mapping तय करता है कि input file के video, audio, subtitle, data, attachment streams में से कौन-से output में शामिल होंगे
- FFmpeg
a,v,s,d,tstream types को पहचानता है -map 0:vपहली input file की सभी video streams चुनता है-map 0:3पहली input file की चौथी stream चुनता है-map 0:a:2पहली input file की तीसरी audio stream चुनता है- mapping न देने पर video file के लिए default यह होता है कि output में सिर्फ 1 video और 1 audio stream ली जाए
- सभी streams map करने के लिए
-map 0इस्तेमाल करें -map 0:a?की तरह?जोड़ने पर batch processing के दौरान audio न होने वाली files भी बिना error के आगे बढ़ सकती हैं
- FFmpeg
कंटेनर बदलना और ट्रांसकोडिंग
- फ़ाइल remuxing
ffmpeg -i input_file.ext -c copy -map 0 output_file.extसे किया जाता है- अंदर का video, audio और subtitle डेटा बदले बिना उसे किसी दूसरे कंटेनर फ़ॉर्मैट में ले जाया जाता है
- remuxing को re-multiplexing भी कहा जाता है
-map 0का उपयोग करना चाहिए ताकि multiple audio tracks जैसी सभी streams सुरक्षित रहें- कुछ कंटेनर केवल खास stream encodings ही रख सकते हैं, इसलिए re-encoding के बिना remuxing संभव न हो सकता है
- Broadcast WAV बनाने में
-write_bext 1और-metadata field_name='Content'के साथ BEXT chunk और उससे जुड़ा metadata लिखा जाता है- अक्सर इस्तेमाल होने वाले fields हैं
description,originator,originator_reference,origination_date,origination_time,coding_history,IARL - BWF metadata fields में character count की सीमा होती है, और
OriginatorReferenceअधिकतम 32 अक्षर का होता है
- अक्सर इस्तेमाल होने वाले fields हैं
- DV codec video को
.dvफ़ाइल में remux करते समय-f rawvideo -c:v copyका उपयोग करें, ताकि DV stream के अंदर का source metadata गलती से हट न जाए - Apple ProRes LT transcoding का उदाहरण
-c:v prores -profile:v 1 -vf yadif -c:a pcm_s16leहै- ProRes 422 profiles में
0Proxy,1LT,2Standard,3HQ शामिल हैं - ProRes के लिए FFmpeg में QuickTime
.mov, Matroska.mkv, MXF.mxfकंटेनर समर्थित हैं
- ProRes 422 profiles में
- H.264 transcoding का उदाहरण
-c:v libx264 -pix_fmt yuv420p -c:a aacहैlibx264का defaultmediumpreset और CRF 23 है-pix_fmt yuv420pQuickTime और अधिकतर non-FFmpeg players के साथ compatibility के लिए 4:2:0 chroma subsampling निर्दिष्ट करता है- streaming optimization के लिए
-movflags +faststartजोड़ा जाता है - बेहतर quality का उदाहरण
-preset veryslow -crf 18है, और CRF 18 को अक्सर “visually lossless” माना जाता है
- Nvidia GPU आधारित H.264/H.265 encoding में
h264_nvencयाhevc_nvencका उपयोग होता है- Nvidia fixed-function hardware, CPU encoding की तुलना में 10 गुना performance दे सकता है, लेकिन low bitrate quality optimization के लिए अधिक parameters चाहिए होते हैं
- HEVC को लगभग 2015 के बाद के GPU में समर्थित, अधिक efficient codec बताया गया है
- H.265/HEVC transcoding में
-c:v libx265 -pix_fmt yuv420p -c:a copyका उपयोग होता हैlibx265का defaultmediumpreset और CRF 28 है- H.265 का CRF 28, H.264 के CRF 23 के बराबर माना जाता है, और file size लगभग आधा हो सकता है
- archival lossless उदाहरण में FFV1 Version 3 को Matroska कंटेनर में रखा जाता है और साथ में input
framemd5भी बनाया जाता है-map 0सभी streams को map करता है-dnउन data streams को हटाता है जिन्हें Matroska स्वीकार नहीं करता-slicecrc 1CRC जानकारी जोड़ता है ताकि decoder corrupted slices पहचान सके-f framemd5 -anvideo frames के लिए frame-by-frame MD5 checksums बनाता है
वीडियो·ऑडियो गुण बदलना
- aspect ratio बदलने की recipe padding filter का उपयोग करती है
- 4:3 को 16:9 बनाने के लिए pillarbox लगाया जाता है
- 16:9 को 4:3 बनाने के लिए letterbox लगाया जाता है
- silent video में
-c:a copyकी जगह-anइस्तेमाल किया जा सकता है
- SD को HD में बदलने के उदाहरण में
colormatrix=bt601:bt709,scale=1440:1080:flags=lanczos,pad=1920:1080:240:0ये तीन filters इस्तेमाल होते हैं- luminance coefficients को Rec. 601 से Rec. 709 में बदला जाता है
- Lanczos scaling, default bilinear से धीमा है लेकिन बेहतर परिणाम देता है
- interlaced source के लिए scaling से पहले
yadifसे deinterlace करने की सलाह दी जाती है
- display aspect ratio को
-aspect 4:3जैसे option से container level पर बदला जा सकता है-c:v copyके साथ उपयोग करने पर यह encoded frames के अंदर के aspect ratio को नहीं, बल्कि container में stored aspect ratio को प्रभावित करता है
- color space conversion के लिए
colormatrix=src:dstfilter का उपयोग होता है- allowed values में
bt601,smpte170m,bt470bg,bt709,bt2020शामिल हैं - color space metadata embed करने के लिए
-color_primaries,-color_trc,-colorspaceका उपयोग होता है - ध्यान रहे कि असली Rec.601 फ़ाइल पर Rec.709 tag भी लगाया जा सकता है
- metadata tags
libx264याlibx265लिखते हैं, इसलिए re-encoding के बिना इन्हें जोड़ा नहीं जा सकता
- allowed values में
- speed बदलने के लिए
setptsऔरatempoसाथ में उपयोग किए जाते हैं- उदाहरण में 24fps को 25fps में बदलते हुए audio pitch बनाए रखने वाली PAL access copy बनाई जाती है
- fade processing के लिए
fadeऔरafadefilters इस्तेमाल होते हैं, और filter उपयोग होने की वजह से video और audio दोनों को फिर से encode करना पड़ता है - audio extraction में
-c:a copy -vnसे video के बिना audio stream को lossless तरीके से निकाला जाता है - दो audio tracks को मिलाने के लिए
amergeऔर-filter_complexका उपयोग होता है- यह YouTube auto-caption जैसी बाद की processes में उपयोगी हो सकता है, जहाँ एक ही audio track अपेक्षित होता है
- script लिखने से पहले इच्छित track की पुष्टि के लिए
ffprobeचलाने की सलाह दी जाती है
- loudness analysis और normalization के लिए
loudnormfilter का उपयोग होता है- JSON output को 2-pass normalization के input के रूप में इस्तेमाल किया जा सकता है
- बताया गया है कि default values, PBS के recommended target loudness से अच्छी तरह मेल खाती हैं
- 1-pass तेज़ है, लेकिन 2-pass से कम सटीक है
- CD pre-emphasis, RIAA equalization, audio resampling, और 192kHz WAV को 96kHz के रूप में force interpret करने की recipes भी शामिल हैं
काटना, जोड़ना, segment बनाना
- एक ही technical specs वाली फ़ाइलों को जोड़ने के लिए concat demuxer का उपयोग होता है
ffmpeg -f concat -i mylist.txt -c copy output_file- जिन फ़ाइलों को जोड़ा जाना है, उनका codec और technical specs समान होना चाहिए, और result फ़ाइल को ज़रूर preview करना चाहिए
- absolute path इस्तेमाल करने के लिए
-safe 0जोड़ें
- अलग-अलग file formats या codecs वाली फ़ाइलों को जोड़ने के लिए
concatfilter और-filter_complexका उपयोग होता है- input files में container, codec, chroma subsampling, frame rate आदि अलग हो सकते हैं
- default example केवल तब सही चलता है जब resolution एक जैसा हो
- frame rate अलग होने पर output variable frame rate हो सकता है
- resolution अलग हो तो concat से पहले
scaleसे मिलाएँ, और SD व HD को जोड़ते समय SD पर pillarbox लगाया जा सकता है
- फ़ाइल split करना segment muxer से किया जाता है
-segment_time 60अधिकतम 60 सेकंड के segments बनाता है%03d3-digit zero-padded numeric filenames बनाता है
- बिना re-encoding trimming के लिए
-ss,-to,-t,-c copy,-map 0का उपयोग होता है- H.264 जैसे interframe codecs में शुरुआत i-frame के सबसे नज़दीकी बिंदु से हो सकती है
-sseof -5फ़ाइल के अंत से 5 सेकंड पहले से copy करने का तरीका है
- audio फ़ाइल की शुरुआत से silence हटाने के लिए
silenceremove=start_threshold=-57dB:start_duration=1:start_periods=1का उपयोग होता है-57dBको analog hiss को ध्यान में रखते हुए उपयुक्त स्तर बताया गया है- filter उपयोग होने के कारण audio फिर से encode होता है
- audio फ़ाइल के अंत से silence हटाने के लिए
areverse,silenceremove,areverseक्रम में प्रोसेस किया जाता है- क्योंकि
silenceremoveशुरुआत के silence हटाने के लिए अधिक उपयुक्त है, इसलिए audio को reverse करके फिर वापस सीधा किया जाता है
- क्योंकि
इंटरलेस्ड वीडियो प्रोसेसिंग
- SD NTSC source से HD H.264 access file बनाते समय
yadif,scale,pad,format=yuv420pको साथ में इस्तेमाल किया जाता हैyadifएक deinterlace filter हैscale=1440:1080:flags=lanczosइमेज को 1440x1080 पर adjust करता हैpad=1920:1080:(ow-iw)/2:(oh-ih)/24:3 input को 16:9 output frame में फिट करने के लिए padding करता है
- सामान्य deinterlace उदाहरण
-vf "yadif,format=yuv420p"हैformat=yuv420pH.264 playback compatibility के लिए 4:2:0 chroma subsampling निर्दिष्ट करता है- FFmpeg में
yadifके अलावाbwdif,w3fdif,kerndeint,nnedideinterlacer भी हैं
- fields को frames में अलग करने वाला deinterlace
idet,bwdif,format=yuv420pका उपयोग करता है- ज़्यादा motion वाले interlaced video में source की visual cadence को बनाए रखने के लिए इसे प्राथमिकता दी जाती है
idetfield order detect करता हैbwdifडिफ़ॉल्ट रूप से हर field के लिए एक frame output करता है
- inverse telecine में
fieldmatch,yadif,decimateका उपयोग होता है- यह 3:2 pulldown को उलटकर 29.97fps interlaced video को मूल film source के 24fps frame rate पर restore करता है
- 29.97i file पर लागू करने पर output frame rate वास्तव में 23.976fps हो जाता है
- field order बदलने के लिए
setfield=tffयाsetfield=bffका उपयोग करें- क्योंकि video filter इस्तेमाल हो रहा है, इसलिए
-c copyइस्तेमाल नहीं किया जा सकता और re-encoding ज़रूरी है
- क्योंकि video filter इस्तेमाल हो रहा है, इसलिए
- interlace pattern की जाँच
ffmpeg -i input_file -filter:v idet -f null -से output file बनाए बिना analysis करके की जाती है
वॉटरमार्क, subtitles, thumbnails, GIF
- टेक्स्ट वॉटरमार्क
drawtextfilter से बनाया जाता हैfontfile,fontsize,text,fontcolor,alpha,x,yoptions निर्दिष्ट किए जाते हैंx=(w-text_w)/2:y=(h-text_h)/2वीडियो के आकार से स्वतंत्र रूप से बीच में place करता है
- इमेज वॉटरमार्क को
overlay=main_w-overlay_w-5:5से ऊपर दाईं ओर रखा जा सकता है - burn-in timecode के लिए
drawtextकेtimecode,box,boxcolor,rateoptions का उपयोग होता है- शुरुआती timecode का format
hh:mm:ss[:;.]ffहै
- शुरुआती timecode का format
- subtitle file embed करने के लिए
-i subtitles_file -c copy -c:s mov_textका उपयोग करेंmov_textMP4 और MOV containers में काम करता है- MKV container में अनुमत formats
ASS,SRT,SSAहैं
- एक thumbnail
-ss 00:00:20 -vframes 1 thumb.pngसे निकाला जाता है - हर 1 मिनट पर thumbnail बनाने के लिए
-vf fps=1/60 out%d.pngका उपयोग करें - image sequence को GIF में बदलते समय
image2,-framerate,-pattern_type glob,scaleका उपयोग होता है - high-quality GIF दो चरणों में बनाया जाता है
- पहला command
palettegenसे custom palette बनाता है - दूसरा command
paletteuseसे palette apply करता है - एक सरल तरीका
-vf "fps=10,scale=500:-1"का है, लेकिन इसमें dithering ज़्यादा दिखती है और file size छोटा होता है
- पहला command
इमेज सीक्वेंस, scopes, OCR
- image sequence को 10-bit uncompressed video में बदलते समय
-f image2 -framerate 24 -i input_file_%06d.ext -c:v v210का उपयोग करेंimage2demuxer का default frame rate 25fps है%06dछह अंकों वाले filename को ascending order में पढ़ता है
- इमेज और audio file को जोड़कर वीडियो बनाने के लिए
-loop 1,-shortest,-vf scale=1280:720का उपयोग करें- यह तब उपयोगी हो सकता है जब आप audio file को YouTube जैसे platform पर अपलोड करना चाहते हों
ffplay -f lavfiऔर filters का उपयोग करके audio bit depth visualization, decibel graph, broadcast range से बाहर pixels का display, और vectorscope display किया जा सकता हैtblend=all_mode=difference128औरhstackदो input videos के temporal difference को साथ-साथ दिखाते हैंxstackकई video sources को vertical या horizontal रूप से stack करने वाली output window बनाने में इस्तेमाल होता है, औरvrecordमें उपयोग होने वाली output window जैसे कामों के लिए उपयोगी है- OCR उदाहरण में
ocrfilter औरdrawtextका उपयोग करके पहचाने गए text को वीडियो पर दिखाया जाता है - OCR data output को
ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=input_file,ocr"के रूप में स्क्रीन पर निकाला जाता है
metadata, checksums, preservation work
- technical metadata extraction
ffprobe -i input_file -show_format -show_streams -show_data -print_format xmlसे किया जाता है- XML के अलावा output format के रूप में JSON, flat का भी उपयोग किया जा सकता है
- metadata हटाने के लिए
-map_metadata -1 -c:v copy -c:a copyका उपयोग करें- वीडियो और ऑडियो को copy किया जाता है, लेकिन metadata copy नहीं किया जाता
- Bash batch processing
.shfile औरforloop से की जाती है- उदाहरण:
for file in *.mxf; do ffmpeg -i "$file" -map 0 -c copy "${file%.mxf}.mov"; done .shfile और प्रोसेस की जाने वाली.mxffiles एक ही directory में होनी चाहिए, और command उसी directory से चलाना चाहिए- recursive processing के लिए
find input_directory -iname "*.mxf" -exec ffmpeg -i {} -map 0 -c copy {}.mov \;का उपयोग किया जा सकता है
- उदाहरण:
- Windows में PowerShell
.ps1script से batch processing की जाती है- उदाहरण में
.mp4files की list बनाई जाती है और हर file का extension बदलकर.mkvकरके remux किया जाता है ffmpegको full path के बिना call करने के लिए उसका सही तरह से configured होना ज़रूरी है
- उदाहरण में
- decoder errors की जाँच
ffmpeg -i input_file -f null -से output file बनाए बिना decode करके की जाती है, और errors स्क्रीन पर दिखाए जाते हैं - FFV1 Version 3 fixity verification
-report -i input_file -f null -से CRC checksum mismatch की जाँच करता है- Frame CRC, FFV1 Version 3 में default रूप से enabled होता है
- frame-by-frame video MD5
-f framemd5 -anसे generate किया जाता है - audio sample groups के लिए MD5
asetnsamples=n=48000 -f framemd5 -vnसे generate किया जाता है- sample groups की संख्या को media sample rate के साथ match करना अच्छी प्रथा माना जाता है
- default रूप से audio को 16-bit PCM में transcode करके framemd5 बनाया जाता है
- stream MD5 वीडियो और ऑडियो streams को अलग-अलग
-mapकरके और-c copy -f md5से बनाया जा सकता है- इसका उपयोग container metadata changes से स्वतंत्र रूप से A/V information integrity verify करने के लिए होता है
streamhashसभी streams के लिए stream-wise hash output करता है- कितने streams हैं यह पहले से जाने बिना mixed born-digital material hashing के लिए यह उपयोगी है
- QCTools report
ffprobe -f lavfiऔरsignalstats,cropdetect,idet,psnr,ssim,ebur128,astatsआदि का उपयोग करके.qctools.xml.gzgenerate करती है- audio वाली files और बिना audio वाली files के लिए अलग commands दिए गए हैं
- EIA-608 Line 21 closed captions extraction में
readeia608filter औरffprobeका उपयोग करके hex values को CSV के रूप में output किया जाता है
टेस्ट फ़ाइलें और अन्य FFmpeg उदाहरण
- टेस्ट वीडियो
mandelbrot,smptebars,testsrc,smptehdbarsजैसे lavfi input से बनाया या चलाया जा सकता है- Mandelbrot उदाहरण 1280x720, 25fps, 10 सेकंड का H.264 output है
- SMPTE bars उदाहरण 720x576, 25fps, 10 सेकंड का ProRes output है
- HD SMPTE bars चलाने के लिए
ffplay -f lavfi -i smptehdbars=size=1920x1080 - VGA SMPTE bars चलाने के लिए
ffplay -f lavfi -i smptebars=size=640x480
- sine wave test audio
sine=frequency=1000:sample_rate=48000:duration=5औरpcm_s16leसे WAV फ़ाइल बनाता है - SMPTE bars और 1kHz sine wave को मिलाने वाला test video दो lavfi inputs और
-c:v ffv1,-c:a pcm_s16leका उपयोग करता है - damaged test file
-bsf noise=1 -c copyसे packet content को जानबूझकर खराब करता है, लेकिन container को खराब नहीं करता - Conway's Game of Life को
ffplay -f lavfi life=...से simulate किया जाता है, औरffmpegतथा-t 5का उपयोग करने पर उसका एक हिस्सा save किया जा सकता है - दो वीडियो की perceptual similarity तुलना के लिए
signature=detectmode=full:nb_inputs=2filter का उपयोग होता है - input video का perceptual hash
signature=format=xml:filename="output.xml"से XML फ़ाइल बनाता है - image sequence को
ffplay -framerate 5 input_file_%06d.extसे वीडियो बनाए बिना सीधे चलाया जा सकता है - audio और video track अलग करने के लिए
-map 0:v:0और-map 0:a:0का उपयोग होता है - audio और video track merge करने के लिए
-map 0:v -map 1:a -c copyसे पहली फ़ाइल का video और दूसरी फ़ाइल का audio जोड़ा जाता है - DVD access के लिए ISO बनाने हेतु MPEG फ़ाइल
-aspect 4:3 -target ntsc-dvd output_file.mpgसे बनाई जाती है, औरdvdauthorinstall होना ज़रूरी है - YDIF-आधारित scene detection के लिए CSV,
ffprobeऔरsignalstatsकेlavfi.signalstats.YDIFमान को output करता है - head switching noise को
drawbox=w=iw:h=7:y=ih-h:t=maxसे frame के निचले हिस्से में काला box बनाकर छिपाया जा सकता है - RTMP target पर live streaming और local MP4 recording एक साथ करने के लिए
teemuxer का उपयोग होता है- input को 1280px चौड़ाई तक scale किया जाता है, और तय समय के बाद stream बंद कर दी जाती है
- उदाहरण में यह नोट शामिल है कि इसे लगभग 4 साल तक असली TV show live streaming में रोज़ाना इस्तेमाल किया गया
- किसी विशेष decoder, encoder, demuxer, muxer, filter की जानकारी
ffmpeg -h type=nameसे देखी जा सकती है- उदाहरण हैं
encoder=libx264,decoder=mp3,muxer=matroska,demuxer=mov,filter=crop
- उदाहरण हैं
FFmpeg के साथ परिचित कराए गए संबंधित टूल
- CDDA ripping tool, CD drive offset जाँचने और audio CD को सही तरह rip करने से जुड़ा है
- अलग-अलग CD drive models में reading start position अलग हो सकती है, इसलिए एक ही content के checksum verification के लिए offset correction ज़रूरी है
- drive पहचान
cdda2wav -scanbus,cdda2wav,cdparanoia -vsQसे की जा सकती है - offset Accurate Rip CD drive offset list में मिलता है
- macOS GUI tool के रूप में XLD का परिचय दिया गया है
- CD Paranoia ripping में
cdparanoia -L -B -O [Drive Offset] [Starting Track Number]-[Ending Track Number] output_file.wavका उपयोग होता है-Bbatch mode है, जो tracks को अपने-आप अलग-अलग फ़ाइलों में बाँट देता है
- Cdda2wav, Paranoia library का उपयोग करके audio CD को सही तरह rip करने वाला tool है
- Homebrew install command
brew install cdrtoolsहै - उदाहरण command पूरी CD को एक WAV में rip करता है, CDDB lookup करता है, और cue sheet बनाता है
- macOS में command चलाने से पहले CD को unmount करना चाहिए
- Homebrew install command
- CD emphasis को noise reduction की ऐसी विधि के रूप में बताया गया है जो कुछ शुरुआती 1980s CDs और Japan pressing CDs को प्रभावित कर सकती है
- इसकी मौजूदगी
cdda2wav -Jयाcdparanoia -Qसे जाँची जाती है - Cdda2wav से ripping के दौरान correction करने के लिए
-Tflag जोड़ें
- इसकी मौजूदगी
- ImageMagick raster image और vector image files को display, convert, edit करने वाला free open source software suite है
- commands को
convert,montage,mogrifyजैसे अलग-अलग commands के रूप में चलाया जाता है - image comparison में
compare -metric ae image1.ext image2.ext null:अलग-अलग pixels की संख्या लौटाता है - thumbnail बनाने के लिए
mogrify -resize 80x80 -format jpg -quality 75 -path thumbs *.jpgका उपयोग करें - image grid
montage @list.txt -tile 6x12 -geometry +0+0 output_grid.jpgसे बनती है - EXIF हटाने के लिए
mogrify -path ./stripped/ -strip *.jpgका उपयोग होता है
- commands को
flactool, FLAC project द्वारा बनाया गया FLAC transcoding और metadata manipulation tool है- दूसरे tools की तुलना में इसका फ़ायदा यह है कि यह BWF जैसी foreign metadata embed कर सकता है
- WAV से FLAC में बदलते समय BWF metadata बनाए रखने के लिए
flac --best --keep-foreign-metadata --preserve-modtime --verify input.wavका उपयोग करें - FLAC से मूल BWF को फिर से बनाने के लिए
--bestकी जगह--decodeका उपयोग करें
1 टिप्पणियां
Hacker News की राय
थोड़ा विषय से हटकर, लेकिन मेरे हिसाब से ffmpeg अब तक बने सॉफ्टवेयर में सबसे बेहतरीन में से एक है
Fabrice Bellard जैसे प्रतिभाशाली इंजीनियर FOSS कम्युनिटी के लिए बहुत बड़ा उपहार हैं, और जिस लगभग 2 अरब डॉलर वैल्यू वाले unicorn में मैं पहले काम करता था, उसके product का बड़ा हिस्सा भी ffmpeg पर निर्भर था
https://ffmpeg.org/donations.html
QEMU, TCC, QuickJS वगैरह भी उन्होंने ही बनाए हैं
गंभीरता से कहें तो, किसी भी समय जिन devices पर उनका लिखा code चल रहा होता है, उनकी संख्या सच में अविश्वसनीय है
ffmpeg command line अच्छे guide देखने के बाद भी सिर पकड़ने पर मजबूर कर देती है, इसलिए मैं VapourSynth recommend करना चाहूंगा
https://www.vapoursynth.com/
यह optimized Python-style video filtering tool है, लेकिन उससे भी काफी ज्यादा: https://vsdb.top/
और StaxRip ffmpeg, VapourSynth, दर्जनों encoders और tools का अच्छी तरह इस्तेमाल करता है; इसी वजह से मैं Linux से Windows में reboot तक कर लेता हूं: https://github.com/staxrip/staxrip
यह अनावश्यक रूप से complex है, और हो सकता है किसी नज़रिए से पूरी संरचना समझ में आती हो, लेकिन बहुत common tasks के लिए जादुई मंत्र जैसे options जानना पड़ना ठीक नहीं है
मेरे पास शायद दर्जनों bash aliases हैं जो 150 characters वाले ffmpeg commands को दो शब्दों में बदल देते हैं
ffprobe भी समझ से परे है: 99% मामलों में इसे बिना arguments के चलाकर बस length, resolution, framerate, audio tracks की संख्या जल्दी देखनी होती है, लेकिन output का 99% compilation options जैसी पूरी तरह irrelevant चीजें होती हैं
साथ में देखने लायक resources:
https://ffmpeg.guide/ — complex FFmpeg filter graphs जल्दी और सटीक तरीके से बनाना
https://www.hadet.dev/ffmpeg-cheatsheet/ — काटना, fade in/out जोड़ना, scaling, concatenate करना आदि
किसी अज्ञात वजह से ffmpeg
-ssऔर-t/-toflags को-iसे पहले या बाद में रखने पर अलग तरह से behave करता है, और मेरे मामले में उन्हें पहले रखना बेहतर चलाoriginal text में भी यही समस्या है
non-linear graph को flat और linear command line में जबरन फिट करना अजीब है
बस ज्यादा detailed JSON configuration भी हो तो काफी बेहतर होगा
बहुत उपयोगी
ffmpeg commands बनाने के लिए मैंने ChatGPT इस्तेमाल करना शुरू किया है, और जो चाहिए उसे ढूंढना काफी तेज और आसान हो गया है
command line से सीधे कर सकूं, इसके लिए एक छोटा tool भी बनाया है: https://github.com/alexkrkn/help-cli
इससे जुड़ा video भी बनाया है: https://www.youtube.com/watch?v=pOda6TDBqcY
हाल में ffmpeg UI ढूंढते हुए मुझे Shutter Encoder मिला, और यह open source है व mac/windows support करने वाला बहुत अच्छा software निकला
आखिरकार मैंने 15 साल के 300GB personal video collection को compress करना शुरू किया
https://www.shutterencoder.com/
सब कुछ H.265 में compress कर रहा हूं, और video size कभी-कभी 1/10 तक घट जाता है। ऐसा न करने की कोई वजह है? मैंने पढ़ा है कि compressed videos play करने के लिए ज्यादा processing power चाहिए, लेकिन आगे चलकर यह बड़ा मुद्दा बनेगा या नहीं, पक्का नहीं है
इसे original files delete करने से पहले कई videos verify करने की चेतावनी मानें
हालांकि 300GB के लिए storage काफी सस्ता है, इसलिए original वैसे ही रख सकते हैं
और Plex में transcoding के बिना इस्तेमाल करने के लिए मेरे homelab में भी वह ज्यादा आसान है
यह guide deinterlacing filter के लिए
yadifrecommend करता है, लेकिन मेरी नज़र में w3fdif बेहतर लगता हैयह yadif की तरह motion tracking नहीं करता, इसलिए काफी fast है, और motion tracking से कभी-कभी बनने वाले परेशान करने वाले artifacts से बचा जा सकता है
कभी शानदार और कभी खराब result से बेहतर है कि consistently बस ठीक-ठाक result मिले
हालांकि yadif जहां दो fields देखता है, वहीं w3fdif एक बार में तीन fields consider करता है, इसलिए interlacing artifacts को बेहतर छिपाता है
अगर वैसे भी re-encode करना है, तो सीधे QTGMC तक इस्तेमाल करना बेहतर है
w3fdif shimmering पैदा कर सकता है, लेकिन yadif नहीं करता; इसलिए bwdif yadif की तरह behave करते हुए w3fdif की बेहतर field matching इस्तेमाल करता है
bwdifदरअसलyadifऔरw3fdifका hybrid हैffmpeg अपनाने की सबसे बड़ी बाधा शायद ऑफलाइन premium freemium tools और web frontends ही होंगे
साइट्स ने “avi to mp4”, “mp3 to wav” जैसे उन phrases के लिए search optimization कर रखा है जिन्हें लोग आम तौर पर Google में डालते हैं
command-line app को स्वीकार करने में उम्मीद से ज़्यादा समय लगा, क्योंकि Windows दुनिया ने हमें सिखा दिया था कि हर चीज़ के लिए GUI होना चाहिए
लोग कहते हैं कि ffmpeg जटिल है, लेकिन इसे शानदार GUI में बना देने से भी यह खास आसान नहीं हो जाता। जटिल चीज़ video compression itself है
HandBrake जैसे click-based interface की तरह आपकी जगह फैसले लेने वाले तरीके के बिना, शायद कोई भी software इसे और आसान नहीं बना सकता
पक्का नहीं, लेकिन digital video encoding और compression को पर्याप्त गहराई से सीख लेने के बाद ffmpeg में क्या करना है यह भी काफी intuitive लगने लगेगा। क्या किसी ने सच में ऐसा करके देखा है?
उस समय mkv जैसे formats या HEVC जैसे codecs नहीं थे, लेकिन कई filters के जरिए audio/video को manipulate करने का concept शानदार है और ज़्यादातर A/V conversion software ऐसे ही काम करता है
FFmpeg manual page देखना शुरू किया तो connections समझ आने लगे, और करीब एक दिन इस्तेमाल करने के बाद इसे काम में लेने लायक हो गया
मुझे command line पसंद है और मैं man pages पढ़ता हूं, शायद यह मेरे पक्ष में गया
ffmpeg शक्तिशाली है इसलिए अक्सर इस्तेमाल करता हूं, लेकिन इसकी API structure दिमाग में बैठती नहीं। कोई LLM frontend हो तो अच्छा होगा
अच्छा idea है। FFmpeg से मनचाहा काम करवाना हमेशा बोझिल लगता है
ChatGPT मददगार रहा है, लेकिन perfect नहीं था
OpenSSL options और arguments याद रखना हमेशा मुश्किल था, अब मैं बस GPT इस्तेमाल करता हूं
हालांकि operating systems के बीच सूक्ष्म फर्क छोटे issue के रूप में बाकी हैं