C# - ffmpeg(FFmpeg.AutoGen)를 이용해 멀티미디어 파일의 메타데이터를 보여주는 예제(metadata.c)
지난 예제에 이어,
C# - ffmpeg(FFmpeg.AutoGen)를 이용해 MP2 오디오 파일 디코딩 예제(decode_audio.c)
; https://www.sysnet.pe.kr/2/0/12933
이번에는 쉬어가는 의미로 ^^
ffmpeg 예제 중 "
metadata.c" 파일을 FFmpeg.AutoGen으로 포팅하겠습니다.
using FFmpeg.AutoGen;
using FFmpeg.AutoGen.Example;
using System;
using System.Runtime.InteropServices;
namespace FFmpegApp1
{
internal unsafe class Program
{
static void Main(string[] args)
{
FFmpegBinariesHelper.RegisterFFmpegBinaries();
#if DEBUG
Console.WriteLine("Current directory: " + Environment.CurrentDirectory);
Console.WriteLine("Running in {0}-bit mode.", Environment.Is64BitProcess ? "64" : "32");
Console.WriteLine($"FFmpeg version info: {ffmpeg.av_version_info()}");
#endif
Console.WriteLine();
Console.WriteLine($"LIBAVFORMAT Version: {ffmpeg.LIBAVFORMAT_VERSION_MAJOR}.{ffmpeg.LIBAVFORMAT_VERSION_MINOR}");
show_metadata(@"D:\media_sample\test.mp3");
}
private static void show_metadata(string filePath)
{
AVFormatContext* fmt_ctx = null;
do
{
int ret = ffmpeg.avformat_open_input(&fmt_ctx, filePath, null, null);
if (ret != 0)
{
break;
}
ret = ffmpeg.avformat_find_stream_info(fmt_ctx, null);
if (ret < 0)
{
Console.WriteLine("Cannot find stream information");
break;
}
AVDictionaryEntry* tag = null;
while ((tag = ffmpeg.av_dict_get(fmt_ctx->metadata, "", tag, ffmpeg.AV_DICT_IGNORE_SUFFIX)) != null)
{
string key = Marshal.PtrToStringAnsi(new IntPtr(tag->key));
string value = Marshal.PtrToStringAnsi(new IntPtr(tag->value));
Console.WriteLine($"{key} = {value}");
}
} while (false);
if (fmt_ctx != null)
{
ffmpeg.avformat_close_input(&fmt_ctx);
}
}
}
}
위의 코드를
지니 뮤직을 통해 구매한 "
묘해, 너와" MP3 파일을 입력으로 하면 다음과 같은 출력 결과를 볼 수 있습니다.
comment = KT뮤직
album = 연애의 발견 OST Part 4 (KBS 월화드라마)
genre = Soundtrack
title = 묘해, 너와
artist = 어쿠스틱 콜라보
album_artist = 어쿠스틱 콜라보
disc = 1
track = 1
ENCODEDBY = KT MUSIC CORP.
lyrics- = 니 생각에 꽤 즐겁고
니 생각에 퍽 외로워
이상한 일이야
누굴 좋아한단 건
...[생략]...
그래서 한 번더 가보고
싶어져 너와
date = 2014
반면, youtube-dl을 이용해 유튜브의 영상을 다운로드한 MP4 파일을 대상으로 하면 다음과 같이 간단한 메타데이터 정보만 나옵니다.
major_brand = isom
minor_version = 512
compatible_brands = isomiso2avc1mp41
encoder = Lavf58.45.100
(
첨부 파일은 이 글의 예제 코드를 포함합니다.)
(
이 글의 소스 코드는 github에 올려져 있습니다.)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]