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


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

    实际效果如下:

    显示的是时分秒:

    核心代码:

    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等移动到相同目录,这也是因为用户的需求。

    欢迎交流与讨论。

  • 相关阅读:
    南京大学计院夏令营历年机试笔试题汇总(刷题版)
    中国雪深长时间序列数据集(1979-2020)
    104. Go单测系列4---编写可测试的代码
    Git技法:.gitignore、移除暂存与撤销修改
    Python进阶:上下文管理器
    Anaconda安装教程(Windows环境下)
    思想茶叶蛋 (Aug 20,2022)| 网传B站hr说用户是loser、互联网之父的救赎和Web3.0
    安全狗陈荣有:打造“即开即用”的云原生安全能力
    【AUTOSAR-CanSM】-2.4-参数CanSMBorTimeTxEnsured详解
    基于FPGA的拔河游戏设计
  • 原文地址:https://blog.csdn.net/autumoonchina/article/details/136581363