Medya uygulamasıyla ilgili temel bilgiler

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Medyalarla çalışmak, genellikle medya dosyalarının bit hızı veya çözünürlük gibi özelliklerinin değiştirilmesini gerektirir. Başlamak için basit bir yol bulmak oldukça göz korkutucu olabilir. Bu sayfada, kullanılan araçlar ve bunların nasıl hızlı bir şekilde yükleneceği hakkında bilgi edineceksiniz.

Öncelikle, yaygın olarak kullanılan iki komut satırı medya yardımcı programının temel kullanımını açıklarız: Shaka Packager ve FFmpeg. Ardından araçları hızlıca yüklemenize yardımcı oluruz. Neden iki başvuru yapılmalı? 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 sağlamaz. 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 manipülasyon görevleri için kullanılabilen tek seçenek değildir, ancak en yaygın ve güçlü iki uygulamadır. Diğer seçenekler arasında Miro, HandBrake ve VLC GUI uygulamaları bulunur. Ayrıca Zencoder, Amazon Elastic Encoder ve Google Transcoder API gibi kodlama/kod dönüştürme hizmetleri de mevcuttur.

Shaka Paketleyici

Shaka Packager, ücretsiz bir medya paketleme SDK'sıdır. Sitenizde bir medya oynatıcı kullanıyor olsaydınız dosyaları hazırlamak için Shaka Packager'ı kullanırsınız. En yaygın iki video akış protokolü için dönüştürmeyi destekler: HTTP üzerinden Dinamik Uyarlanabilir Akış (DASH) veya HTTP Canlı Yayın (HLS). Shaka Packager, ortak şifreleme ve Widevine dijital hak yönetimi (DRM) gibi temel güvenlik özelliklerini destekler. Ayrıca canlı yayın ve seç-izle video yayınları için de kullanılabilir.

Pakette ne yazdığına rağmen bu yardımcı program C++ geliştiriciden daha fazlası içindir. Bunu hem medya yazılımı oluşturmak için bir kitaplık hem de web'de oynatma için medya dosyalarını hazırlamak üzere bir komut satırı yardımcı programı olarak kullanabilirsiniz. Bizim için yararlı olan ikinci kapasitedir. Hatta web medyası içerik üreticileri için Shaka Packager, bazı işleri pahalı ticari uygulamalara para harcamadan yapmanın tek yoludur.

Shaka Packager komutu için temel kalıbı aşağıda görebilirsiniz:

packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]

packager -help yazdığınızda alacağınız yanıt tam değildir. Bu örnek, gerekçelendirilmesi daha kolaydır ve Shaka Packager belgelerindeki örnekleri yansıtır. Kalıpta birden fazla stream_descriptor öğesi olduğuna dikkat edin. Bunu göstermesek 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. Ayrıca akışların sayılarla tanımlandığına da dikkat edin. Bunlar, ses ve videoyu ayrı olarak işleyen işlemler için yararlıdır.

Yukarıdaki çıkışta bit hızının gösterilmediğine dikkat edin. Bu metin eksik olsa da daha kolay okunuyor. Bu nedenle mümkün oldukça onu kullanıyoruz. 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 akış olarak aktarmak için de ücretsiz bir uygulamadır. Özellikleri, Shaka Packager'ınkinden daha iyi veya daha kötü değil. Sadece birbirinden farklıdırlar.

Bir FFmpeg komutunun temel kalıbı şu şekildedir:

ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output

Shaka Packager gibi bu uygulama da birden fazla akışı 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'daki FFmpeg sorularına ve benzer sitelerdeki FFmpeg'e bakarken bu konuya dikkat edin.

Temel kalıbı, dosya özelliklerini görüntüleme örneğiyle tekrar karşılaştıracağız.

    ffmpeg [GeneralOptions] [InputFileOptions] -i input        [OutputFileOptions] output

    ffmpeg                                     -i glocken.mp4

Bu işlem, istediğimiz bilgilere ek olarak aşağıdaki örnekte gösterildiği gibi bir hata mesajı da verir. Bunun nedeni, bunun teknik olarak FFmpeg'in yanlış bir kullanımıdır. Bunu, önemsediğimiz bilgileri görüntülediğ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

Takip edip komutlarımızı denemeyi planlıyorsanız gerekli araçları manuel olarak yükleyebilir veya kolay yolu izleyip Docker'ı kullanabilirsiniz. Size önemli ölçüde zaman kazandıracağı için Docker'ı kullanmanızı öneririz. Buna ek olarak, kurulumunuzu hızlı bir şekilde yapmanız için talimatlar sağladık.

  1. Bilgisayarınızda bir yerde media-tools adlı yeni bir dizin oluşturarak başlayın. İstediğiniz adı kullanabilirsiniz, ancak aşağıdaki talimatlarda dizin adı olarak media-tools kullandığınız varsayılmıştı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 önemlidir, çünkü media üzerinde işlem yapmayı planladığımız dosyaların depolandığı yerdir ve bazıları oldukça büyük olabilir. Dockerfile öğesini doğrudan media-tools içine koymak, muhtemelen yüklü sürümleri değiştirmek için projeyi yeniden derlerseniz görüntünün oluşturulmasını yavaşlatır.

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

    docker build -t media-tools ./docker
    
  5. Görüntüyü etkileşimli 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ı denediğinize göre temel kavramları öğrenmeye devam edebilirsiniz. Bir sonraki Medya akışıyla ilgili temel bilgiler.