几年前,我从互联网上下载了一些视频……
我获得了许多文件:一系列 .ts 文件
在我的示例中:一系列 306 个文件,从segment1_4_av.ts 到segment306_4_av.ts
合并上述文件的命令行似乎是:ffmpeg -f concat -i mylist.txt -c copy all.ts
要获取mylist.txt,建议使用两种方法:
对于 Windows Powershell:foreach ($i in Get-ChildItem .*.ts) {"file '$i'" | Out-File mylist.txt -Encoding utf8 -Append}
或者对于 Windows bat 文件: (for %%i in (*.ts) do @echo file '%%i') > mylist.txt
2024/06/24: [PB 已解决]
在 mylist.txt 中,结果不是按以下顺序排列的:文件“segment100_1_av.ts”文件“segment101_1_av.ts”文件“segment102_1_av.ts”文件“segment103_1_av.ts”文件“segment104_1_av.ts”文件“segment105_1_av.ts”文件“segment106_1_av.ts”文件“segment107_1_av.ts”文件“segment108_1_av.ts”文件“segment109_1_av.ts”文件“segment10_1_av.ts”文件“segment110_1_av.ts”文件“segment111_1_av.ts”文件'segment112_1_av.ts' 文件 'segment113_1_av.ts' 文件 'segment114_1_av.ts' 文件 'segment115_1_av.ts' 文件 'segment116_1_av.ts' 文件 'segment117_1_av.ts' 文件 'segment118_1_av.ts' 文件 'segment119_1_av.ts' 文件 'segment11_1_av.ts' …
由于 .ts 文件名中缺少零:我读到:这可以通过使用前导零来解决:
对于(?.ts)中的%i,请执行ren%i 000%i
对于 (??.ts) 中的 %i,执行 ren %i 00%i
对于(???.ts)中的%i,请执行ren%i 0%i
我尝试将这三行复制到一个 .bat 文件中,并将其放在包含所有 .ts 文件的文件夹中……但是当我运行这个 .bat 文件时:什么都没有发生!
你能帮我重命名 .ts 文件吗?(以便再次连接它们)。
谢谢 ;-)
2024/06/25: [PB 已解决,但使用了另一种方式...(带播放列表)]
我成功添加了前导零,并创建了(显然)正确的 mylist.txt:
使用Advanced Renamer软件,我重命名了一系列文件:segment1_4_av.ts …segment306_4_av.ts,文件名为:1.ts …306.ts
使用 Powershell 命令(以管理员身份):Get-ChildItem star . star | Rename-Item -NewName {$_.Name.PadLeft(3+(".ts".length),'0')}
前导零已正确添加
(来源:https://www.youtube.com/watch? v =FttMJpQQX9Y)
- 使用 Powershell 命令:foreach ($i in Get-ChildItem .*.ts) {"file '$i'" | Out-File mylist.txt -Encoding utf8 -Append}
正确的 mylist.txt 似乎已经创建……
- 但是,在最后的连接中:PS C:\vid> ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.ts
(我的所有.ts文件和mylist.txt文件都在“vid”文件夹中)
进程失败:
请帮忙,谢谢 :-)
2024年6月26日:
两位贡献者给了我解决问题的想法。 看来这两个解决方案指明了成功的确切途径:
一)pjc50:
“从 .txt 文件中删除 BOM,然后重试。”
-> 我尝试了该链接(其中的过程解释得非常好): https://docs.tamr.com/tamr-help-center/docs/error-in-uploading-utf-8-with-bom
II)里卡多·博纳:
“尝试将 myfiles.txt 文件保存为 ANSI,在记事本中,文件菜单,另存为...”
III)独立地,我尝试了另一种技术来创建 mylist.txt:Windows bat 文件: (for %%i in (*.ts) do @echo file '%%i') > mylist.txt
→ 这些 I)、II) 和 III) 方法的结果: 创建了一个文件 output.ts(使用这三种方法),但是:
A)运行过程中出现新的问题:
B) 操作完成后:当我播放视频 out.ts(使用 VLC)时,结果并不完美:视频上经常出现“跳跃”或“中断”(我找不到正确的词……)(音频上没有)……我猜想 out.ts 上的这个 pb 是上述段落 A)中描述的问题的结果……
请问您能解释一下第A)段中描述的问题吗?
2024年6月27日:
pjc50向我解释道:
“现在变得极其复杂了。”他建议:“采取组装播放列表的替代方法。”
实际上,我最近在这里发布了一个关于播放列表的问题:
正确的 playlist.m3u8 应该包含什么,或者应该是什么样的?
一位贡献者为我的问题提供了解决方案,即正确的播放列表连接方式。因此,确实,多亏了这种替代技术,我现在能够获得我想要的结果。
所以没关系,对于我来说目标已经实现了:-)
非常感谢不同的贡献者,他们给了我解决方案!😀
NB:来源: 将数百个 ts 文件合并/连接/串联为一个 ts 文件 使用命令行连接 TS 视频的程序 如何使用 ffmpeg 将 ts 文件合并为 mp4? 使用 ffmpeg 复制编解码器将 *.ts 文件合并为一个 mp4 从 m3u8/ts 文件到 mp4 Windows 7 命令在一批文件名中添加前导零 https://trac.ffmpeg.org/wiki/Concatenate
PS:我的是Win10
看来 Windows 给你设置了最后一个障碍。请注意,错误消息显示“未知关键字‘文件’”。看到开头的空格了吗?在查看“mylist.txt”时,记事本中看不到该空格。这表明存在 Unicode BOM(字节顺序标记)。这些往往会使没有预料到的程序出错。
尝试https://docs.tamr.com/tamr-help-center/docs/error-in-uploading-utf-8-with-bom或https://stackoverflow.com/questions/52272705/batch-script-remove-bom-%C3%AF-from-file技术从 .txt 文件中删除 BOM,然后重试。