Konwersja mediów

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Z tego artykułu dowiesz się, jak używać najpopularniejszych poleceń do konwertowania i manipulowania określonymi właściwościami plików multimedialnych. Chociaż staraliśmy się wyświetlać operacje równoważne we wszystkich procedurach, nie wszystkie operacje są możliwe w obu aplikacjach.

W wielu przypadkach polecenia, które pokazujemy, mogą być połączone w jedną komendę w wierszu poleceń i tak właśnie będą używane. Nie ma na przykład nic, co uniemożliwiałoby ustawienie szybkości transmisji bitów pliku wyjściowego w ramach tej samej operacji co konwersja pliku. W tym artykule często przedstawiamy te operacje jako oddzielne polecenia ze względu na przejrzystość.

Konwersja jest realizowana w tych aplikacjach:

Charakterystyka wyświetlania

Zarówno Shaka Packager, jak i FFmpeg mogą służyć do sprawdzania zawartości pliku multimedialnego, a następnie wyświetlania właściwości strumienia. Oba jednak dają różne wyniki dla tych samych mediów.

Cechy korzystające z Shaka Packager

packager input=glocken.mp4 --dump_stream_info

Dane wyjściowe wyglądają tak:

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

Cechy za pomocą FFmpeg

ffmpeg -i glocken.mp4

Dane wyjściowe wyglądają tak:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.83.100
  Duration: 00:00:10.03, start: 0.000000, bitrate: 8063 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 7939 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, 127 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified

Demuxowanie (oddzielanie) strumieni audio i wideo

Do konwertowania plików pakiet Shaka wymaga demultipleksowania. Jest to też wymagane do korzystania z ramek mediów.

Demultipleksowanie za pomocą Shaka Packager

MP4

packager input=myvideo.mp4,stream=video,output=myvideo_video.mp4
packager input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a

Lub:

packager \
  input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
  input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a

WebM

packager \
  input=myvideo.webm,stream=video,output=myvideo_video.webm \
  input=myvideo.webm,stream=audio,output=myvideo_audio.webm

Demultipleksowanie za pomocą FFmpeg

MP4

ffmpeg -i myvideo.mp4 -vcodec copy -an myvideo_video.mp4
ffmpeg -i myvideo.mp4 -acodec copy -vn myvideo_audio.m4a

WebM

ffmpeg -i myvideo.webm -vcodec copy -an myvideo_video.webm
ffmpeg -i myvideo.webm -acodec copy -vn myvideo_audio.webm

Połącz strumienie audio i wideo.

W niektórych przypadkach trzeba połączyć dźwięk i obraz w jednym kontenerze. Szczególnie, gdy nie używasz frameworka multimedialnego. FFmpeg radzi sobie z tym całkiem dobrze, ale obecnie nie obsługuje tego narzędzie Shaka Packager.

ffmpeg -i myvideo_video.webm -i myvideo_audio.webm -c copy myvideo.webm

Zmiana właściwości

Szybkość transmisji bitów

W przypadku FFmpeg możemy to zrobić podczas konwertowania na format .mp4 lub .webm.

ffmpeg -i myvideo.mov -b:v 350K myvideo.mp4
ffmpeg -i myvideo.mov -vf setsar=1:1 -b:v 350K myvideo.webm

Wymiary (rozdzielczość)

ffmpeg -i myvideo.webm -s 1920x1080 myvideo_1920x1080.webm

Typ pliku

Narzędzie Shaka Packager nie może przetwarzać plików .mov, więc nie można go używać do konwertowania plików w tym formacie.

.mov na .mp4

ffmpeg -i myvideo.mov myvideo.mp4

.mov na .webm

ffmpeg -i myvideo.mov myvideo.webm

Synchronizacja obrazu i dźwięku

Aby zapewnić synchronizację dźwięku i obrazu podczas odtwarzania, wstaw klatki kluczowe.

ffmpeg -i myvideo.mp4 -keyint_min 150 -g 150 -f webm -vf setsar=1:1 out.webm

MP4/H.264

ffmpeg -i myvideo.mp4 -c:v libx264 -c:a copy myvideo.mp4

Dźwięk w pliku MP4

ffmpeg -i myvideo.mp4 -c:v copy -c:a aac myvideo.mp4

WebM/VP9

ffmpeg -i myvideo.webm -v:c libvpx-vp9 -v:a copy myvideo.webm

Dźwięk w pliku WebM

ffmpeg -i myvideo.webm -v:c copy -v:a libvorbis myvideo.webm
ffmpeg -i myvideo.webm -v:c copy -v:a libopus myvideo.webm

filmy na żądanie i transmisje na żywo,

W tym artykule omówimy 2 rodzaje protokołów przesyłania strumieniowego. Pierwsza to dynamiczne adaptacyjne strumieniowe przesyłanie danych przez HTTP (DASH), czyli technika strumieniowego przesyłania danych z adaptacyjną szybkością transmisji bitów oraz metoda opracowana na podstawie standardów internetowych służąca do prezentowania wideo na żądanie. Drugim jest Transmisja na żywo przez HTTP (HLS), czyli standard Apple dotyczący transmisji na żywo i filmów na żądanie w internecie.

DASH/MPD

W tym przykładzie plik wyjściowy z opisem prezentacji multimedialnej (MPD) jest generowany na podstawie strumieni audio i wideo.

packager \
  input=myvideo.mp4,stream=audio,output=myvideo_audio.mp4 \
  input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
  --mpd_output myvideo_vod.mpd

HLS

Te przykłady generują plik wyjściowy M3U8 z strumieni audio i wideo, który jest playlistą multimedialną zakodowaną w formacie UTF-8.

ffmpeg -i myvideo.mp4 -c:a copy -b:v 8M -c:v copy -f hls \
  -hls_time 10 -hls_list_size 0 myvideo.m3u8

LUB:

packager \
  'input=myvideo.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
  'input=myvideo.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
  --hls_master_playlist_output="master_playlist.m3u8"

Teraz, gdy już wiesz, jak konwertować pliki, możesz wykorzystać informacje z tego artykułu i dowiedzieć się więcej o szyfrowaniu multimediów.