ffmprovisr: FFmpeg komutlarını kolayca oluşturmaya yarayan tarif koleksiyonu
(amiaopensource.github.io)- ffmprovisr, FFmpeg komutu yazmakta zorlanan kullanıcıların bir işlem seçerek örnek komutu ve her bayrağa ilişkin açıklamaları görebildiği bir komut oluşturma yardımcı sitesidir
- Tarifler,
ffmpeg,ffplay,ffprobeodağında girdi dosyası, codec, filtre, akış eşleme ve çıktı kapsayıcısı gibi öğeleri parçalarına ayırarak gösterir - Kapsamı yeniden kapsülleme/transcoding işlemlerinden kesme-birleştirme, altyazı-filigran, küçük resim-GIF, test dosyaları, metadata-checksum-QCTools raporlarına kadar geniştir
- Kendi arama özelliği yoktur; ancak tüm tarifleri açtıktan sonra tarayıcı aramasıyla gerekli anahtar kelimeyi bulma yöntemi anlatılır
- FFmpeg dışında CDDA ripping, ImageMagick,
flacgibi araçları da ele alarak dijital koruma iş akışları için pratik komut koleksiyonu olarak kullanılabilir
ffmprovisr neler sunuyor
- ffmprovisr, işleme göre örnek komutlar ve seçenek açıklamaları sunarak FFmpeg komutlarını elle birleştirme yükünü azaltır
- Kullanıcı, işlem düğmesine basarak tek bir komuta veya ilgili komut listesine gider; ardından örnek komutu ve bayrakların tek tek ne yaptığını kontrol eder
- Sayfanın kendisinde arama işlevi yoktur; tüm tarifleri açtıktan sonra
ctrl+fveyacmd+file tarayıcı araması yapılması önerilir - Temel başvuru kaynakları olarak FFmpeg resmi web sitesi, Reto Kromer’in installation instructions, Command Line Crash Course ve explainshell.com bağlantıları verilir
- Lisansı Creative Commons Attribution 4.0 International License’tır
FFmpeg komutlarını okumanın temel yolu
- FFmpeg kurulduktan sonra komut isteminde
ffmpegyazılarak çağrılır - Komutlar genellikle bayrak ve değer çiftlerinden oluşur
-i input_file.extiçinde-i, girdi dosyasını belirten bayraktır;input_file.extise hedef dosyadır-c:v proresiçinde-c:v, video akışı kodlamasını belirtir;proresise kullanılacak codec’tir
- Çıktı dosyası adı komutun sonunda yer alır ve ayrı bir çıktı bayrağı olmadan dosya adıyla belirtilir
ffmpegvideoyu kaydeder;ffplayise oluşturulan videoyu kaydetmeden oynatabilir- SMPTE bars kaydetme örneği:
ffmpeg -f lavfi -i smptebars=size=640x480 -t 5 output_file - SMPTE bars oynatma örneği:
ffplay -f lavfi smptebars=size=640x480 - FFmpeg örneğinde
-i, kayıt süresi-t 5ve çıktı dosyası gerekir; FFplay örneğinde ise-igerekmez
- SMPTE bars kaydetme örneği:
Hataları azaltmak için kontrol noktaları
- Çıktı dosyasının açıldığını, oynatıldığını ve amaçlandığı gibi görünüp duyulduğunu doğrulamak gerekir
- Çıktı uzantısı amaçlanan codec ile uyumlu olmalıdır; bazı uzantılar FFmpeg’de belirli codec varsayılanlarına yol açar
- Örneğin
.mp4, varsayılan olarak H.264 kodlamasına ayarlanabilir
- Örneğin
"Error: No such file or directory"; yanlış dizin, yazım hatası, eksik boşluk veya hatalı yapıştırılmış bayrak nedeniyle oluşabilir- macOS’te Downloads klasörüne gitmek için
cd $HOME/Downloadskullanılır - Kopyalayıp yapıştırılan komut normal görünse bile hata verirse, komutu komut satırında yeniden elle yazmak önerilir
- macOS’te Downloads klasörüne gitmek için
"Could not find tag for codec", çıktı uzantısıyla uyumlu olmayan bir ses veya video codec’ine sahip dosyayı yeniden kapsüllemeye çalışırken ortaya çıkar- Önce uygun bir codec’e transcoding yapılabilir veya uzantının doğru codec’e otomatik kodlama yapacağından eminseniz
-c copykaldırılabilir
- Önce uygun bir codec’e transcoding yapılabilir veya uzantının doğru codec’e otomatik kodlama yapacağından eminseniz
"Killed", dosya sunucu belleği kapasitesini aştığında görülebilir- Uzak sunucuda bellek kapasitesini artırarak çözülebilir
- Yerel sunucuda FFmpeg sürümünü güncel tutmak ve belleği yoğun kullanan başka programlarla aynı anda çalıştırmamak daha iyidir
- Filtre kullanırken
"Error splitting argument list: option not found"çıkarsa tırnak kullanımı ve filtre grafiği biçimi kontrol edilmelidir - Filtreler akışın yeniden kodlanmasını gerektirdiğinden, dosya akışlarını doğrudan kopyalayan
-c copyile birlikte kullanıldığında sorun çıkabilir
Filtre grafikleri, akış eşleme ve varsayılan codec’ler
- Döngü içinde FFmpeg toplu işleri çalıştırırken, standart girdi etkileşiminin varsayılan davranışını geçersiz kılmak için girdiden önce
-nostdineklenebilir- Örnek:
ffmpeg -nostdin -i input_file ...
- Örnek:
- FFmpeg, çıktı dosyası biçimine göre codec ve codec parametresi varsayılanlarını otomatik ayarlar
.avi: sesmp3, videompeg4.mkv: sesac3, video H.264.mov: ses AAC, video H.264.mp4: ses AAC, video H.264.mpg: sesmp2, videompeg1video.mxf: sespcm_s16le, videompeg2video.wav: sespcm_s16le
- Filtre grafiği,
-vfveya-afsonrasında gelen filtre adı ve seçeneklerin birleşimidir-vf,-filter:viçin bir kısaltmadır- Video filtresi örneği
hflip, ses filtresi örneğiamergedir - Birden fazla filtre virgülle bağlanır; birden fazla filtre zinciri noktalı virgülle ayrılır
-vf "fieldmatch,yadif,decimate", inverse telecine işlemi için kullanılan tek bir filtre zinciridir- Girdi veya çıktı sayısı birden fazlaysa
-vfyerine-filter_complexkullanılmalıdır - Düz tırnak kullanılmalı, kıvrımlı tırnaklardan kaçınılmalıdır
- Akış eşleme, girdi dosyasındaki video, ses, altyazı, veri ve ek akışlardan hangilerinin çıktıya dahil edileceğini belirler
- FFmpeg
a,v,s,d,takış türlerini tanır -map 0:v, ilk girdi dosyasındaki tüm video akışlarını seçer-map 0:3, ilk girdi dosyasındaki dördüncü akışı seçer-map 0:a:2, ilk girdi dosyasındaki üçüncü ses akışını seçer- Eşleme belirtilmezse, video dosyaları için varsayılan davranış çıktıya yalnızca 1 video ve 1 ses akışı almaktır
- Tüm akışları eşlemek için
-map 0kullanılır -map 0:a?gibi?eklenirse toplu işlem sırasında sesi olmayan dosyalar da hata vermeden işlenebilir
- FFmpeg
Kapsayıcı değiştirme ve transkodlama
- Dosya yeniden sarmalama işlemi
ffmpeg -i input_file.ext -c copy -map 0 output_file.extile yapılır- İçerideki video, ses ve altyazı verilerini değiştirmeden başka bir kapsayıcı biçimine taşır
- Yeniden sarmalama, remuxing veya re-multiplexing olarak da adlandırılır
- Birden fazla ses parçası gibi tüm akışları koruyabilmek için
-map 0kullanılmalıdır - Bazı kapsayıcılar yalnızca belirli akış kodlamalarını barındırabildiğinden, yeniden kodlama olmadan yeniden sarmalama mümkün olmayabilir
- Broadcast WAV oluşturma,
-write_bext 1ve-metadata field_name='Content'ile BEXT chunk ve ilgili metaverileri yazar- Sık kullanılan alanlar
description,originator,originator_reference,origination_date,origination_time,coding_history,IARLşeklindedir - BWF metaveri alanlarında karakter sayısı sınırları vardır;
OriginatorReferenceen fazla 32 karakterdir
- Sık kullanılan alanlar
- DV codec’li videoyu
.dvdosyasına yeniden sarmalarken, DV akışı içindeki kaynak metaverilerinin istemeden kaldırılmasını önlemek için-f rawvideo -c:v copykullanılır - Apple ProRes LT transkodlama örneği
-c:v prores -profile:v 1 -vf yadif -c:a pcm_s16leşeklindedir- ProRes 422 profilleri
0Proxy,1LT,2Standard,3HQ olarak ayrılır - ProRes kapsayıcıları olarak QuickTime
.mov, Matroska.mkv, MXF.mxfFFmpeg tarafından desteklenir
- ProRes 422 profilleri
- H.264 transkodlama örneği
-c:v libx264 -pix_fmt yuv420p -c:a aacşeklindedirlibx264varsayılanımediumpreset’i ve CRF 23’tür-pix_fmt yuv420p, QuickTime ve FFmpeg tabanlı olmayan çoğu oynatıcıyla uyumluluk için 4:2:0 chroma subsampling belirtir- Akış optimizasyonu için
-movflags +faststarteklenir - Daha yüksek kalite örneği
-preset veryslow -crf 18olup CRF 18 çoğu zaman “görsel olarak kayıpsız” kabul edilir
- Nvidia GPU tabanlı H.264/H.265 kodlama
h264_nvencveyahevc_nvenckullanır- Nvidia sabit işlevli donanımı CPU kodlamaya göre 10 kat performans sunabilir, ancak düşük bitrate kalite optimizasyonu için daha fazla parametre gerekir
- HEVC, yaklaşık 2015 sonrası GPU’larda desteklenen daha verimli bir codec olarak açıklanır
- H.265/HEVC transkodlama
-c:v libx265 -pix_fmt yuv420p -c:a copykullanırlibx265varsayılanımediumpreset’i ve CRF 28’dir- H.265’te CRF 28, H.264’te CRF 23’e karşılık gelir ve dosya boyutu yaklaşık yarıya inebilir
- Koruma amaçlı kayıpsız örnek, FFV1 Version 3’ü Matroska kapsayıcısına koyup giriş
framemd5çıktısını da birlikte oluşturan komuttur-map 0tüm akışları eşler-dn, Matroska’nın izin vermediği veri akışlarını hariç tutar-slicecrc 1, kod çözücünün bozuk slice’ları algılayabilmesi için CRC bilgisi ekler-f framemd5 -an, her video karesi için MD5 sağlama toplamı oluşturur
Video ve ses özelliklerini değiştirme
- En-boy oranı değiştirme tarifi padding filtresini kullanır
- 4:3’ü 16:9 yapmak için pillarbox uygulanır
- 16:9’u 4:3 yapmak için letterbox uygulanır
- Sessiz videolarda
-c:a copyyerine-ankullanılabilir
- SD’yi HD’ye dönüştürme örneği
colormatrix=bt601:bt709,scale=1440:1080:flags=lanczos,pad=1920:1080:240:0olmak üzere üç filtre kullanır- Rec. 601’den Rec. 709’a luma katsayılarını değiştirir
- Lanczos ölçekleme varsayılan bilinear’dan daha yavaştır, ancak daha iyi sonuç verir
- Interlaced kaynaklar için ölçeklemeden önce
yadifile deinterlace yapılması önerilir
- Görüntüleme en-boy oranı,
-aspect 4:3gibi seçeneklerle kapsayıcı düzeyinde değiştirilebilir-c:v copyile birlikte kullanıldığında, kodlanmış karelerin içindeki en-boy oranını değil kapsayıcıda saklanan en-boy oranını etkiler
- Renk uzayı dönüşümü
colormatrix=src:dstfiltresini kullanır- İzin verilen değerler arasında
bt601,smpte170m,bt470bg,bt709,bt2020bulunur - Renk uzayı metaverisi gömmek için
-color_primaries,-color_trc,-colorspacekullanılır - Gerçekte Rec.601 olan bir dosyaya Rec.709 etiketi de takılabileceğinden dikkat gerekir
- Metaveri etiketlerini
libx264veyalibx265yazdığı için yeniden kodlama olmadan eklenemez
- İzin verilen değerler arasında
- Hız değiştirme
setptsveatempoyu birlikte kullanır- Örnek, 24fps’i 25fps’e çevirirken ses perdesini koruyan PAL’e hızlandırılmış bir kopya oluşturmadır
- Fade işlemi için
fadeveafadefiltreleri kullanılır; filtre kullanımı nedeniyle video ve sesin yeniden kodlanması gerekir - Ses çıkarma,
-c:a copy -vnile video olmadan ses akışını kayıpsız çıkarır - İki ses parçasını birleştirme
amergeve-filter_complexkullanır- YouTube otomatik altyazıları gibi tek bir ses parçası bekleyen sonraki işlemler için yararlı olabilir
- İstenen parçaları doğrulamak için betik yazmadan önce
ffprobeçalıştırılması önerilir
- Ses yüksekliği analizi ve normalizasyon için
loudnormfiltresi kullanılır- JSON çıktısı, 2-pass normalizasyonun girdi değerleri olarak kullanılabilir
- Varsayılanların PBS’in önerdiği hedef ses yüksekliğiyle iyi örtüştüğü açıklanır
- 1-pass hızlıdır, ancak 2-pass’e göre daha az doğrudur
- CD pre-emphasis, RIAA equalization, ses yeniden örnekleme ve 192kHz WAV’ı 96kHz olarak zorla yorumlama tarifleri de bulunur
Kesme, birleştirme, segmentler
- Aynı teknik özelliklere sahip dosyaları birleştirirken concat demuxer kullanılır
ffmpeg -f concat -i mylist.txt -c copy output_file- Birleştirilecek dosyalar aynı codec ve teknik özelliklere sahip olmalı, sonuç dosyası mutlaka önizlenmelidir
- Mutlak yol kullanmak için
-safe 0eklenir
- Farklı dosya biçimlerine veya codec’lere sahip dosyaları birleştirirken
concatfiltresi ve-filter_complexkullanılır- Girdi dosyalarının kapsayıcıları, codec’leri, chroma subsampling’i, kare hızları vb. farklı olabilir
- Temel örnek yalnızca aynı çözünürlükte doğru çalışır
- Kare hızları farklıysa çıktı değişken kare hızlı olabilir
- Çözünürlükler farklıysa concat öncesinde
scaleile eşitlenir; SD ve HD birleştirirken SD’ye pillarbox uygulanabilir
- Dosya bölme segment muxer ile yapılır
-segment_time 60, en fazla 60 saniyelik segmentler oluşturur%03d, 3 basamaklı sıfır dolgulu sayı içeren dosya adları üretir
- Yeniden kodlama olmadan kırpma
-ss,-to,-t,-c copy,-map 0kullanır- H.264 gibi kareler arası codec’lerde başlangıç, i-frame’e göre en yakın noktadan yapılabilir
-sseof -5, dosyanın sonundan 5 saniye öncesinden itibaren kopyalama yöntemidir
- Ses dosyasının başındaki sessizliği kaldırma
silenceremove=start_threshold=-57dB:start_duration=1:start_periods=1kullanır-57dB, analog hiss’i hesaba katmak için uygun bir seviye olarak sunulur- Filtre kullanımı nedeniyle ses yeniden kodlanır
- Ses dosyasının sonundaki sessizliği kaldırma
areverse,silenceremove,areversesırasıyla yapılırsilenceremovebaşlangıçtaki sessizliği kaldırmaya daha uygun olduğundan ses ters çevrilip tekrar geri çevrilir
Geçmeli video işleme
- SD NTSC kaynaktan HD H.264 erişim dosyası oluştururken
yadif,scale,pad,format=yuv420pbirlikte kullanılıryadifbir deinterlace filtresidirscale=1440:1080:flags=lanczosgörüntüyü 1440x1080’e ölçeklerpad=1920:1080:(ow-iw)/2:(oh-ih)/2, 4:3 girdiyi 16:9 çıktı karesine uyacak şekilde dolgu ekler
- Genel deinterlace örneği
-vf "yadif,format=yuv420p"şeklindedirformat=yuv420p, H.264 oynatma uyumluluğu için 4:2:0 kroma alt örneklemesini belirtir- FFmpeg’de
yadifdışındabwdif,w3fdif,kerndeint,nnedideinterlacer’ları da vardır
- Alanları karelere ayıran deinterlace için
idet,bwdif,format=yuv420pkullanılır- Hareketin yoğun olduğu geçmeli videolarda kaynağın görsel cadence’ini korumak için tercih edilir
idetalan sırasını algılarbwdifvarsayılan olarak her alan için bir kare çıktılar
- Inverse telecine,
fieldmatch,yadif,decimatekullanır- 3:2 pulldown’ı geri alarak 29.97fps geçmeli videoyu özgün film kaynağının 24fps kare hızına geri döndürür
- 29.97i dosyaya uygulandığında çıktı kare hızı fiilen 23.976fps olur
- Alan sırasını değiştirmek için
setfield=tffveyasetfield=bffkullanılır- Video filtresi kullanıldığı için
-c copykullanılamaz; yeniden kodlama gerekir
- Video filtresi kullanıldığı için
- Geçmeli desenini kontrol etmek için
ffmpeg -i input_file -filter:v idet -f null -ile çıktı dosyası olmadan analiz yapılır
Filigran, altyazı, küçük resim, GIF
- Metin filigranı
drawtextfiltresiyle oluşturulurfontfile,fontsize,text,fontcolor,alpha,x,yseçenekleri belirtilirx=(w-text_w)/2:y=(h-text_h)/2, video boyutundan bağımsız olarak ortalar
- Görsel filigranı
overlay=main_w-overlay_w-5:5ile sağ üste yerleştirilebilir - Burn-in timecode için
drawtextintimecode,box,boxcolor,rateseçenekleri kullanılır- Başlangıç timecode’u
hh:mm:ss[:;.]ffbiçimindedir
- Başlangıç timecode’u
- Altyazı dosyası gömmek için
-i subtitles_file -c copy -c:s mov_textkullanılırmov_text, MP4 ve MOV konteynerlerinde çalışır- MKV konteynerinin izin verdiği biçimler
ASS,SRT,SSAdır
- Tek bir küçük resim
-ss 00:00:20 -vframes 1 thumb.pngile çıkarılır - Her 1 dakikada bir küçük resim oluşturmak için
-vf fps=1/60 out%d.pngkullanılır - Görüntü dizisini GIF’e dönüştürürken
image2,-framerate,-pattern_type glob,scalekullanılır - Yüksek kaliteli GIF iki aşamada oluşturulur
- İlk komut
palettegenile özel bir palet oluşturur - İkinci komut
paletteuseile paleti uygular - Daha basit yöntem
-vf "fps=10,scale=500:-1"kullanmaktır; ancak dithering daha belirgin olur ve dosya boyutu daha küçük olur
- İlk komut
Görüntü dizisi, skoplar, OCR
- Bir görüntü dizisini 10-bit sıkıştırılmamış videoya dönüştürürken
-f image2 -framerate 24 -i input_file_%06d.ext -c:v v210kullanılırimage2demuxer’ının varsayılan kare hızı 25fps’dir%06d, altı haneli sayısal dosya adlarını artan sırayla okur
- Bir görüntü ve ses dosyasını birleştirip video oluştururken
-loop 1,-shortest,-vf scale=1280:720kullanılır- Ses dosyasını YouTube gibi platformlara yüklemek istediğinizde yararlı olabilir
ffplay -f lavfive filtreler kullanılarak ses bit derinliği görselleştirmesi, desibel grafiği, yayın aralığı dışındaki piksellerin gösterimi ve vectorscope gösterimi yapılabilirtblend=all_mode=difference128vehstack, iki giriş videosunun zamansal farklarını yan yana gösterirxstack, birden fazla video kaynağını dikey veya yatay olarak yığan bir çıktı penceresi oluşturmak için kullanılır;vrecordda kullanılan çıktı penceresiyle aynı tür amaçlar için yararlıdır- OCR örneği, tanınan metni video üzerine göstermek için
ocrfiltresi vedrawtextkullanır - OCR veri çıktısı
ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=input_file,ocr"biçiminde ekrana yazdırılır
Meta veri, sağlama toplamı, koruma işlemleri
- Teknik meta veri çıkarma
ffprobe -i input_file -show_format -show_streams -show_data -print_format xmlile yapılır- Çıktı biçimi olarak XML dışında JSON ve flat de kullanılabilir
- Meta veri kaldırmak için
-map_metadata -1 -c:v copy -c:a copykullanılır- Video ve ses kopyalanır, meta veri kopyalanmaz
- Bash toplu işleme
.shdosyası vefordöngüsüyle yapılır- Örnek:
for file in *.mxf; do ffmpeg -i "$file" -map 0 -c copy "${file%.mxf}.mov"; done .shdosyası ve işlenecek.mxfdosyaları aynı dizinde olmalı ve komut o dizinden çalıştırılmalıdır- Özyinelemeli işleme için
find input_directory -iname "*.mxf" -exec ffmpeg -i {} -map 0 -c copy {}.mov \;kullanılabilir
- Örnek:
- Windows’ta toplu işleme PowerShell
.ps1betiğiyle yapılır- Örnek,
.mp4dosyalarının listesini oluşturur ve her dosyanın uzantısını.mkvolarak değiştirip yeniden sarmalar ffmpegin tam yol olmadan çağrılabilmesi için doğru şekilde ayarlanmış olması gerekir
- Örnek,
- Dekoder hatalarını kontrol etmek için
ffmpeg -i input_file -f null -ile çıktı dosyası olmadan decode edilir ve hatalar ekrana yazdırılır - FFV1 Version 3 fixity kontrolü
-report -i input_file -f null -ile CRC checksum mismatch olup olmadığını kontrol eder- Frame CRC, FFV1 Version 3’te varsayılan olarak etkindir
- Kare bazlı video MD5’i
-f framemd5 -anile oluşturulur - Ses örneği grupları bazında MD5,
asetnsamples=n=48000 -f framemd5 -vnile oluşturulur- Örnek grubu sayısının medyanın sample rate’iyle eşleştirilmesi iyi bir uygulama olarak sunulur
- Varsayılan olarak ses 16-bit PCM’e transcode edilerek framemd5 oluşturulur
- Stream MD5, video ve ses stream’leri ayrı ayrı
-mapedilip-c copy -f md5ile oluşturulabilir- Konteyner meta verisi değişikliklerinden bağımsız olarak A/V bilgi bütünlüğünü doğrulamak için kullanılır
streamhash, tüm stream’ler için stream bazında hash çıktısı verir- Hangi stream’den kaç tane olduğunu bilmeye gerek olmadığı için mixed born-digital material hash’lemede yararlıdır
- QCTools raporu,
ffprobe -f lavfiilesignalstats,cropdetect,idet,psnr,ssim,ebur128,astatsvb. kullanılarak.qctools.xml.gzoluşturur- Sesi olan ve olmayan dosyalar için ayrı komutlar sağlanır
- EIA-608 Line 21 kapalı altyazı çıkarma,
readeia608filtresi veffprobeile hex değerlerini CSV olarak çıktılar
Test dosyaları ve diğer FFmpeg örnekleri
- Test videoları
mandelbrot,smptebars,testsrc,smptehdbarsgibi lavfi girdileriyle oluşturulur veya oynatılır- Mandelbrot örneği 1280x720, 25fps, 10 saniyelik H.264 çıktısıdır
- SMPTE bars örneği 720x576, 25fps, 10 saniyelik ProRes çıktısıdır
- HD SMPTE bars oynatma:
ffplay -f lavfi -i smptehdbars=size=1920x1080 - VGA SMPTE bars oynatma:
ffplay -f lavfi -i smptebars=size=640x480
- Sinüs dalgası test sesi,
sine=frequency=1000:sample_rate=48000:duration=5vepcm_s16leile bir WAV dosyası oluşturur - SMPTE bars ve 1kHz sinüs dalgasını birleştiren test videosu, iki lavfi girdisi ile
-c:v ffv1,-c:a pcm_s16lekullanır - Bozulma test dosyası,
-bsf noise=1 -c copyile paket içeriğini kasıtlı olarak bozar ancak container’ı bozmaz - Conway's Game of Life,
ffplay -f lavfi life=...ile simüle edilir;ffmpegve-t 5kullanılırsa belirli bir bölüm kaydedilebilir - İki videonun algısal benzerlik karşılaştırması
signature=detectmode=full:nb_inputs=2filtresini kullanır - Girdi videosunun algısal hash’i,
signature=format=xml:filename="output.xml"ile bir XML dosyası oluşturur - Görüntü dizileri,
ffplay -framerate 5 input_file_%06d.extile video oluşturmadan doğrudan oynatılabilir - Ses ve video kanallarını ayırmak için
-map 0:v:0ve-map 0:a:0kullanılır - Ses ve video kanallarını birleştirmek için
-map 0:v -map 1:a -c copyile ilk dosyanın videosu ve ikinci dosyanın sesi birleştirilir - DVD erişimi için ISO oluşturmaya yönelik MPEG dosyası
-aspect 4:3 -target ntsc-dvd output_file.mpgile oluşturulur;dvdauthorkurulumu gerekir - YDIF tabanlı sahne algılama için CSV,
ffprobevesignalstatsinlavfi.signalstats.YDIFdeğerlerini yazdırır - head switching noise,
drawbox=w=iw:h=7:y=ih-h:t=maxile karenin altına siyah bir kutu çizilerek gizlenebilir - RTMP hedefine canlı yayın yaparken aynı anda yerel MP4 kaydı almak için
teemuxer kullanılır- Girdi 1280px genişliğe ölçeklenir ve belirtilen süreden sonra stream sonlandırılır
- Örnekte, bunun yaklaşık 4 yıl boyunca gerçek bir TV programının canlı yayınında her gün kullanıldığına dair bir not yer alır
- Belirli decoder, encoder, demuxer, muxer ve filtre bilgileri
ffmpeg -h type=nameile kontrol edilir- Örnekler
encoder=libx264,decoder=mp3,muxer=matroska,demuxer=mov,filter=cropşeklindedir
- Örnekler
FFmpeg ile birlikte tanıtılan ilgili araçlar
- CDDA ripping aracı, CD sürücü offset’ini doğrulama ve ses CD’lerini doğru şekilde rip etme konularını ele alır
- Farklı CD sürücü modellerinin okumaya başladığı konumlar farklı olduğundan, aynı içeriğin checksum doğrulaması için offset düzeltmesi gerekir
- Sürücü tanımlama
cdda2wav -scanbus,cdda2wav,cdparanoia -vsQile kontrol edilebilir - Offset değeri Accurate Rip CD drive offset list üzerinden bulunur
- macOS GUI aracı olarak XLD tanıtılır
- CD Paranoia ile ripping,
cdparanoia -L -B -O [Drive Offset] [Starting Track Number]-[Ending Track Number] output_file.wavkomutunu kullanır-B, parçaları otomatik olarak ayrı dosyalara bölen batch modudur
- Cdda2wav, ses CD’lerini doğru şekilde rip etmek için Paranoia library kullanan bir araçtır
- Homebrew kurulum komutu
brew install cdrtoolsşeklindedir - Örnek komut, tüm CD’yi tek bir WAV olarak rip eder, CDDB sorgular ve cue sheet oluşturur
- macOS’te komutu çalıştırmadan önce CD’nin unmount edilmesi gerekir
- Homebrew kurulum komutu
- CD emphasis, bazı erken 1980’ler CD’lerini ve Japon baskı CD’leri etkileyebilen bir gürültü azaltma yöntemi olarak açıklanır
- Varlık kontrolü
cdda2wav -Jveyacdparanoia -Qile yapılır - Cdda2wav ile ripping sırasında düzeltmek için
-Tbayrağı eklenir
- Varlık kontrolü
- ImageMagick, raster ve vektör görüntü dosyalarını görüntülemek, dönüştürmek ve düzenlemek için ücretsiz ve açık kaynaklı bir yazılım koleksiyonudur
- Komutlar
convert,montage,mogrifygibi ayrı komutlar olarak çağrılır - Görüntü karşılaştırma,
compare -metric ae image1.ext image2.ext null:ile farklı piksel sayısını döndürür - Küçük resim oluşturma
mogrify -resize 80x80 -format jpg -quality 75 -path thumbs *.jpgkullanır - Görüntü ızgarası
montage @list.txt -tile 6x12 -geometry +0+0 output_grid.jpgile oluşturulur - EXIF kaldırma
mogrify -path ./stripped/ -strip *.jpgkullanır
- Komutlar
flacaracı, FLAC projesi tarafından oluşturulan FLAC transcoding ve metadata işleme aracıdır- Diğer araçlara kıyasla BWF gibi foreign metadata gömebilme avantajına sahiptir
- WAV’dan FLAC’a dönüştürürken BWF metadata’sını korumak için
flac --best --keep-foreign-metadata --preserve-modtime --verify input.wavkullanılır - FLAC’tan özgün BWF’yi yeniden oluşturmak için
--bestyerine--decodekullanılır
1 yorum
Hacker News yorumları
Konudan biraz sapıyorum ama ffmpeg’in şimdiye kadar yapılmış en üst düzey yazılımlardan biri olduğunu düşünüyorum
Fabrice Bellard gibi yetenekli bir mühendis FOSS topluluğu için büyük bir armağan; daha önce çalıştığım, değeri yaklaşık 2 milyar dolar olan unicorn’da da ürünün büyük bir kısmı ffmpeg’e dayanıyordu
https://ffmpeg.org/donations.html
QEMU, TCC, QuickJS gibi şeyleri de yapan kişi
Ciddi konuşmak gerekirse, herhangi bir anda onun yazdığı kodun çalıştığı cihaz sayısı gerçekten akıl almaz düzeyde
ffmpeg komut satırı, iyi rehberlere baksanız bile hâlâ insanı saç baş yoldurduğu için VapourSynth önermek isterim
https://www.vapoursynth.com/
Optimize edilmiş Python tarzı bir video filtreleme aracı, ama bundan çok daha fazlası da var: https://vsdb.top/
Ayrıca StaxRip; ffmpeg, VapourSynth, onlarca encoder ve aracı iyi kullanıyor; sırf bu yüzden Linux’tan Windows’a yeniden başlatıyorum: https://github.com/staxrip/staxrip
Gereksiz derecede karmaşık; bir açıdan bakınca yapının tamamı mantıklı olabilir ama çok yaygın işleri yapmak için büyü formülü gibi seçenekleri bilmek zorunda olmak uygun değil
150 karakterlik ffmpeg komutlarını iki kelimeye indiren onlarca bash alias’ım vardır
ffprobe da akıl alır gibi değil; kullanımın %99’u argümansız çalıştırıp uzunluk, çözünürlük, frame rate ve ses parçası sayısını hızlıca görmek iken çıktının %99’u derleme seçenekleri gibi tamamen alakasız şeyler
Birlikte bakılabilecek kaynaklar:
https://ffmpeg.guide/ — karmaşık FFmpeg filtre grafiklerini hızlı ve doğru şekilde oluşturma
https://www.hadet.dev/ffmpeg-cheatsheet/ — kesme, fade in/out ekleme, ölçekleme, birleştirme vb.
Bilinmeyen bir nedenle ffmpeg,
-ssve-t/-tobayraklarını-i’den önce mi sonra mı koyduğunuza bağlı olarak farklı davranıyor; bende önce koymak daha iyi sonuç verdiOrijinal metinde de aynı sorun var
Doğrusal olmayan bir grafiği düz ve doğrusal bir komut satırına zorla sığdırmak tuhaf
Daha ayrıntılı bir JSON yapılandırması bile çok daha iyi olurdu
Çok faydalı
ffmpeg komutları oluştururken ChatGPT kullanmaya başladım; gereken şeyi bulmak çok daha hızlı ve kolay oluyor
Komut satırından doğrudan yapabilmek için küçük bir araç da yaptım: https://github.com/alexkrkn/help-cli
İlgili bir video da hazırladım: https://www.youtube.com/watch?v=pOda6TDBqcY
Yakın zamanda bir ffmpeg UI ararken Shutter Encoder’ı keşfettim; açık kaynaklı, mac/windows destekleyen çok iyi bir yazılımmış
Sonunda 15 yıllık, 300 GB’lık kişisel video arşivimi sıkıştırmaya başladım
https://www.shutterencoder.com/
Hepsini H.265’e sıkıştırıyorum ve video boyutu bazen 1/10’a kadar düşüyor. Bunu yapmamam için bir neden var mı? Sıkıştırılmış videoları oynatmak için daha fazla işlem gücü gerektiğini okudum ama ileride büyük bir sorun olur mu emin değilim
Bunu, orijinalleri silmeden önce birden çok videoyu doğrulamanız gerektiğine dair bir uyarı olarak alın
Yine de 300 GB ise depolama yeterince ucuz; orijinalleri olduğu gibi saklayabilirsiniz
Ayrıca Plex’te transcoding olmadan kullanmak için benim homelab’imde de bu seçenek daha kolay
Bu rehber deinterlacing filtresi olarak
yadiföneriyor ama benim gözüme w3fdif daha iyi görünüyoryadif gibi hareket takibi yapmadığı için oldukça hızlı ve hareket takibinin bazen ürettiği rahatsız edici artefact’lardan kaçınabiliyor
Bence bazen harika bazen kötü sonuçlardansa, tutarlı şekilde vasat sonuçlar daha iyi
Ancak yadif’in iki field’a bakmasının aksine w3fdif aynı anda üç field’ı dikkate alıyor ve interlacing artefact’larını daha iyi gizliyor
Zaten yeniden encode edecekseniz, doğrudan QTGMC kullanmak daha iyi
w3fdif titreme/parıldama etkisi yaratabilir ama yadif bunu yapmaz; bu yüzden bwdif, yadif gibi davranırken w3fdif’in daha iyi field matching’ini kullanır
bwdif,yadifilew3fdifin hibritidirffmpeg’i benimsemekteki en büyük engel muhtemelen çevrimdışı premium freemium araçlar ve web frontend’leri
Siteler, insanların Google’a sıkça yazdığı “avi to mp4”, “mp3 to wav” gibi ifadelerle arama optimizasyonu yapmış durumda
Komut satırı uygulamalarını kabul etmem beklediğimden daha uzun sürdü; çünkü Windows dünyası, her şeyin bir GUI’si olması gerektiğini öğretmişti
İnsanlar ffmpeg’in karmaşık olduğunu söylüyor ama onu şık bir GUI’ye dönüştürseniz de pek kolaylaşmıyor. Karmaşık olan video sıkıştırmanın kendisi
HandBrake gibi tıklamalı arayüzlerde olduğu gibi kararları sizin yerinize veren bir yaklaşım değilse, hiçbir yazılımın bunu daha kolay hale getirebileceğini sanmıyorum
Emin değilim ama dijital video kodlama ve sıkıştırmayı yeterince ayrıntılı öğrendikten sonra ffmpeg’de ne yapmanız gerektiği de oldukça sezgisel gelebilir. Bunu gerçekten yapmış biri var mı?
O dönemde mkv gibi formatlar ya da HEVC gibi codec’ler yoktu ama çeşitli filtreler üzerinden ses/videoyu işleme kavramı harikaydı ve çoğu A/V dönüştürme yazılımı böyle çalışıyor
FFmpeg man sayfalarına bakmaya başlayınca bağlantıları gördüm ve yaklaşık bir gün kurcaladıktan sonra kullanabilir hale geldim
Komut satırını sevmem ve man sayfalarını okuyan biri olmam da avantaj sağlamış olabilir
ffmpeg güçlü olduğu için sık kullanıyorum ama API yapısı kafama oturmuyor. Bir LLM frontend’i olsa iyi olurdu
İyi fikir. FFmpeg’e istediğim işi yaptırmak her zaman göz korkutucu
ChatGPT yardımcı oldu ama kusursuz değildi
OpenSSL seçeneklerini ve argümanlarını ezberlemek her zaman zordu; artık sadece GPT kullanıyorum
Yalnız işletim sistemleri arasındaki ince farklar küçük bir sorun olarak kalıyor