如何对电影视频进行横竖屏批量转换

看视频的时候是不是经常遇到不恰当的横向拍摄或者竖向拍摄,不恰当的手持拍摄角度,最后势必会影响到观影效果。

所以经常遇到原本是要横屏观看的,结果视频是竖着的,当然,在手机上面看是没有这困扰的,如果是电脑,就要设置播放器。

小编是个强迫症的人,一定要把视频素材角度还原到它该有的位置。小编书读的不多,要求还挺多,凭着对FFMPEG一点点的了解,和bash的一点点了解,

这个问题当然能解决,但效率不高。

上个月,突然想到DEEPSEEK,于是奇怪的知识又灌输到我脑子里了。

问题困境:如何将以下5个竖向视频批量性变成横向?

实现的效果如下(横向)

当然这难不倒DS,给出的答案是

以下针对视频文件1.mp4到5.mp4的批量旋转示例:

1. 创建测试文件

“`bash
# 先创建5个测试视频文件(如果没有的话)
for i in {1..5}; do
ffmpeg -f lavfi -i testsrc=duration=10:size=640×480:rate=30 \
-c:v libx264 -pix_fmt yuv420p “${i}.mp4”
done
“`

2. 基本批量旋转命令

“`bash
# 最简单的批量旋转
for i in {1..5}; do
ffmpeg -i “${i}.mp4” -vf “transpose=1” -c:a copy “rotated_${i}.mp4”
done
“`

3. 带进度显示的批量旋转

“`bash
#!/bin/bash
# 批量旋转1.mp4到5.mp4,带进度显示
echo “开始批量旋转视频…”

for i in {1..5}; do
input=”${i}.mp4″
output=”rotated_${i}.mp4″

if [ -f “$input” ]; then
echo “正在处理: $input → $output”
ffmpeg -i “$input” -vf “transpose=1” -c:a copy “$output” -y
echo “✓ 完成: $output”
else
echo “✗ 文件不存在: $input”
fi
done

echo “所有视频处理完成!”
ls -la rotated_*.mp4
“`

4. 使用数组指定文件

“`bash
#!/bin/bash
# 使用数组明确指定要处理的文件
videos=(“1.mp4” “2.mp4” “3.mp4” “4.mp4” “5.mp4”)

echo “开始处理指定视频文件…”
for video in “${videos[@]}”; do
if [ -f “$video” ]; then
output=”rotated_${video}”
echo “处理: $video”
ffmpeg -i “$video” -vf “transpose=1” -c:a copy “$output”
else
echo “警告: $video 不存在”
fi
done
“`

5. 并行处理加速

“`bash
# 使用xargs并行处理(同时处理2个)
echo {1..5}.mp4 | xargs -n 1 -P 2 -I {} bash -c ‘
echo “处理: {}”
ffmpeg -i “$1” -vf “transpose=1” -c:a copy “rotated_$1″
‘ _ {}
“`

6. 生成处理报告

“`bash
#!/bin/bash
# 批量处理并生成报告
log_file=”rotation_report.txt”
echo “视频旋转处理报告 – $(date)” > “$log_file”
echo “==========================” >> “$log_file”

for i in {1..5}; do
input=”${i}.mp4″
output=”rotated_${i}.mp4″

if [ -f “$input” ]; then
echo “处理中: $input” | tee -a “$log_file”
start_time=$(date +%s)

ffmpeg -i “$input” -vf “transpose=1” -c:a copy “$output” -y 2>&1 | tee -a “$log_file”

end_time=$(date +%s)
duration=$((end_time – start_time))
echo “✓ 完成: $output (耗时: ${duration}s)” | tee -a “$log_file”
echo “—” >> “$log_file”
else
echo “✗ 跳过: $input (文件不存在)” | tee -a “$log_file”
fi
done

echo “处理完成!查看报告: $log_file”
“`

7. 单行命令快速处理

“`bash
# 最简洁的单行命令
for i in {1..5}; do ffmpeg -i “$i.mp4” -vf “transpose=1” -c:a copy “rotated_$i.mp4”; done
“`

8. 检查处理结果

“`bash
# 处理完成后检查文件
echo “处理前文件:”
ls -la [1-5].mp4

echo -e “\n处理后文件:”
ls -la rotated_*.mp4

# 检查视频信息
echo -e “\n旋转后的视频信息:”
for i in {1..5}; do
if [ -f “rotated_$i.mp4” ]; then
echo “=== rotated_$i.mp4 ===”
ffmpeg -i “rotated_$i.mp4” 2>&1 | grep -E “Stream|Duration”
fi
done
“`

执行示例:

“`bash
# 给脚本执行权限
chmod +x rotate_videos.sh

# 运行脚本
./rotate_videos.sh

# 或者直接运行命令
for i in {1..5}; do ffmpeg -i “$i.mp4” -vf “transpose=1” -c:a copy “rotated_$i.mp4”; done
“`

预期输出结果:

“`
rotated_1.mp4
rotated_2.mp4
rotated_3.mp4
rotated_4.mp4
rotated_5.mp4
“`

虽然小编不是太懂,这一眼看过去,显然不够快速,不快的原因是,会对视频重新进行编码。

凭着对FFMPEG的一点点了解,结合平时我对单个视频的操作所使用的代码是

ffmpeg -display_rotation:0 90 -i input.mp4 -c copy output.mp4

借鉴其方案决定对其微调一下,将多个视频文件名列出一个清单list.txt,然后结合base,执行ffmpeg里的-display_rotation元数据旋转

@echo off setlocal enabledelayedexpansion

echo 使用270度旋转方案… echo.

for /f “usebackq delims=” %%i in (“list.txt”) do ( set “input=%%i” set “output=rotated_%%i”

)

echo 270度旋转完成! pause

显然结果不出小编所料,成了。

写在最后的话视频能完成旋转前提是,电脑安装了FFMPEG。

未经允许不得转载:哈哈软件 » 如何对电影视频进行横竖屏批量转换