level 3
在腾讯客户端上发现好的电影又想保留,下载后发现里面竟然是ts格式的而且分了近700个P!!!!
于是发现了万能的ffmpeg大法
#!/bin/sh
mkdir -p tsmov
#用find找出所有ts文件,当然mp4等其他格式也行,这里可以视情况而修改成*.mp4.然后把找到的符合规则的视频文件转移到tsmov文件夹下.
find -name "*.ts"| xargs -i mv {} tsmov
cd tsmov
#下面就是生成filelist.txt视频名字列表.注意我这里缓存视频文件是从0.ts到699.ts,如果你的缓存是其他名称可能还要批量改名字.我这里没写批量改名字的命令,因为我不需要.
each=0
#这个循环里面的数子694是需要手动修改的,如果缓存是899就改成你的缓存文件的实际数.
while(( $each <= 694 ))
do
echo file \'$each.ts\'
let "each++"
done > filelist.txt
#这才是ffmpeg最终执行的合并命令,上面的只是准备条件.
ffmpeg -f concat -i filelist.txt -c copy -bsf:a aac_adtstoasc output.mkv
保存为mege_video.sh 给这个脚本权限就能执行了
2018年07月16日 13点07分
1
level 1
山东枣庄三线BGP机房,q291049739 有需要请咨询
2018年08月27日 08点08分
2
level 3
[concat @ 0000000000598080] Line 1: unknown keyword ''
filelist.txt: Invalid data found when processing input
这个提示是filelist。txt内容错误吗。。。请问具体一点的怎么操作
2019年05月06日 07点05分
8
发你的代码是怎么改的?还有你的文件内容截图看看
2019年05月08日 04点05分
看看你的第一行,是不数字不对,或者标点符号空格之类的有错误
2019年05月08日 04点05分
level 1
楼主,我是win10系统,有几百个ts文件排列好了,电脑里也有ffmpeg.exe
如何使用啊 在DOS下敲命令copy /b这种合出来视频可能不能跳转播放,只能不快进从头看到尾
2019年05月09日 01点05分
10
我不知道你的win10是不是带linux内核的shell那个版本吗?如果是带Linuxshell的可以试一下,我没用过win10的,我这个是linux中的shell版本
2019年05月10日 02点05分
shift + 右单击 ts视频的目录 调出 powershell 这是win10内置的linux shell 你可以试一下,DOS命令是不支持我的这个shell命令的。。。前提是你已经配置好了ffmpeg的环境变量,打开powershell 输入ffmpeg -help 如果出现帮助或版本号,说明环境变量正常,如果powershell不知道ffmpeg 是什么,就不行
2019年05月10日 02点05分
@406738128 好的 谢谢楼主啦 我已经会DOS窗口调用ffmpeg命令了 加个环境变量更方便一些~
2019年05月10日 03点05分
@Oo渊鱼oO 嗯好的,互相学习
2019年05月10日 04点05分
level 1
经本人多方查证,应楼主请求,现将Windows下通过FFmpeg合成多段视频的方法公布出来
视频目录下创建filelist.txt 文件
然后罗列文件列表file '001.ts' (可用excel循环)
形式如下:
file '001.ts'
file '002.ts'
...
以上可以用DOS写入命令完成,不过网上代码%%a有些问题,这里层主用的excel复制粘贴到txt
然后在FFmpeg程序位置打开DOS窗口(设置了环境变量可以无视,更加方便)
输入命令ffmpeg -f concat -i filelist.txt -c copy output.mp4
官网说在concat后的 save 0 参数在当前多个ts目录下时可以不用,我就给去了
2019年05月13日 03点05分
11
枚举文件不用excel 用for好了 for /r "." %%i in (*.ts) do ( echo file %%~ni.ts >> 1.txt)
2019年05月13日 04点05分
@Varg⛄ 我只会dos敲命令方式,上面代码把%%换成%就能运行了
2019年05月13日 04点05分
level 5
@echo off
cd /d "%~dp0"
setlocal enabledelayedexpansionecho logstart >"%~dp0log.txt"for /L %%j in (1,1,24) do (
cd /d "%~dp0"
if exist ".\ipt\%%j" (
cd /d ".\ipt\%%j"
call :rename1
echo %%j rename >>"%~dp0log.txt"
)
)for /L %%k in (1,1,24) do (
cd /d "%~dp0"
if exist ".\ipt\%%k" (
cd /d ".\ipt\%%k"
call :ecp1
call :ecp2
cd /d "%~dp0"
del "%~dp0stg1\*.ts"
del "%~dp0stg2\*.ts"
ren "%~dp0\output\tmp.mp4" %%k.mp4
echo %%k hevc >>"%~dp0log.txt"
if not exist "%~dp0output\%%k.mp4" (
cd /d "%~dp0"
cd /d ".\ipt\%%k"
call :ecp3
call :ecp2
cd /d "%~dp0"
del "%~dp0stg1\*.ts"
del "%~dp0stg2\*.ts"
ren "%~dp0output\tmp.mp4" %%k.mp4
echo %%k h264 >>"%~dp0log.txt"
)
)
)
pause
exit:ecp1
for /r "." %%i in (*.ts) do (
set "fn1=%%~ni"
%~dp0ffmpeg -i !fn1!.ts -vcodec copy -acodec copy -vbsf hevc_mp4toannexb %~dp0stg1\!fn1!.ts
)
goto :eof
pause:ecp2
cd /d "%~dp0"
copy /b "%~dp0stg1\*.ts" "%~dp0stg2\cbed.ts"
ffmpeg -i "%~dp0stg2\cbed.ts" -acodec copy -vcodec copy -absf aac_adtstoasc "%~dp0output\tmp.mp4"
goto :eof
pause:ecp3
for /r "." %%i in (*.ts) do (
set "fn1=%%~ni"
%~dp0ffmpeg -i !fn1!.ts -vcodec copy -acodec copy -vbsf h264_mp4toannexb %~dp0stg1\!fn1!.ts
)
goto :eof
pause:rename1
for /r "." %%i in (*.ts) do (
set "fn1=%%~ni"
set "con1=!fn1:~1,1!"
set "con2=!fn1:~-2,1!"
set "con3=!fn1:~2,1!"
set "con4=!fn1:~-3,1!"
if "!con1!"=="_" (
if "!con2!"=="_" (
ren "%%i" "00!fn1:~0,1!_00!fn1:~-1,1!.ts"
echo 00!fn1:~0,1!_00!fn1:~-1,1!.ts
) else (
ren "%%i" "00!fn1:~0,1!_0!fn1:~-2,2!.ts"
echo 00!fn1:~0,1!_0!fn1:~-2,2!.ts
)
)
if "!con3!"=="_" (
if "!con2!"=="_" (
ren "%%i" "0!fn1:~0,2!_00!fn1:~-1,1!.ts"
echo 0!fn1:~0,2!_00!fn1:~-1,1!.ts
) else (
ren "%%i" "0!fn1:~0,2!_0!fn1:~-2,2!.ts"
echo 0!fn1:~0,2!_0!fn1:~-2,2!.ts
)
)
echo !fn1!
)
goto :eof
pause
发个以前用copy /b 笨办法合并百度云的脚本=_=
2019年05月13日 06点05分
12
我的神啊。。。。。你怎么写成的?我头大了
2019年05月13日 10点05分
@406738128 没有啊,就是自动把24个视频按照顺序整理下名字然后转成标准ts,copy b合并,然后再转成mp4呀=_=
2019年05月13日 11点05分
@406738128 就是弄成批量了,一下能处理很多个=_=,我用这个弄了几百g百度云视频了,现在才发现原来直接FFmpeg会方便很多
2019年05月13日 11点05分
level 5
@echo off
cd /d "%~dp0"
setlocal enabledelayedexpansion
for /L %%j in (1,1,24) do (
cd /d "%~dp0"
if exist ".\ipt\%%j" (
cd /d ".\ipt\%%j"
call :rename1
)
)for /L %%k in (1,1,24) do (
cd /d "%~dp0"
if exist ".\ipt\%%k" (
cd /d ".\ipt\%%k"
call :lstf1
call :ecp4
cd /d "%~dp0"
ren "%~dp0\output\tmp.mp4" %%k.mp4
)
)
pause
exit
:rename1
for /r "." %%i in (*.ts) do (
set "fn1=%%~ni"
set "con1=!fn1:~1,1!"
set "con2=!fn1:~-2,1!"
set "con3=!fn1:~2,1!"
set "con4=!fn1:~-3,1!"
if "!con1!"=="_" (
if "!con2!"=="_" (
ren "%%i" "00!fn1:~0,1!_00!fn1:~-1,1!.ts"
echo 00!fn1:~0,1!_00!fn1:~-1,1!.ts
) else (
ren "%%i" "00!fn1:~0,1!_0!fn1:~-2,2!.ts"
echo 00!fn1:~0,1!_0!fn1:~-2,2!.ts
)
)
if "!con3!"=="_" (
if "!con2!"=="_" (
ren "%%i" "0!fn1:~0,2!_00!fn1:~-1,1!.ts"
echo 0!fn1:~0,2!_00!fn1:~-1,1!.ts
) else (
ren "%%i" "0!fn1:~0,2!_0!fn1:~-2,2!.ts"
echo 0!fn1:~0,2!_0!fn1:~-2,2!.ts
)
)
echo !fn1!
)
goto :eof
pause
:lstf1
if not exist "list.txt" (
for /r "." %%m in (*.ts) do (
echo file %%~nm.ts >> list.txt
)
)
goto :eof
pause:ecp4
%~dp0ffmpeg -f concat -i list.txt -c copy "%~dp0output\tmp.mp4"
goto :eof
pause
改成直接ffpmpeg了,这下效率高得多了=_=
2019年05月14日 04点05分
13
![[大拇指]](/static/emoticons/u5927u62c7u6307.png)
好,这样才会帮助更多网友
2019年05月14日 07点05分
忘说了,在同目录建立ipt和output两个文件夹,把ts文件的文件夹放在此目录下的ipt目录里,改名字为数字,1,2,3,4这样,然后运行,输出文件会在output里,还有ffmpeg要在同目录下
2019年05月14日 07点05分
百度云的缓存就合并了
2019年05月14日 07点05分
我一般就直接用Pr搞,虽然AME的效率感人,但还是可以的
2019年06月29日 12点06分
level 1
可不用生成filelist列表,腾讯视频缓存的ts文件夹中,有一个.m3u8的文件,本身就是ts播放列表
使用一个指令就可以合成:
ffmpeg -i .m3u8 -c copy new.mp4
注:
1、此方法仅适用未加密的ts文件,即ts可以用播放器正常播放
2、待合并的所有.ts文件与.m3u8文件放在同一目录下
3、m3u8文件中不能有ts文件的绝对路径,可用记事本编辑删除绝对路径,列表参考:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:15
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:12.440,
0.ts
#EXTINF:12.000,
1.ts
#EXTINF:12.080,
2.ts
#EXT-X-ENDLIST
2019年09月20日 05点09分
15
你试下现在还行不
2021年08月02日 15点08分
level 1
网易云课堂搜索ffmpeg小哥,专门讲解m3u8,包括加密模式。
2019年09月20日 07点09分
16