ffmpeg从多个来源输出文件名

时间:2019-05-21 10:47:58

标签: batch-file ffmpeg

我想让输出文件具有与源相同的名称(例如list.txt中的第一个文件名),该怎么办?

这是我拥有的代码,它将文件夹中的所有.avi转换为单个文件,并将其重命名为output.avi

我希望文件名与源文件夹中的第一个文件名或output.avi中的第一个文件名相同,而不是list.txt

for %%f in (*.avi) do (
    echo file %%f >> list.txt
)
ffmpeg -f concat -safe 0 -i list.txt -c copy output.avi
del list.txt

我想知道的一件事,是否可以将视频水平翻转或镜像而不重新编码?

2 个答案:

答案 0 :(得分:1)

我认为ffmpeg不支持对输入文件名进行“反向引用”。我建议以bash或通过其他脚本编写方式进行处理。例如。您可以使用list.txt的第一行作为输出文件名,如下所示(未经测试):

ffmpeg -f concat -i list.txt -c copy output/$(head -1 list.txt)

在此示例中,如果第一行是foo.avi,则输出将保存在output/foo.avi

  

是否可以将视频水平翻转或镜像而不重新编码

显然,您可以set rotation metadata而无需重新编码,以提示视频播放器以给定的旋转方式播放它。也许有用于镜像或​​翻转的元数据标志,但我找不到任何标志。

如果这对您不起作用,我认为没有内置的解决方案可以在不重新编码的情况下完成此操作。

答案 1 :(得分:1)

  

是否可以将视频水平翻转或镜像而不重新编码?

否,使用过滤器(例如hflip,vflip,rotate等)时不可以。过滤需要重新编码。

在另一个答案中提到的旋转元数据可能足以满足此用例,但玩家之间的支持并不普遍。没有用于镜像或​​翻转的元数据:只有旋转。

如果这不可接受,则播放器本身可能具有镜像/翻转功能。示例:

mpv -vf hflip video.mp4