Medya uygulamasıyla ilgili temel bilgiler

Deren Herman
Derek Herman
Ali Porsuk
Ali Polat

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

Öncelikle, yaygın olarak kullanılan iki komut satırı medya yardımcı programının (Shaka Packager ve FFmpeg) temel kullanımını açıklayacağız. Ardından, araçları hızla yüklemenize yardımcı olacağız. Neden iki başvuruyu kapsamalısınız? Her ikisi de kendi başlarına güçlü ve yararlı olsalar da, medyayı web için hazırlamak için gerekli her şeye sahip değildir. Ayrıca, bu iki uygulamayla ilgili daha birçok yaygın işlem gösteren Medya dönüştürme ve Medya şifreleme sayfaları oluşturduk.

Bu uygulamalar dosya manipülasyonu görevleri için kullanılabilecek tek seçenek olmasa da en yaygın ve en güçlü uygulamalar arasındadır. Diğer seçenekler Miro, HandBrake ve VLC GUI uygulamalarını içerir. 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ıyorsanı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ı Akışı (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ını da yönetebilir.

Pakette ne yazsa da bu yardımcı program C++ geliştiricilerinden daha fazlası içindir. Bunu hem medya yazılımı oluşturmak için bir kitaplık hem de medya dosyalarını web’de oynatma için hazırlarken komut satırı yardımcı programı olarak kullanabilirsiniz. Bu kapasitenin bizim için yararlı olanı bu. Aslında web medyası oluşturucuları için bazı görevleri pahalı ticari uygulamalara para harcamadan gerçekleştirmenin tek yolu Shaaka Packager'dır.

Shaka Packager komutunun temel kalıbı şöyledir:

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

packager -help yazdığınızda bunu görmezsiniz. Bu örneğe dayandırmak daha kolaydır ve Shaka Packager belgelerindeki örnekleri yansıtmaktadır. Kalıpta birden fazla stream_descriptor öğesi olduğunu unutmayın. 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. Örnekte, eş değer kısımları hizaladık.

packager stream_descriptor [stream_descriptor-n] [flags]

packager input=glocken.mp4                       --dump_stream_info

Komutun çıktısı şudur:

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 bahsedilen özellikleri arayın ve birkaç şeye dikkat edin. Yükseklik ve genişlik, full HD için doğrudur. Ses ve video codec'leri, kapsayıcı türleri için tercih edilen codec'ler, ses için AAC ve video için H264'tür. Akışların sayılarla tanımlandığına da dikkat edin. Bunlar, sesi ve videoyu ayrı olarak işleyen işlemler için yararlıdır.

Yukarıdaki çıkışın bit hızını göstermediğine dikkat edin. Bu çıktı, eksik olsa da okunması daha kolay olduğundan mümkün oldukça bu çıktıyı kullanıyoruz. Shaka Packager'ın alamayacağı bilgilere (bit hızı gibi) ihtiyaç duyduğumuzda FFmpeg kullanıyoruz.

FFmpeg

FFmpeg aynı zamanda medya dosyalarını kaydetmek, dönüştürmek ve akışı gerçekleştirmek için de ücretsiz bir uygulamadır. Özellikleri Shaka Packager'ınkinden daha iyi veya daha kötü değil. Ancak birbirlerinden farklılar.

Bir FFmpeg komutu için temel kalıp şöyle görünür:

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

Shaka Packager gibi bu uygulama da birden fazla akışı işleyebilir. Bazı seçenekler birden fazla konumda kullanılır ve komutta bulundukları yere bağlı olarak dosya çıkışını farklı şekillerde etkiler. Stack Overflow'daki FFmpeg sorularına ve benzer sitelere bakarken bunu göz önünde bulundurun.

Yine temel kalıbı, dosya özelliklerini görüntülemeye ilişkin örnekle karşılaştıracağız.

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

    ffmpeg                                     -i glocken.mp4

İstediğimiz bilgilere ek olarak, bu işlem aşağıdaki örnekte gösterildiği gibi bir hata mesajı da yazdırır. Çünkü bunun teknik olarak FFmpeg kullanımı yanlıştır. Bu URL'yi, önemsediğimiz bilgileri görüntülediği için kullanıyoruz.

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

Talimatları izleyip komutlarımızı denemeyi planlıyorsanız gerekli araçları manuel olarak yükleyebilir veya kolay yoldan ilerleyip Docker'ı kullanabilirsiniz. Çok zaman kazandıracağı için Docker'ı kullanmanızı öneririz. Üstelik, hızlı bir şekilde kurulum yapmanız için gerekli talimatları da sağladık.

  1. Bilgisayarınızda bir yerde media-tools adlı yeni bir dizin oluşturarak başlayın. İstediğiniz adı kullanabilirsiniz. Aşağıdaki talimatlarda, dizin adı olarak media-tools kullandığınızı varsaymanız yeterlidir.

  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 önemli çünkü media, üzerinde işlem yapmayı planladığımız dosyaların depolandığı yerdir ve dosyalardan bazıları oldukça büyük olabilir. Dockerfile öğesini doğrudan media-tools içine yerleştirmek, daha sonra yeniden inşa etmeniz halinde, belki de yüklü sürümleri değiştirmek için görüntü oluşturma işlemini yavaşlatır.

  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. Görüntüyü 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ümünü kontrol ederek ffmpeg -version ve packager --version çalıştırılarak her şeyin başarılı olduğunu doğrulayabilirsiniz. Çı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

Artık Shaka Packager ve FFmpeg'i kullanmayı denediğinize göre, Medya akışıyla ilgili temel bilgiler başlıklı adımdaki temel kavramları öğrenmeye devam edebilirsiniz.