sheldonkwoodward/pymkv

Adding any kind of video, removes the audio track

lordn-n opened this issue · 2 comments

Describe the bug
When adding a non MKV video it ignores the audio track and final mkv does not have audio.
tried #44 using file_path but since video is not MKV, it does not work

To Reproduce

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pymkv
mkv = pymkv.MKVFile()

"""
mkvmerge -J video_with_audio.mp4

{
    "attachments": [],
    "chapters": [],
    "container": {
        "properties": {
            "container_type": 25,
            "is_providing_timestamps": true
        },
        "recognized": true,
        "supported": true,
        "type": "QuickTime/MP4"
    },
    "errors": [],
    "file_name": "video_with_audio.mp4",
    "global_tags": [],
    "identification_format_version": 12,
    "track_tags": [],
    "tracks": [
        {
            "codec": "MPEG-4p10/AVC/H.264",
            "id": 0,
            "properties": {
                "language": "und",
                "number": 1,
                "packetizer": "mpeg4_p10_video",
                "pixel_dimensions": "1920x800"
            },
            "type": "video"
        },
        {
            "codec": "AAC",
            "id": 1,
            "properties": {
                "audio_bits_per_sample": 16,
                "audio_channels": 6,
                "audio_sampling_frequency": 48000,
                "language": "und",
                "number": 2
            },
            "type": "audio"
        }
    ],
    "warnings": []
}
"""

mkv.add_track('video_with_audio.mp4')
mkv.add_track(pymkv.MKVTrack('eng.srt', track_name='English', language='eng'))
mkv.add_track(pymkv.MKVTrack('spa.srt', track_name='Spanish', language='spa'))

mkv.mux('final_video.mkv')

Expected behavior
Add audio and video tracks

Screenshots

mkvmerge -J final_video.mkv
{
    "attachments": [],
    "chapters": [],
    "container": {
        "properties": {
            "container_type": 17,
            "date_local": "2020-03-30T05:03:42-06:00",
            "date_utc": "2020-03-30T11:03:42Z",
            "duration": 8513088000000,
            "is_providing_timestamps": true,
            "muxing_application": "libebml v1.3.10 + libmatroska v1.5.2",
            "segment_uid": "d3d29256451c6f2bbfb112baae4aeda2",
            "writing_application": "mkvmerge v44.0.0 ('Domino') 64-bit"
        },
        "recognized": true,
        "supported": true,
        "type": "Matroska"
    },
    "errors": [],
    "file_name": "final_video.mkv",
    "global_tags": [],
    "identification_format_version": 12,
    "track_tags": [],
    "tracks": [
        {
            "codec": "MPEG-4p10/AVC/H.264",
            "id": 0,
            "properties": {
                "codec_id": "V_MPEG4/ISO/AVC",
                "codec_private_data": "01640029ffe1001867640029acd94078065b011000003e90000bb800f183196001000668e938f3c8f0",
                "codec_private_length": 41,
                "default_duration": 41708333,
                "default_track": false,
                "display_dimensions": "1920x800",
                "display_unit": 0,
                "enabled_track": true,
                "forced_track": false,
                "language": "und",
                "minimum_timestamp": 0,
                "number": 1,
                "packetizer": "mpeg4_p10_video",
                "pixel_dimensions": "1920x800",
                "uid": 2105219320381282218
            },
            "type": "video"
        },
        {
            "codec": "SubRip/SRT",
            "id": 1,
            "properties": {
                "codec_id": "S_TEXT/UTF8",
                "codec_private_length": 0,
                "default_track": false,
                "enabled_track": true,
                "encoding": "UTF-8",
                "forced_track": false,
                "language": "eng",
                "minimum_timestamp": 3597000000,
                "number": 2,
                "text_subtitles": true,
                "track_name": "English",
                "uid": 6042543747819283221
            },
            "type": "subtitles"
        },
        {
            "codec": "SubRip/SRT",
            "id": 2,
            "properties": {
                "codec_id": "S_TEXT/UTF8",
                "codec_private_length": 0,
                "default_track": false,
                "enabled_track": true,
                "encoding": "UTF-8",
                "forced_track": false,
                "language": "spa",
                "number": 3,
                "text_subtitles": true,
                "track_name": "Spanish",
                "uid": 18339090840888417108
            },
            "type": "subtitles"
        }
    ],
    "warnings": []
}

Software (please complete the following information):

  • OS: Linux LSTKAG231638 5.5.13-arch1-1 #1 SMP PREEMPT Wed, 25 Mar 2020 16:04:40 +0000 x86_64 GNU/Linux
  • MKVToolNix version: mkvmerge v44.0.0 ('Domino') 64-bit

Fixed by specifying the track_id

mkv.add_track('video_with_audio.mp4')  # Video, takes the track_id=0
mkv.add_track(pymkv.MKVTrack('video_with_audio.mp4', track_id=1))  # Audio

# Subtitles
mkv.add_track(pymkv.MKVTrack('eng.srt', track_name='English', language='eng'))
mkv.add_track(pymkv.MKVTrack('spa.srt', track_name='Spanish', language='spa'))

would be great that by default would also add the audio track if the track is in the mkvmerge -J without checking if it's really a MKV file