Medya uygulamasıyla ilgili temel bilgiler

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Medya ile çalışırken genellikle medya dosyalarının özelliklerini (ör. bit hızı veya çözünürlük) 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şına güçlü ve kullanışlı olsa da medya öğelerini web'e hazırlamak için gereken her şeyi yapmaz. Ayrıca, bu iki uygulamayla daha birçok ortak işlemi gösteren Medya dönüştürme ve Medya şifreleme sayfalarını da 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 GUI uygulamaları Miro, HandBrake ve VLC yer alır. Zencoder, Amazon Elastic Encoder ve Google Transcoder API gibi kodlama/kod dönüştürme hizmetleri de vardır.

Shaka Packager

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'ı kullanmanız gerekir. 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ı da destekler.

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. Aslında, web medyası içerik üreticileri için pahalı ticari uygulamalara para harcamadan bazı görevleri yapmanın tek yolu Shaka Packager'dır.

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 örnekte, Shaka Packager dokümanlarında yer alan örneklere benzer şekilde daha kolay anlaşılır bir yaklaşım benimsenmiştir. 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. Örnekte, eşdeğer parçaları yan yana getirdik.

packager stream_descriptor [stream_descriptor-n] [flags]

packager input=glocken.mp4                       --dump_stream_info

Komut şu çıkışı 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ı ile ilgili temel bilgiler bölümünde ele alınan özellikleri arayın ve birkaç noktaya dikkat edin. Yükseklik ve genişlik tam HD için doğrudur. Ses ve video codec'leri, kapsayıcı türleri için tercih edilen codec'ler arasındadır (ses için AAC, video için H264). 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.

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. Seçeneklerinden bazıları birden fazla yerde kullanılır ve komuttaki konumlarına 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.

  1. Bilgisayarınızda media-tools adlı yeni bir dizin oluşturarak başlayın. İstediğiniz adı kullanabilirsiniz. Aşağıdaki talimatlarda, dizin adı olarak media-tools kullanıldığı varsayılır.

  2. media-tools içinde bir docker ve media dizini oluşturun. Bu işlem, media dizininizi derleme bağlamının dışında tutar. Bu, üzerinde işlem yapmayı planladığımız dosyaların depolandığı yer olan media olduğundan ve bunların bazıları oldukça büyük olabileceğinden önemlidir. Dockerfile dosyasını doğrudan media-tools içine yerleştirirseniz ileride yeniden oluşturmanız gerekirse (örneğin, yüklü sürümleri değiştirmek için) resmin oluşturulması yavaşlar.

  3. /media-tools/docker/Dockerfile 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"]
    
  4. Görüntüyü oluşturun:

    docker build -t media-tools ./docker
    
  5. 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 #
    

Resmi çalıştırırken ffmpeg -version ve packager --version'yi çalıştırarak her şeyin başarılı olduğunu doğrulamak için hem FFmpeg hem de Shaka Packager sürümlerini kontrol edebilirsiniz. Çı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.