音视频按照时长分类小工具

应某用户的需求,编写了这款根据音视频时长分类小工具。

实际效果如下:

显示的是时分秒:

核心代码:

MediaInfo MI;  

	if (MI.Open(strPathInput.c_str()) == 0)
	{
		return -1;
	}

	_tstring stDuration = MI.Get(stream_t::Stream_Audio,0,_T("Duration/String3")).c_str();

	if (stDuration.length() == 0)
	{
		return -1;
	}

	//去掉小数点后面的
	stDuration = CStdStr::GetNameOfFile(stDuration, false);

	//合法
	stDuration = CStdStr::ToValidFileName(stDuration, _T('-'));

	MI.Close(); 

	_tstring strDir = CStdStr::GetDirOfFile(strPathInput);
	_tstring strRootDir = CStdStr::AddSlashIfNeeded(strDir);

	if (_access(CStdStr::ws2s(strRootDir).c_str(), 0) != 0 && !CreateDirectory(CString(strRootDir.c_str()), NULL))
	{
		return -1;
	}

	_tstring stYearMonth = stDuration;
	_tstring stSaveDir = strRootDir + stYearMonth;
	const _tstring& sStr = strPathInput;

	if (_access(CStdStr::ws2s(stSaveDir).c_str(), 0) != 0 && !CreateDirectory(CString(stSaveDir.c_str()), NULL))
	{
		return -1;
	}

	const _tstring stSaveDirBak(stSaveDir);

	//如果当前目录已经存在超过nMaxCount个文件,则需要新建目录
	int nDirIndex = 0;
	std::vector<_tstring> vFilesExisted;
	while (g_nMaxCount > 0 && getFiles(stSaveDir, vFilesExisted, "*") >= g_nMaxCount)
	{
		++nDirIndex;
		_tstring stSaveDirNew = stSaveDirBak + _T("-") + CStdTpl::ConvertToString(nDirIndex);
		if (_access(CStdStr::ws2s(stSaveDirNew).c_str(), 0) != 0 && !CreateDirectory(CString(stSaveDirNew.c_str()), NULL))
		{
			return -1;
		}
		vFilesExisted.clear();
		stSaveDir = stSaveDirNew;
	}

	_tstring strSavePath = CStdStr::AddSlashIfNeeded(stSaveDir) + CStdStr::GetNameOfFile(sStr);
	g_Mutex.Lock();
	int nNum = 0;
	if (CStdFile::IfAccessFile(strSavePath))
	{
		do
		{
			++nNum;
			strSavePath = CStdStr::AddSlashIfNeeded(stSaveDir) + CStdStr::GetNameOfFile(sStr, false) + 
				CStdTpl::ConvertToString(nNum) + CStdStr::GetSuffixOfFile(sStr);

		} while (CStdFile::IfAccessFile(strSavePath));
	}

	//查看同目录下,是否存在mp3, mp4, srt文件
	MoveDefFile(sStr, strSavePath, _T(".mp3"));
	MoveDefFile(sStr, strSavePath, _T(".mp4"));
	MoveDefFile(sStr, strSavePath, _T(".srt"));

	g_Mutex.Unlock();

	return 0;
}

即可实现,移动到指定目录,上述代码还实现了同名srt等移动到相同目录,这也是因为用户的需求。

欢迎交流与讨论。

相关推荐

  1. Golang获取视频信息

    2024-03-10 00:10:01       46 阅读
  2. 视频常用工具

    2024-03-10 00:10:01       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 00:10:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 00:10:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 00:10:01       87 阅读
  4. Python语言-面向对象

    2024-03-10 00:10:01       96 阅读

热门阅读

  1. 三分钟补算法系列(一)

    2024-03-10 00:10:01       41 阅读
  2. LeetCode买卖股票的最佳时机

    2024-03-10 00:10:01       54 阅读
  3. 云计算 3月4号 (自配本地和远程yum源)

    2024-03-10 00:10:01       42 阅读
  4. 多网卡情况下如何获取连接的ip地址c++

    2024-03-10 00:10:01       47 阅读
  5. 657.机器人能否返回原点

    2024-03-10 00:10:01       48 阅读
  6. 统计子矩阵

    2024-03-10 00:10:01       45 阅读
  7. React Redux使用详细讲解

    2024-03-10 00:10:01       45 阅读
  8. vue和react的diff算法源码

    2024-03-10 00:10:01       47 阅读
  9. 全量知识系统 之 “百度翻译”

    2024-03-10 00:10:01       51 阅读
  10. Qt的定时器QTimer

    2024-03-10 00:10:01       41 阅读
  11. Qt | 停靠窗口QDockWidget

    2024-03-10 00:10:01       44 阅读
  12. QT学习笔记2--QT简述

    2024-03-10 00:10:01       52 阅读
  13. LeetCode 2710.移除字符串中的尾随零

    2024-03-10 00:10:01       40 阅读
  14. 力扣 239. 滑动窗口最大值

    2024-03-10 00:10:01       45 阅读
  15. P10095 [ROIR 2023 Day 1] 斐波那契乘积

    2024-03-10 00:10:01       68 阅读