Avidemux/Toplu işleme
Bu sayfa toplu işlemenin Avidemux'ta nasıl yapıldığını anlatmaya çalışacaktır. "Toplu işleme" derken birden fazla video dosyasının aynı ayarlarla kaydedilmesi ve bir dosyanın işi bittiğinde diğer dosyaya geçmek için kullanıcının herhangi bir müdahalesinin gerekmemesini kastediyoruz. Örneğin birden fazla dosyanın formatını belirli bir formata değiştirmek istediğinizde burada anlatacaklarımız son derece faydalı olacaktır.
Toplu işleme yöntemleri
değiştirAVIdemux hem komut satırı kullanımını ve hem de betik yazımını (ECMAScript) desteklediği için Avidemux'ta toplu işlemenin birden fazla yolu vardır:
- Kabuk betiği/.bat dosyası veya benzer bir yöntem aracılığıyla sadece komut satırı toplu işlemesi
- Sadece JS betiği (ECMAScript) toplu işlemesi
- Komut satırı ve JS betiğinin her ikisini de kullanarak toplu işleme
Sadece komut satırını kullanarak toplu işleme
değiştirAVIdemux komut satırı sınırlı sayıda ayarın değiştirilmesine imkan verir. Ancak basit format dönüşümleri için uygundur. Ek komut satırı araçları kullanmanıza izin verir, bu sayede YouTube'a dosya yüklemenizi AVIdemux dosyaları işledikten sonra otomatikleştirebilirsiniz. Farklı işletim sistemleri ve kabuklar farklı dosya ismi kısıtları, farklı komutlar, vb. içerebildiği için aşağıdaki komut örneklerinden bazıları tüm sistemlerde/kabuklarda çalışmayabilir.
Aşağıdaki Win32 örneği (.bat dosyası) aktif klasör içindeki bütün .mp4 dosyalarını .avi'ye (Xvid+MP3) dönüştürür. Asıl dosyalar değiştirilmeyecektir. Yeni dosyaların ismi onceki_isim.mp4.avi formatında olacaktır.
set avidemux="C:\Program Files\Avidemux 2.5\avidemux2.exe" set videocodec=Xvid set audiocodec=MP3 for %%f in (*.mp4) do %avidemux% --video-codec %videocodec% --audio-codec %audiocodec% --force-alt-h264 --load "%%f" --save "%%f.avi" --quit
(eğer AVIdemux sizde farklı bir klasörde kuruluysa "C:\Program Files\Avidemux 2.5\avidemux2.exe" satırını değiştirin) Bu metni yeni bir metin dosyası oluşturup içine kopyalayın. Sonra metin dosyasının ismini bir_sey.bat olarak değiştirin. Daha sonra bu dosyayı işleyeceğiniz videoların olduğu klasöre taşıyın. Son olarak bir_sey.bat dosyasına çift tıklayın. İşleme başlayacaktır.
Bash kabuğu kullanan Linux/Unix türevi sistemlerde benzer betik şöyle olacaktır
#!/bin/bash VIDEOCODEC="Xvid" AUDIOCODEC="MP3" for FIL in `ls *mp4 | sort` ; do avidemux2 --video-codec $VIDEOCODEC --audio-codec $AUDIOCODEC --force-alt-h264 --load "$FIL" --save ${FIL%.*}.avi --quit done
(bu komutlar sonucunda bir_sey.mp4 dosyasından bir_sey.avi dosyası oluşacaktır.)
Win32'de ses ve video için belirli bir bit oranını zorlamak istiyorsanız aşağıdakileri yapın
set avidemux="C:\softa\avidemux_r6854\avidemux2.exe" set videocodec=Xvid set videobitrate=cbr=512 set audiocodec=MP3 set audiobitrate=64 for %%f in (*.mp4) do %avidemux% --video-codec %videocodec% --video-conf %videobitrate% --audio-codec %audiocodec% --audio-bitrate %audiobitrate% --force-alt-h264 --load "%%f" --save "%%f.avi" --quit
Bash kabuğu kullanan Linux/Unix türevi sistemlerde benzer betik şöyle olacaktır
#!/bin/bash VAR="batchfiles.txt" VIDEOCODEC="Xvid" AUDIOCODEC="MP3" VIDEOBITRATE="cbr=512" AUDIOBITRATE="64" for FIL in `ls *mp4 | sort` ; do avidemux2 --video-codec $VIDEOCODEC --video-conf $VIDEOBITRATE --audio-codec $AUDIOCODEC --audio-bitrate $AUDIOBITRATE --force-alt-h264 --load "$FIL" --save ${FIL%.*}.avi --quit done
(bu komutlar sonucunda bir_sey.mp4 dosyasından bir_sey.avi dosyası oluşacaktır.)
Sadece JS betiği (ECMAScript) ile toplu işleme
değiştirAVIdemux JS betiğini (ECMAScript) betik yöntemini kullanarak da işinizi otomatikleştirebilirsiniz. Bu betikler komut satırından (--run) veya grafik arayüzden (File -> Load/Run project...) çalıştırılabilir. Arayüz bütün platformlarda aynı olduğu için betikler oldukça geneldir. Tek sorun teşkil edebilecek nokta slash işaretidir. Bazı işletim sistemleri klasör ayracı olarak / işaretini kullanırken bazı işletim sistemleri de \ işaretini kullanmakatdır.
JS betikleri (ECMAScript) aracılığıyla ek grafik arayüz elemanları (dosya ve klasör seçim diyalogları) kullanılabildiği için yeni kullanıcıların rahatlıkla kullanabileceği betikler yazılabilir.
İlk yazacağımız betik bir_sey.js olacak. Bu betiği çalıştırdığınızda önce girdi klasörü ve dosya tipini (ilk diyalog), ardından çıktı klasörü ve dosya ismini soracak (ikinci diyalog). Betik girdi klasöründeki belirtilen türdeki bütün dosyaları alacak ve bu dosyaları XviD+MP3 AVI olarak çıktı klasörüne kopyalayacak.
//AD <- /* orgDir klasörünü tarayacak sonra bütün .xyz dosyalarını açacak, daha sonra bunları Xvid+MP3 AVI olarak kodlayacak Sonuç dosyalar destDir klasörüne koyulacak Using new directorySearch API */ var app = new Avidemux(); var ds = new DirectorySearch(); var srcDir; var dstDir; var reg = new RegExp(".$"); var extReg = new RegExp(".*[.](.+)$"); //bu WINDOWS için klasör ayracı! *nix için bu sep = "/"; olmalı var sep = "\\"; var fileExt; var pickedExt; var dstPath; var filesDone = 0; var filesSkip = 0; var filesErrd = 0; displayInfo("Kaynak klasörde bir dosya seçin. Seçtiğiniz dosyanın türündeki (.xyz) bütün dosyalar işlenecektir. Dosya ismi ihmal edilecek ama dosya uzantısı kullanılacaktır! \r\n\r\nörneğin AVI'leri işlemek istiyorsanız bir .avi dosyası seçtiğinizden emin olun!"); //Kaynak dosyayı seçmenizi isteyen bir diyalog açar. Dosya ismini silecek, sadece klasörü bırakacağız srcDir = fileReadSelect(); //extReg düzenli ifadesini kullanarak sadece dosyanın uzantısını alıyoruz pickedExt = srcDir.replace(extReg, "$1").toLowerCase(); displayInfo(pickedExt + "Hedef klasörü seçin ve rastgele bir dosya ismi girin. Dosya ismi ihmal edilecektir"); //Hedef klasörü seçmenizi isteyen bir diyalog açar. Dosya ismini silecek, sadece klasörü bırakacağız dstDir = fileWriteSelect(); //her seçili dosyanın sadece yol kısmını alıyoruz srcDir = pathOnly(srcDir); dstDir = pathOnly(dstDir); //eğer yol klasör ayracı karakteri ile bitiyorsa bu karakteri sil //bu normal şartlar altında birden fazla çalışmaz, ancak bir while döngüsü bunu yapabilir //böylelikle c:\temp\\\\ kodunu sonundaki \ lar silinerek c:\temp yapılabilir while(srcDir.charAt(srcDir.length-1) == sep){ srcDir=srcDir.replace(reg,""); } while(dstDir.charAt(dstDir.length-1) == sep){ dstDir=dstDir.replace(reg,""); } //directory search'e klasörü vererek ilklendir if(ds.Init(srcDir)) { //klasördeki dosya listesinin sonuna erişene kadar // --> her ds.NextFile() çağrısı aktif bir sonraki dosyaya geçilmesini sağlar // --> döngü ds.NextFIle() false döndürene kadar devam eder (bu, dosya listesinin bittiği anlamına gelir) while(ds.NextFile()) { //dosya ismini al (yol yok) dstPath=ds.GetFileName(); //yalnızca klasör olmayan geçerli dosyaları işle if(!ds.isNotFile && !ds.isDirectory && !ds.isSingleDot && !ds.isDoubleDot) { //şimdi de uzantıyı alıyoruz ext=ds.GetExtension(); //bu dosyanın uzantısı seçtiğimizle aynı mı? if(ext.toLowerCase() == pickedExt) { //çıktı dosya ismini oluştur. Kaynak dosyanın üzerine yazmayı engellemek için, klasör aynı a _ önekiyse if(srcDir.toLowerCase() == dstDir.toLowerCase()){ dstPath = dstDir + sep + "_" + ds.GetFileName() + ".avi"; }else{ dstPath = dstDir + sep + ds.GetFileName() + ".avi"; } //kaynak dosya yolunu oluştur srcPath = srcDir + sep + ds.GetFileName(); //öncelikle bu seçeneği ayarlıyoruz. Avidemux'un unpacking/time mapping işlemlerini yapmaya gerek görme ihtimaline karşı //bu seçeneği ayarlayarak dosyayı açtığımızda bu işlemin yapıldığına emin oluyoruz app.forceUnpack(); //dosyayı aç. bu işlem ayrıca bütün video filtrelerini ve kodek ayarlarını temizler app.load(srcPath); //sesin VBR olup olmadığına bak. VBR'sa zaman haritası inşa et. VBR değilse hiçbir şey yapma app.audio.scanVbr(); //eğer forceUnpack belirtilmişse bu gerekli olmayabilir. Yapılabileceğini düşünmüyorum //ancak ek olarak burada tekrar etmek güvenli app.rebuildIndex(); //bu bölümdeki bütün kodlar app tarafından oluşturulmuştur. eğer bir betik yazmak ve filtreler kullanmak istiyorsanız //zor işi yapmak için app'ı edinebilirsiniz; şöyle: // betik yazacağınız dosyalardan birini açın // istediğiniz bütün video ve ses seçeneklerini ayarlayın // file menüsünde "Save Project as"i seçin (not: avi dosyasını kaydetmeyin!!) //kaydettiğiniz iş dosyası filtreler hakkında bilgi veren bir bölüm içerecektir. burayı kopyalayın //xvid 2 pass'e yeniden kodlayın, bit oranı = 1000 (ayrıca ses için 128 = 1128 kbps, saat başına 507.6 mega) //tüm seçenekler basite ayarlanmıştır, GMC yok, Qpel yok, vb. bu sayede bağımsız basit oynatıcılar tamamdır app.video.codecPlugin("92B544BE-59A3-4720-86F0-6AD5A2526FD2", "Xvid", "2PASSBITRATE=1000", "<?xml version='1.0'?><XvidConfig><XvidOptions><threads>0</threads><vui><sarAsInput>false</sarAsInput><sarHeight>1</sarHeight><sarWidth>1</sarWidth></vui><motionEstimation>high</motionEstimation><rdo>dct</rdo><bFrameRdo>false</bFrameRdo><chromaMotionEstimation>true</chromaMotionEstimation><qPel>false</qPel><gmc>false</gmc><turboMode>false</turboMode><chromaOptimiser>false</chromaOptimiser><fourMv>false</fourMv><cartoon>false</cartoon><greyscale>false</greyscale><interlaced>none</interlaced><frameDropRatio>0</frameDropRatio><maxIframeInterval>300</maxIframeInterval><maxBframes>2</maxBframes><bFrameSensitivity>0</bFrameSensitivity><closedGop>false</closedGop><packed>false</packed><quantImin>1</quantImin><quantPmin>1</quantPmin><quantBmin>1</quantBmin><quantImax>31</quantImax><quantPmax>31</quantPmax><quantBmax>31</quantBmax><quantBratio>150</quantBratio><quantBoffset>100</quantBoffset><quantType>h.263</quantType><intraMatrix><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value></intraMatrix><interMatrix><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value></interMatrix><trellis>true</trellis><singlePass><reactionDelayFactor>16</reactionDelayFactor><averagingQuantiserPeriod>100</averagingQuantiserPeriod><smoother>100</smoother></singlePass><twoPass><keyFrameBoost>10</keyFrameBoost><maxKeyFrameReduceBitrate>20</maxKeyFrameReduceBitrate><keyFrameBitrateThreshold>1</keyFrameBitrateThreshold><overflowControlStrength>5</overflowControlStrength><maxOverflowImprovement>5</maxOverflowImprovement><maxOverflowDegradation>5</maxOverflowDegradation><aboveAverageCurveCompression>0</aboveAverageCurveCompression><belowAverageCurveCompression>0</belowAverageCurveCompression><vbvBufferSize>0</vbvBufferSize><maxVbvBitrate>0</maxVbvBitrate><vbvPeakBitrate>0</vbvPeakBitrate></twoPass></XvidOptions></XvidConfig>"); app.audio.reset(); app.audio.codec("Lame",128,20,"80 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00 "); app.audio.normalizeMode=0; app.audio.normalizeValue=0; app.audio.delay=0; app.audio.mixer="STEREO"; app.setContainer("AVI"); //bu dosyayı yaz app.save(dstPath); } else{ //bu dosyayı işlememeye karar veriyoruz //neden klasörün içindeki tüm dosyaların işlenmediğini merak etme ihtimalinize karşı bazı tanısal bilgiler whyNot = dstPath + " işlenmedi çünkü: "; if(ds.isNotFile) whyNot += "bir dosya değil, "; if(ds.isDirectory) whyNot += "bir klasör, "; if(ds.isHidden) whyNot += "gizli, "; if(ds.isArchive) whyNot += "arşiv olarak işaretlenmiş, "; if(ds.isSingleDot) whyNot += "geçerli klasör (.) için bir meta-ref, "; if(ds.isDoubleDot) whyNot += "üst klasör (..) için bir a meta-ref, "; //şimdi sebep ne? print(whyNot); } } } ds.Close(); }
Betikleri kolayca kendi başınıza oluşturabilirsiniz. Gerekli ayarları grafik arayüz aracılığıyla uygulayabilir ve sonra bütün ayarları içeren metin dosyasını oluşturmak için File -> Save Project As... yolunu izleyebilirsiniz. Sonra bu dosyayı metin editörünüzle açabilir ve gerekli kısımları yeni betiğe kopyala+yapıştır yoluyla aktarabilirsiniz (veya diğer betikteki bazı kısımların yerine koyabilirsiniz).
Komut satırı ve JS betiğinin birleşimi
değiştirSon seçenek her iki dünyanın en iyi kısımlarını birleştirmektir. Genellikle bunun için en iyi durum bütün dosyalar için çalıştıracağınız otomatikleştirilmiş betiği oluşturmaktır (diyalog yok).
Aşağıda kısa bir Win32 örneği bulunmaktadır, önce betik (tekrar bir_sey.js olarak kaydedin)
//AD <- Tanımlamak için gerekli// var app = new Avidemux(); // '''Postproc''' app.video.setPostProc(3,3,0); //''' Filtreler ''' //''' Video Kodek yapılandırması''' app.video.codecPlugin("92B544BE-59A3-4720-86F0-6AD5A2526FD2", "Xvid", "2PASSBITRATE=1000", "<?xml version='1.0'?><XvidConfig><XvidOptions><threads>0</threads><vui><sarAsInput>false</sarAsInput><sarHeight>1</sarHeight><sarWidth>1</sarWidth></vui><motionEstimation>high</motionEstimation><rdo>dct</rdo><bFrameRdo>false</bFrameRdo><chromaMotionEstimation>true</chromaMotionEstimation><qPel>false</qPel><gmc>false</gmc><turboMode>false</turboMode><chromaOptimiser>false</chromaOptimiser><fourMv>false</fourMv><cartoon>false</cartoon><greyscale>false</greyscale><interlaced>none</interlaced><frameDropRatio>0</frameDropRatio><maxIframeInterval>300</maxIframeInterval><maxBframes>2</maxBframes><bFrameSensitivity>0</bFrameSensitivity><closedGop>false</closedGop><packed>false</packed><quantImin>1</quantImin><quantPmin>1</quantPmin><quantBmin>1</quantBmin><quantImax>31</quantImax><quantPmax>31</quantPmax><quantBmax>31</quantBmax><quantBratio>150</quantBratio><quantBoffset>100</quantBoffset><quantType>h.263</quantType><intraMatrix><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value><value>8</value></intraMatrix><interMatrix><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value><value>1</value></interMatrix><trellis>true</trellis><singlePass><reactionDelayFactor>16</reactionDelayFactor><averagingQuantiserPeriod>100</averagingQuantiserPeriod><smoother>100</smoother></singlePass><twoPass><keyFrameBoost>10</keyFrameBoost><maxKeyFrameReduceBitrate>20</maxKeyFrameReduceBitrate><keyFrameBitrateThreshold>1</keyFrameBitrateThreshold><overflowControlStrength>5</overflowControlStrength><maxOverflowImprovement>5</maxOverflowImprovement><maxOverflowDegradation>5</maxOverflowDegradation><aboveAverageCurveCompression>0</aboveAverageCurveCompression><belowAverageCurveCompression>0</belowAverageCurveCompression><vbvBufferSize>0</vbvBufferSize><maxVbvBitrate>0</maxVbvBitrate><vbvPeakBitrate>0</vbvPeakBitrate></twoPass></XvidOptions></XvidConfig>"); //''' Ses ''' app.audio.reset(); app.audio.codec("Lame",128,20,"80 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00 "); app.audio.normalizeMode=0; app.audio.normalizeValue=0; app.audio.delay=0; app.audio.mixer="STEREO"; app.setContainer("AVI"); setSuccess(1); //app.Exit(); //Betiğin sonu
Win32 örneği (.bat dosyası) aktif klasördeki bütün .mp4 dosyalarını .avi'ye (XviD+MP3) dönüştürecektir. Asıl dosyalar değiştirilmeyecek ve yeni dosyalar bir_sey.mp4.avi formatıyla isimlendirilecektir.
set avidemux="C:\Program Files\Avidemux 2.5\avidemux2.exe" for %%f in (*.mp4) do %avidemux% --force-alt-h264 --load "%%f" --run something.js --save "%%f.avi" --quit
Bash kabuğu kullanan Linux/Unix türevi sistemlerde benzer betik şöyle olacaktır
#!/bin/bash for FIL in `ls *mp4 | sort` ; do avidemux2 --force-alt-h264 --load "$FIL" --run something.js --save ${FIL%.*}.avi --quit done
(bu kodlar bir_sey.mp4 dosyasından bir_sey.avi dosyası oluşturacaktır)
Kendi birleşik toplu ayarlarınızı oluştururken, komut satırı parametrelerinin sırasının her zaman --load bir_sey, --run bir_sey ve --save bir_sey şeklinde olmasına özen gösterin (AVIdemux bu seçenekleri verilen sırada çalıştıracaktır).
İpuçları
değiştir- Dosyaları grafik arayüz olmadan işlemek istiyorsanız avidemux2'yi avidemux2_cli'yle değiştirebilirsiniz
- Bütün diyalogları bloke etmek istiyorsanız --nogui seçeneğini kullanabilirsiniz (ilk seçenek olmalıdır!)