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


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

    实际效果如下:

    显示的是时分秒:

    核心代码:

    1. MediaInfo MI;
    2. if (MI.Open(strPathInput.c_str()) == 0)
    3. {
    4. return -1;
    5. }
    6. _tstring stDuration = MI.Get(stream_t::Stream_Audio,0,_T("Duration/String3")).c_str();
    7. if (stDuration.length() == 0)
    8. {
    9. return -1;
    10. }
    11. //去掉小数点后面的
    12. stDuration = CStdStr::GetNameOfFile(stDuration, false);
    13. //合法
    14. stDuration = CStdStr::ToValidFileName(stDuration, _T('-'));
    15. MI.Close();
    16. _tstring strDir = CStdStr::GetDirOfFile(strPathInput);
    17. _tstring strRootDir = CStdStr::AddSlashIfNeeded(strDir);
    18. if (_access(CStdStr::ws2s(strRootDir).c_str(), 0) != 0 && !CreateDirectory(CString(strRootDir.c_str()), NULL))
    19. {
    20. return -1;
    21. }
    22. _tstring stYearMonth = stDuration;
    23. _tstring stSaveDir = strRootDir + stYearMonth;
    24. const _tstring& sStr = strPathInput;
    25. if (_access(CStdStr::ws2s(stSaveDir).c_str(), 0) != 0 && !CreateDirectory(CString(stSaveDir.c_str()), NULL))
    26. {
    27. return -1;
    28. }
    29. const _tstring stSaveDirBak(stSaveDir);
    30. //如果当前目录已经存在超过nMaxCount个文件,则需要新建目录
    31. int nDirIndex = 0;
    32. std::vector<_tstring> vFilesExisted;
    33. while (g_nMaxCount > 0 && getFiles(stSaveDir, vFilesExisted, "*") >= g_nMaxCount)
    34. {
    35. ++nDirIndex;
    36. _tstring stSaveDirNew = stSaveDirBak + _T("-") + CStdTpl::ConvertToString(nDirIndex);
    37. if (_access(CStdStr::ws2s(stSaveDirNew).c_str(), 0) != 0 && !CreateDirectory(CString(stSaveDirNew.c_str()), NULL))
    38. {
    39. return -1;
    40. }
    41. vFilesExisted.clear();
    42. stSaveDir = stSaveDirNew;
    43. }
    44. _tstring strSavePath = CStdStr::AddSlashIfNeeded(stSaveDir) + CStdStr::GetNameOfFile(sStr);
    45. g_Mutex.Lock();
    46. int nNum = 0;
    47. if (CStdFile::IfAccessFile(strSavePath))
    48. {
    49. do
    50. {
    51. ++nNum;
    52. strSavePath = CStdStr::AddSlashIfNeeded(stSaveDir) + CStdStr::GetNameOfFile(sStr, false) +
    53. CStdTpl::ConvertToString(nNum) + CStdStr::GetSuffixOfFile(sStr);
    54. } while (CStdFile::IfAccessFile(strSavePath));
    55. }
    56. //查看同目录下,是否存在mp3, mp4, srt文件
    57. MoveDefFile(sStr, strSavePath, _T(".mp3"));
    58. MoveDefFile(sStr, strSavePath, _T(".mp4"));
    59. MoveDefFile(sStr, strSavePath, _T(".srt"));
    60. g_Mutex.Unlock();
    61. return 0;
    62. }

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

    欢迎交流与讨论。

  • 相关阅读:
    C语言游戏实战(9):球球大作战
    java: java.lang.OutOfMemoryError: Java heap space报错解决办法
    01.cesium简介
    iOS 组件化之使用 Cocoapods 创建本地 Pod
    【网络篇】第二篇——IP协议与MAC地址详解
    微服务架构(持续更新)
    『Java安全』SnakeYAML反序列化利用基础
    OpenCV(二十六):边缘检测(二)
    Java Web(十二)--JSP
    五金零售批发商城小程序的作用是什么
  • 原文地址:https://blog.csdn.net/autumoonchina/article/details/136581363