Medyalarla çalışırken genellikle medya dosyalarının bit hızı veya çözünürlüğü gibi özelliklerini değiştirmeniz gerekir. Başlamak için basit bir yol bulmak oldukça zor olabilir. Bu sayfada, kullanılan araçlar ve bu araçları hızlı bir şekilde nasıl yükleyeceğiniz hakkında bilgi edineceksiniz.
Öncelikle, yaygın olarak kullanılan iki komut satırı medya aracının (Shaka Packager ve FFmpeg) temel kullanımını açıklayıp ardından bu araçları hızlıca yüklemenize yardımcı oluruz. Neden iki uygulamayı kapsar? Her ikisi de kendi başlarına güçlü ve kullanışlı olsa da, web'e yönelik medya hazırlamak için gereken her şeyi yapmaz. Ayrıca, bu iki uygulamada yapılan daha birçok yaygın işlemi gösteren Medya dönüşümü ve Medya şifreleme sayfalarını oluşturduk.
Bu uygulamalar, dosya değiştirme işlemleri için kullanılabilecek tek seçenekler değildir ancak en yaygın ve güçlü seçeneklerden ikisidir. Diğer seçenekler arasında Miro, HandBrake ve VLC GUI uygulamaları bulunur. Zencoder, Amazon Elastic Encoder ve Google Transcoder API gibi kodlama/kod dönüştürme hizmetleri de vardır.
Shaka Paketleyici
Shaka Packager, ücretsiz bir medya paketleme SDK'sıdır. Sitenizde bir medya oynatıcı kullanıyorsanız dosyaları hazırlamak için Shaka Packager'ı kullanırsınız. En yaygın iki video akış protokolü için dönüşümü destekler: HTTP üzerinden Dinamik Adaptif Akış (DASH) veya HTTP Canlı Akışı (HLS). Shaka Packager, ortak şifreleme ve Widevine dijital hak yönetimi (DRM) gibi temel güvenlik özelliklerini destekler. Canlı yayın ve seç-izle videolar için de kullanılabilir.
Pakette belirtildiğine rağmen bu yardımcı program, C++ geliştiricilerinin dışındaki kullanıcılar için de kullanılabilir. Hem medya yazılımı oluşturmak için bir kitaplık hem de medya dosyalarını web'de oynatmaya hazırlamak için bir komut satırı yardımcı programı olarak kullanabilirsiniz. Burada bizim için yararlı olan ikinci kapasitedir. Hatta web medyası içerik üreticileri için Shaka Packager, pahalı ticari uygulamalara para harcamadan bazı işleri yapmanın tek yoludur.
Shaka Packager komutunun temel kalıbı aşağıda verilmiştir:
packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]
packager -help
yazarsanız bu sonuçla karşılaşmazsınız. Bu örnek, gerekçelendirilmesi daha kolaydır ve Shaka Packager belgelerindeki örnekleri yansıtır. Desende birden fazla stream_descriptor
öğesi olduğunu unutmayın. Burada gösterilmese de bir dosyanın video ve ses akışlarını tek bir komutla ayrı ayrı değiştirebilirsiniz.
Bu temel kalıbı, dosya özelliklerini gösteren basit bir kullanımla karşılaştırın. Bu örnekte, eşdeğer bölümleri sıraladık.
packager stream_descriptor [stream_descriptor-n] [flags]
packager input=glocken.mp4 --dump_stream_info
Komut şu şekilde çıktı verir:
File "glocken.mp4":
Found 2 stream(s).
Stream [0] type: Video
codec_string: avc1.640028
time_scale: 30000
duration: 300300 (10.0 seconds)
is_encrypted: false
codec: H264
width: 1920
height: 1080
pixel_aspect_ratio: 1:1
trick_play_factor: 0
nalu_length_size: 4
Stream [1] type: Audio
codec_string: mp4a.40.2
time_scale: 48000
duration: 481280 (10.0 seconds)
is_encrypted: false
codec: AAC
sample_bits: 16
num_channels: 2
sampling_frequency: 48000
language: eng
seek_preroll_ns: 20833
Medya dosyasıyla ilgili temel bilgiler bölümünde açıklanan özellikleri arayın ve birkaç noktaya dikkat edin. Yükseklik ve genişlik tam HD için doğrudur. Ses ve video codec'leri ise kapsayıcı türleri için tercih edilen codec'ler (ses için AAC ve video için H264) arasındadır. Akışların sayılarla tanımlandığını da unutmayın. Bunlar, ses ve videoyu ayrı ayrı işleyen işlemler için kullanışlıdır.
Yukarıdaki çıkışta bit hızının gösterilmediğine dikkat edin. Eksik bilgilere rağmen bu çıktının okunması daha kolay olduğundan mümkün olduğunda bu çıktıyı kullanırız. Shaka Packager'ın alamadığı bilgilere (ör. bit hızı) ihtiyaç duyduğumuzda FFmpeg'i kullanırız.
FFmpeg
FFmpeg, medya dosyalarını kaydetmek, dönüştürmek ve yayınlamak için kullanılan ücretsiz bir uygulamadır. Bu aracın özellikleri, Shaka Packager'ın özelliklerinden daha iyi veya daha kötü değildir. Sadece farklılar.
Bir FFmpeg komutunun temel kalıbı şu şekildedir:
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
Shaka Packager gibi bu uygulama da birden fazla yayını işleyebilir. Bu seçenekten bazıları birden çok konumda kullanılır ve komutta bulundukları yere bağlı olarak dosya çıkışını farklı şekilde değiştirir. Stack Overflow ve benzer sitelerdeki FFmpeg sorularını incelerken bu noktayı göz önünde bulundurun.
Dosya özelliklerini gösteren örnekle temel kalıbı tekrar karşılaştıracağız.
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
ffmpeg -i glocken.mp4
Bu işlem, istenen bilgilere ek olarak aşağıdaki örnekte gösterildiği gibi bir hata mesajı da yazdırır. Bunun nedeni, FFmpeg'in teknik olarak yanlış kullanılmasıdır. Önem verdiğimiz bilgileri gösterdiği için kullanırız.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.17.100
Duration: 00:01:47.53, start: 0.000000, bitrate: 10715 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 10579 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
Docker ile uygulama yükleme
Açıkladığımız adımları uygulayıp komutlarımızı denemeyi planlıyorsanız gerekli araçları manuel olarak yükleyebilir veya kolay yolu seçip Docker'ı kullanabilirsiniz. Size çok zaman kazandıracağı için Docker kullanmanızı öneririz. Ayrıca, hızlı bir şekilde kurulum yapmanızı sağlayacak talimatları da sağladık.
Bilgisayarınızda
media-tools
adlı yeni bir dizin oluşturarak başlayın. Dilediğiniz adı kullanabilirsiniz. Aşağıdaki talimatlarda dizin adı olarakmedia-tools
kullanıldığı varsayılır.media-tools
içinde birdocker
vemedia
dizini oluşturun. Bu işlem,media
dizininizi derleme bağlamının dışında tutar. Bu önemlidir, çünkümedia
üzerinde işlem yapmayı planladığımız dosyaların depolandığı yerdir ve bazıları oldukça büyük olabilir.Dockerfile
dosyasını doğrudanmedia-tools
içine yerleştirirseniz ileride yeniden oluşturmanız gerekirse (ör. yüklü sürümleri değiştirmek için) resmin oluşturulması yavaşlar./media-tools/docker/Dockerfile
etiketini oluşturun ve aşağıdaki derleme talimatlarını ekleyin:FROM google/shaka-packager:release-v2.4.3 as packager FROM jrottenberg/ffmpeg:4.3.2-alpine38 COPY --from=packager /usr/bin /usr/bin ENTRYPOINT ["sh"]
Görüntüyü oluşturun:
docker build -t media-tools ./docker
Resmi etkileşimli bir kabuk olarak çalıştırın. Linux'ta:
docker run -w /media -v ${PWD}/media:/media -it --rm media-tools /media #
Windows'da:
docker run -w /media -v %cd%/media:/media -it --rm media-tools /media #
Görüntüyü çalıştırırken hem FFmpeg hem de Shaka Packager sürümlerini kontrol ederek her şeyin başarılı olduğunu doğrulamak için ffmpeg -version
ve packager --version
komutlarını çalıştırabilirsiniz. Çıkış şu şekilde görünmelidir:
/media # ffmpeg -version
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 6.4.0 (Alpine 6.4.0)
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --enable-libaribb24 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
/media # packager --version
packager version v2.4.3-dd9870075f-release
Shaka Packager ve FFmpeg'i kullanmayı denediniz. Şimdi temel kavramları öğrenmeye devam edebilirsiniz. Sırada medya aktarımıyla ilgili temel bilgiler var.